top of page

Restoring SQL Server System Databases


לא בכל יום מזדמן לנו (אם בכלל), לבצע פעולת שחזור לקבצי System Databases.

לכן, רואה לנכון לשתף אתכם בחוויה זו אשר כללה מספר הפתעות בדרך..

אז לאחרונה נתקלתי במשימה מאתגרת – Restore System Databases !

הסיבה לכך - אחד ממערכי הווירטואליזציה של אחד מלקוחותיי הותקף על ידי וירוס רציני והשבית את הישויות הבאות:

  • שרת ה-Host.

  • שרתים וירטואליים אחרים אשר מותקנים על גבי ה-Host, ביניהם שרת SQL.

  • גיבויי ה-Snapshots של המכונות נפגעו (מזל שגיבויי ה-DBs היו זמינים ממקור אחסון אחר).

תחילה, הכין עבורי הלקוח שרת חדש עם מערכת הפעלה נקייה וביקש שאחזיר את השרת למצבו האחרון עם כל ההגדרות, ג'ובים ובסיסי הנתונים השונים.

שלב 1: ביצוע התקנה נקייה של SQL Server 2016

  • חובה להתקין את גרסת ה-SQL בהתאם לזו שהייתה מותקנת לפני התקלה (כולל העדכונים). אל דאגה - במידה ואינך זוכר את הגרסה המדויקת שהותקנה, בהמשך המדריך תתקבל הודעת שגיאה אשר תציג את הגרסה הנדרשת :-)

שלב 2: שחזור System Databases

  • נעצור את הסרביסים הפעילים של ה-SQL.

  • כעת נתחיל בשחזור master database.

  • נעביר את ה-SQL Server למצב single mode ע"י הוספת הפרמטר (m-) במסך ה-SQL Server Configuration.

  • נפעיל את ה-Service של ה-SQL Server.

  • על מנת להיכנס למסך Query של SQL, נפתח מסך תוכנת CMD ונרשום את הפקודה:

​ sqlcmd – S ServerName

  • יש להחליף את ServerName עם שם השרת.

  • כעת נרשום פקודה עבור Restore Database:

RESTORE database master from disk = 'C:\Temp\master.bak' with replace;

אופססס... חטפנו שגיאה – הגיבוי של ה-master האחרון היה בגרסה מתקדמת יותר של ה-SQL.

  • גרסה נוכחית מההתקנה: 13.00.1601

  • גרסה נדרשת: 13.00.4001

כעת נתקין את הגרסה הנדרשת. במקרה הזה נדרש להתקין את ה-Build הנכון.

כדי לעשות זאת נגלוש לקישור הבא, נאתר את הגרסה הנדרשת (ראה בדוגמה מתחת בצהוב) ונוריד את קבצי העדכונים הנדרשים:

  • נחזור שוב על פעולת ה-Restore וכעת הפעולה הצליחה !

** טיפ **

  • להוסיף לשם קובץ הגיבוי של ה-master (או בכלל) את נתוני גרסת ה-SQL שברשותכם. זה ייקצר זמנים ויחסוך תסכולים :-)

  • להלן קטע קוד:

/****************************************** Step-1: Preparing Variables ******************************************/

-- Variables:

DECLARE @timestamp VARCHAR(255)

,@path VARCHAR(255) ,@SQLVersion varchar(50);

-- Timestamp:

SET @timestamp = REPLACE(CONVERT(VARCHAR(255), GETDATE(), 20) ,':','-');

-- SQL Version: ;WITH GetSQLVersion AS ( SELECT CASE WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('productversion')) like '8%' THEN 'SQL2000' WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('productversion')) like '9%' THEN 'SQL2005' WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('productversion')) like '10.0%' THEN 'SQL2008' WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('productversion')) like '10.5%' THEN 'SQL2008 R2' WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('productversion')) like '11%' THEN 'SQL2012' WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('productversion')) like '12%' THEN 'SQL2014' WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('productversion')) like '13%' THEN 'SQL2016' WHEN CONVERT(VARCHAR(128), SERVERPROPERTY ('productversion')) like '14%' THEN 'SQL2017' ELSE 'unknown' END AS MajorVersion ,SERVERPROPERTY('ProductLevel') AS ProductLevel ,SERVERPROPERTY('ProductVersion') AS ProductVersion ) SELECT @SQLVersion = REPLACE (CONVERT(VARCHAR(20), MajorVersion) +'_'+CONVERT(VARCHAR(20), ProductLevel) +'_'+CONVERT(VARCHAR(20), ProductVersion) , '.', '-') FROM GetSQLVersion;

-- Full Backup Path Include Date and SQL Version: SET @path = 'H:\Temp\master_'+ @SQLVersion +'_'+ @timestamp +'.bak';

/****************************************** Step-2: Execute Backup Database ******************************************/ BACKUP DATABASE [master] TO DISK = @path ;

שלב 3: הפעלה וחיבור ל-SQL Server

  • בשלב זה ה-סרביס של ה-SQL נמצא במצב Stopped.

  • כעת נסיר את הפרמטר m- ונפעיל את הסרביס.

  • התקבלה השגיאה הבאה:

  • מבדיקת השגיאה ביומן האירועים של השרת עולה כי בבסיס הנתונים - master, אשר מכיל מידע שהיה מוגדר לפני התקלה, מוגדרים הנתיבים של שאר קבצי System Databases לנתיבים אחרים.

(שגיאה זו הופיעה עבור model, msdb ו-tempdb).

לכן, כדי לפתור את הבעיה עליי לבצע:

  • יצירת הנתיב המבוקש.

  • מתן הרשאה מלאה על הנתיב לחשבון שמריץ את הסרביס של ה-SQL.

  • להפעיל שוב את הסרביס של ה-SQL.

  • וכעת ה-SQL מתחבר !

  • בשלב זה ניתן לשחזר את שאר User Databases שהיו קיימים בשרת.

** טיפ **

  • לאחר שה-SQL עלה, ניתן לשנות את נתיבי קבצי ה-Database לפי המדריכים הבאים:

  • master (קישור).

  • tempdb, model, msdb (קישור).

שיהיה בהצלחה ! עידן גורן.

Featured Posts
Check back soon
Once posts are published, you’ll see them here.
Recent Posts
Archive
Search By Tags
No tags yet.
Follow Us
  • Facebook Basic Square
  • Twitter Basic Square
  • Google+ Basic Square
bottom of page