שתף עכשיו:
תוכן העניינים להסתיר
10. שאלות נפוצות

שחיתות מסד נתונים היא כל דבר SQL Server סיוט של מנהל. כאשר נתונים עסקיים קריטיים הופכים בלתי נגישים או לא אמינים, ה-cost יכול להיות הרסני. מדריך מקיף זה מכסה את כל מה שצריך לדעת על השימוש ב-DBCC CHECKDB לשמירה על תקינות מסד הנתונים ולמניעת נזק, בנוסף לפתרונות שחזור מתקדמים למקרים בהם כלים סטנדרטיים אינם מספיקים.

1. חשיבותו של SQL Server תקינות מסד הנתונים

1.1 מהי פגיעה במסד נתונים Costעסקים

היום, מ'ost עסקים מאחסנים את הנתונים הקריטיים שלהם בבסיסי נתונים. כאשר מתרחשת פגיעה בבסיס הנתונים, ההשלכות הן קטסטרופליות:

  • הפסדים כלכליים ממוצע של 2.3 מיליון דולר בשנה עקב אובדן נתונים, כאשר כשל חומרה ושחיתות הם הגורמים העיקריים (EMC Corporation)
  • שיעורי סגירת עסקים מראים כי 50% מהעסקים הקטנים שחווים אובדן נתונים עקב כשלי חומרה פוסקים את הרגל תוך שנתיים, בעוד ש-94% מהעסקים שחווים אובדן נתונים קטסטרופלי אינם שורדים כלל.
  • תדירות פגיעה בנתונים משפיע על 20% מהיישומים הקריטיים למשימה מדי שנה, וגורם לשיבושים בהמשכיות העסקית (מחקר של גרטנר)
  • שחיתות הקשורה לחומרה מהווה 67% מכלל מקרי אובדן הנתונים עקב קריסות של כונן קשיח וכשלים במערכת, כאשר 40% מאובדן הנתונים מיוחס ישירות לתקלות בחומרה.
  • נזק תוכנה גosts נע בין אלפי דולרים למיליוני דולרים בהתאם לחומרה ולהיקף, כאשר 82% מהעסקים חוו הפסקות חשמל לא מתוכננות בהן שחיתות הייתה גורם מוביל

1.2 מדוע בדיקות בריאות תקופתיות הן קריטיות

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

  1. לזהות שחיתות פוטנציאלית מוקדם ולטפל בה במהירות, ולמנוע בעיות מחמירות ונפוצות, דבר שעלול להוביל לתוצאות הרות אסון עבור העסק.
  2. ודא שהמסד נתונים פועל בביצועים אופטימליים.
  3. גost של בדיקות תקינות מסד נתונים פרואקטיביות נמוך בהרבה מזה של שחזור נתונים ריאקטיבי לאחר אסון מסד נתונים.

1.3 מבוא לפקודות שלמות מסד נתונים

SQL Server מספק מספר פקודות מובנות לשמירה על תקינות מסד הנתונים, עם DBCC CHECKDB משמש כ-most כלי מקיף לבדיקת שלמות זמין. פקודות אלו פועלות יחד כדי לאמת היבטים שונים של מבנה מסד הנתונים שלך, החל מטבלאות בודדות ועד לעקביות מסד הנתונים כולו, ויוצרות אסטרטגיית תחזוקה מלאה ששומרת על בטיחות הנתונים שלך ונגישים.

2. מה זה DBCC CHECKDB

DBCC CHECKDB is SQL Serverהכלי העיקרי של לאימות שלמות מסד הנתונים ולזיהוי בעיות פגיעה.

  • זוהי פקודה T-SQL, לא כלי GUI.
  • ניתן לבצע זאת באמצעות שיטות נפוצות, כגון SQL Server סטודיו לניהול (SSMS), SQL Server סוכן, SQLCMD וכו'.

2.1 מה CHECKDB בודק בפועל במסד הנתונים שלך

כאשר אתה מפעיל את DBCC CHECKDB, הפקודה מבצעת מספר שכבות אימות על פני מבנה מסד הנתונים שלך:

  • אימות סכומי בדיקת עמודים כדי לזהות נזק פיזי ובעיות הקשורות לחומרה
  • אימות עקביות אינדקס כדי להבטיח אחזור נתונים וביצועי שאילתות תקינים
  • בדיקות מבנה ההקצאה כדי לאשר שימוש מדויק בשטח ובקצאת עמודים
  • בדיקת שלמות רפרנסרית בין טבלאות קשורות לקשרים בין מפתחות זרים
  • אימות עקביות טבלת המערכת על מנת להבטיח SQL Serverהמטא-דאטה הפנימי של נשאר אמין
  • אימות קישור דף נתונים כדי לאשר תקינות שרשרת העמודים
  • עקביות סכימת מסד הנתונים לאמת הגדרות ותלויות של אובייקטים

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

3. הרצת DBCC CHECKDB: שלב אחר שלב

3.1 תנאים מוקדמים

להלן רשימת תיוג לפני ביצוע כל פעולת DBCC CHECKDB:

  • גיבוי מלא של מסד הנתונים – צור גיבוי מלא לפני ביצוע בדיקות תקינות, כרשת ביטחון במקרה של זיהוי נזק או פעולות תיקון.
  • הרשאות מתאימות – אתה זקוק להרשאות sysadmin או db_owner כדי לבצע פקודות DBCC CHECKDB
  • משאבי מערכת מספיקים:
    • זיכרון: 25% מגודל מסד הנתונים
    • שטח Tempdb: 10-15% מגודל מסד הנתונים
    • מעבד: זמינות של 50-70% במהלך תחזוקה
    • קלט/פלט: צפו לפעולות קריאה כבדות
  • נגישות מסד הנתונים – ודא שמסד הנתונים שלך נגיש ואינו במצב מוגבל, מכיוון ש-CHECKDB דורש גישת קריאה לכל דפי מסד הנתונים

3.2 פקודה בסיסית

מ 'ost פקודה בסיסית של DBCC CHECKDB כוללת שלוש וריאציות נפוצות:

(1) בדוק את מסד הנתונים הנוכחי (ללא פרמטרים):

DBCC CHECKDB

(2) בדוק מסד נתונים לפי שם:

DBCC CHECKDB ('YourDatabaseName')

(3) בדיקת מסד נתונים לפי מזהה:

DBCC CHECKDB(5)  -- Replace 5 with your database ID

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

להלן צילום מסך של הרצת DBCC CHECKDB ב- SQL Server סטודיו לניהול (SSMS):

צילום מסך של הרצת DBCC CHECKDB ב- SQL Server סטודיו לניהול (SSMS), כולל תוצאות הפלט.

3.3 אפשרויות מלאות

להלן האפשרויות המלאות עבור DBCC CHECKDB:

קטגוריה אפשרות תיאור דוגמה ל-DBCC CHECKDB
אפשרויות תיקון REPAIR_REBUILD תיקונים ללא אובדן נתונים (למשל, בנייה מחדש של אינדקס) DBCC CHECKDB ('MyDB', REPAIR_REBUILD)
REPAIR_FAST אין צורך בתיקון. תאימות לאחור בלבד. DBCC CHECKDB ('MyDB', REPAIR_FAST)
REPAIR_ALLOW_DATA_LOSS מתקן את כל השגיאות (עלול לגרום לאובדן נתונים) DBCC CHECKDB ('CorruptDB', REPAIR_ALLOW_DATA_LOSS)
בקרת היקף NOINDEX דילוג על בדיקות אינדקס שאינן מקובצות באשכולות DBCC CHECKDB ('LargeDB', NOINDEX)
PHYSICAL_ONLY בודק רק את שלמות האחסון הפיזי (דפים/רשומות) DBCC CHECKDB ('ProdDB', PHYSICAL_ONLY)
DATA_PURITY בדיקות לאיתור שגיאות לוגיות בערך העמודה (למשל, תאריכים לא חוקיים) DBCC CHECKDB ('OldDB', DATA_PURITY)
EXTENDED_LOGICAL_CHECKS בדיקות לוגיות עמוקות (תצוגות מאונדקסות, אינדקסים מרחביים/XML) DBCC CHECKDB ('ComplexDB', EXTENDED_LOGICAL_CHECKS)
בקרת תפוקה ALL_ERRORMSGS מציג את כל השגיאות (ברירת מחדל: 200 לכל אובייקט) DBCC CHECKDB ('MyDB', ALL_ERRORMSGS)
NO_INFOMSGS מסתיר הודעות מידע DBCC CHECKDB ('MyDB', NO_INFOMSGS)
ביצוע TABLOCK משתמש בנעילות טבלה (מפחית את השימוש ב-TempDB אך חוסם כתיבות) DBCC CHECKDB ('BigDB', TABLOCK)
MAXDOP = number עוקף הגדרות מקביליות DBCC CHECKDB ('MyDB', MAXDOP = 2)
שירות ESTIMATEONLY הערכת שטח TempDB הנדרש. (אין בדיקה בפועל) DBCC CHECKDB ('MyDB', ESTIMATEONLY)

4. הבנת התוצאות שלך

DBCC CHECKDB יפיק תוצאות שונות בהתאם לשאלה האם הביצוע שלו הושלם בהצלחה או לא. בואו נסביר אותן בפירוט.

4.1 ביצוע CHECKDB הושלם בהצלחה

אם ביצוע DBCC CHECKDB יושלם בהצלחה, הוא ידווח סוגים שונים של תוצאות בהתאם למצב תקינות מסד הנתונים שלך.

4.1.1 לא נמצאו בעיות

אם DBCC CHECKDB לא מוצא בעיות, תראה פלט דומה ל:

CHECKDB found 0 allocation errors and 0 consistency errors in database 'YourDatabase'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

תוצאה זו מצביעה על כך שמסד הנתונים שלך שומר על שלמות מושלמת בכל המבנים שנבדקו.

4.1.2 נמצאו שגיאות פגיעה

בכל פעם ש-DBCC CHECKDB מזהה שגיאת פגיעה, הוא ידווח הודעת שגיאה במבנה הבא:
הסבר מפורט על מבנה הודעת השגיאה DBCC CHECKDB, כולל המשמעות של כל חלק.מדריך רמת חומרה:

  • רמה 16-19: שגיאות הניתנות לתיקון על ידי המשתמש, לעיתים קרובות נזקים קלים
  • רמה 20-24: שגיאות מערכת, נזק חמור הדורשות טיפול מיידי
  • הרמה 25: שגיאות חמורות, ייתכן שמסד הנתונים אינו נגיש

שגיאות נפוצות כוללות:

  • כשלים בבדיקת דף (הודעה 824)
  • שגיאות הקצאה (הודעה 8928)
  • בעיות עקביות באינדקס (הודעה 8964)

הבנת מבנה ההודעה מסייעת לתעדף פעולות תגובה ולקבוע אסטרטגיות התאוששות מתאימות.

4.1.3 הודעות מידע ואזהרה נפוצות

לא כל פלט של DBCC CHECKDB מצביע על בעיות חמורות. ייתכן שהוא גם יציג הודעות מידע ואזהרה, כולל:

  • הצהרות תיקון – הודעות המציעות פקודות תיקון לתיקון בעיות קלות
  • אזהרות הקצאה – אזהרות לגבי הקצאת שטח שאינן משפיעות על גישת הנתונים
  • המלצות ביצועים – הצעות לתחזוקה ואופטימיזציה של אינדקס
  • הודעות מידע – הודעות סטטוס כלליות שאינן דורשות פעולה מיידית

הודעות אלו מספקות הנחיות תחזוקה חשובות תוך הבחנה בין נזקים קריטיים הדורשים פעולה מיידית לבין בעיות קלות שניתן לטפל בהן במהלך חלונות תחזוקה רגילים.

הודעת אזהרה לדוגמה:

DBCC results for 'InventoryDatabase'.
Msg 2570, Level 16, State 3, Line 1
Page (2:8452), slot 17 in object ID 485577333, index ID 0, partition ID 72057594038845456, 
alloc unit ID 72057594042515968 (type "In-row data").
Column "ProductPrice" value is out of range for data type "decimal". Update column to a legal value.
There are 45892 rows in 1247 pages for object "Products".
CHECKDB found 0 allocation errors and 1 consistency errors in table 'Products' (object ID 485577333).
CHECKDB found 0 allocation errors and 1 consistency errors in database 'InventoryDatabase'.

4.2 ביטול ביצוע CHECKDB

אם CHECKDB יבוטל במהלך ביצועו מסיבות שונות, הוא ידווח הודעת שגיאה ויוסיף יומן שגיאות עם קוד המצב שלהלן:

מדינה תיאור
0 הועלתה שגיאה מספר 8930. שגיאה זו מצביעה על פגיעה במטא-נתונים שסיימה את פקודת DBCC.
1 הועלתה שגיאה מספר 8967. אירעה שגיאת DBCC פנימית.
2 אירעה כשל במהלך תיקון מסד נתונים במצב חירום.
3 זה מצביע על פגיעה במטה-דאטה שסיימה את פקודת DBCC.
4 זוהתה טענה או הפרת גישה.
5 אירעה שגיאה לא ידועה שסיימה את פקודת DBCC.

הודעת שגיאה לדוגמה:

Failed:(-1073548784) Executing the query "DBCC CHECKDB('InventoryDB') WITH NO_INFOMSGS" failed with the following error: "There is insufficient system memory to run this query.Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.

or

2024-11-18 09:52:41.38 spid35 I/O error (bad page ID) detected during read at offset 0x00000024886000 in file 'C:\Data\MSSQL\DATA\SalesDatabase.mdf'.

דוגמה ליומן שגיאות:

11/15/2024 09:23:17,spid52,Unknown,DBCC CHECKDB (SalesDatabase) WITH all_errormsgs no_infomsgs executed by CORP\dbadmin terminated abnormally due to error state 3. Elapsed time: 1 hours 32 minutes 18 seconds.

במקרה כזה, ניתן לנסות אפשרויות מתקדמות חלופיות כגון DataNumen SQL Recovery כדי לתקן את הפגם במסד הנתונים שלך.

5. תיקון שגיאות שחיתות

5.1 גיבוי ושחזור: הפתרון הבטוח ביותר

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

5.2 פתרונות לשחיתות ברמת העמוד

עבור פגיעה מבודדת בדף המשפיעה על חלקי נתונים קטנים, SQL Server מהדורת Enterprise מציעה יכולות שחזור דפים המתקנים דפים פגומים ספציפיים ללא שחזור מלא של מסד הנתונים. טכניקה מתקדמת זו דורשת מודל שחזור מלא וגיבויים עדכניים של יומני רישום.

תהליך שחזור דף שלב אחר שלב:

  1. זהה את הדף הפגום מהודעת שגיאה של CHECKDB (לדוגמה, עמוד 1:256)
  2. גיבוי יומן עדכני כדי לתעד עסקאות אחרונות:
BACKUP LOG YourDatabase TO DISK = 'C:\Backups\YourDB_Log.trn'
  1. שחזור הדף הפגום מה-מ'ost גיבוי מלא אחרון:
RESTORE DATABASE YourDatabase PAGE = '1:256' 
FROM DISK = 'C:\Backups\YourDB_Full.bak'
  1. החל גיבוי דיפרנציאלי (אם זמין):
RESTORE DATABASE YourDatabase PAGE = '1:256' 
FROM DISK = 'C:\Backups\YourDB_Diff.bak'
  1. החל את כל גיבויי הלוגים ברצף, כולל זה שזה עתה נוצר:
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log1.trn'
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log2.trn'
-- Continue for all log backups in order
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Log.trn'
  1. בצע גיבוי סופי של הלוג ושחזור כדי לעדכן את הדף:
BACKUP LOG YourDatabase TO DISK = 'C:\Backups\YourDB_Final.trn'
RESTORE LOG YourDatabase FROM DISK = 'C:\Backups\YourDB_Final.trn'

אלטרנטיבה לנתונים שאינם קריטיים: אם פגיעה משפיעה על נתונים שאינם קריטיים, ייתכן שתייצא שורות שלא הושפעו לטבלאות חדשות לפני בנייה מחדש של מבנים פגומים:

-- Export good data to a new table
SELECT * INTO YourTable_Backup 
FROM YourTable 
WHERE NOT EXISTS (SELECT 1 FROM corrupt_page_list WHERE page_id = target_page)

-- Drop and recreate the corrupted table
DROP TABLE YourTable
-- Recreate table structure and reload clean data

5.3 פתרונות מהירים לשחיתות אינדקס

פגיעה באינדקסים מגיבה לעיתים קרובות היטב לפעולות בנייה מחדש היוצרות מחדש מבני אינדקס מבלי להשפיע על נתוני הטבלה הבסיסית:

ALTER INDEX ALL ON YourTable REBUILD

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

6. השתמשו בפונקציות REPAIR_REBUILD ו-REPAIR_ALLOW_DATA_LOSS

אם כל השיטות הקודמות נכשלות או אינן אפשריות, ניתן להשתמש באפשרויות REPAIR_REBUILD ו-REPAIR_ALLOW_DATA_LOSS כדי לתקן את מסד הנתונים.

6.1 תיקון_בנייה מחדש (אפשרות בטוחה יותר):

  • לשימוש: פגיעה באינדקס ושגיאות הקצאה קלות
  • בטיחות נתונים: ניסיונות לתקן נזקים ללא מחיקת נתונים
  • רמת סיכון: נמוך - לא צפוי אובדן נתונים
  • תרחישים אופייניים: פגיעה באינדקסים שאינם מקובצים באשכולות, בעיות קלות במטא-דאטה
  • דוגמה לפקודה: DBCC CHECKDB('YourDB', REPAIR_REBUILD)

6.2 REPAIR_ALLOW_DATA_LOSS (מוצא אחרון):

  • לשימוש: פגיעה חמורה כאשר גיבויים אינם זמינים
  • בטיחות נתונים: עשוי למחוק נתונים פגומים כדי לשחזר את פונקציונליות מסד הנתונים
  • רמת סיכון: גבוה - אובדן נתונים קבוע אפשרי
  • תרחישים אופייניים: פגיעה בדף, נזק לטבלת המערכת, שגיאות בשרשרת ההקצאה
  • דוגמה לפקודה: DBCC CHECKDB('YourDB', REPAIR_ALLOW_DATA_LOSS)

6.3 שיטות עבודה מומלצות עבור אפשרויות אלו:

  • תמיד לבדוק פעולות תיקון על עותקי מסד נתונים במידת האפשר
  • תמיד לגבות לפני הפעלת האפשרויות הללו
  • תעד את כל השינויים למטרות תאימות ופתרון בעיות
  • הגדר את מסד הנתונים למצב משתמש יחיד לפני ביצוע פעולות תיקון

בדרך כלל, אנחנו צריכים לנסות תיקון_בנייה_מחדש אפשרות ראשונה. אם זה נכשל, נסה REPAIR_ALLOW_DATA_LOSS אוֹפְּצִיָה.

6.4 תוצאות REPAIR_ALLOW_DATA_LOSS

6.4.1 תיקון מצליח עם אובדן נתונים

לפעמים ה REPAIR_ALLOW_DATA_LOSS האפשרות תצליח, אך חלק מהנתונים אינםost לאחר התיקון.

להלן מספר דוגמאות להודעות:

CHECKDB found 0 allocation errors and 103 consistency errors in database ‘SalesDatabase’.
CHECKDB fixed 0 allocation errors and 103 consistency errors in database ‘SalesDatabase’.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Msg 8909, Level 16, State 1, Line 8
Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 45035996309880832 (type Unknown), page ID (1:553) contains an incorrect page ID in its page header. The PageId in the page header = (0:0).
The error has been repaired.
Msg 8939, Level 16, State 98, Line 8
Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 111464090777419776 (type Unknown), page (0:0). Test (IS_OFF (BUF_IOERR, pBUF->bstat)) failed. Values are 2057 and -1.
Could not repair this error.

הסיבה לכך היא ש-DBCC CHECKDB מתקן את מסד הנתונים על ידי נטישת כמה רשומות פגומות, אך למעשה,ost מהם עדיין ניתן לשחזר באמצעות DataNumen SQL Recovery.

קבצים לדוגמה:

SQL Server גרסה קובץ MDF פגום קובץ MDF תוקן על ידי DataNumen SQL Recovery
SQL Server 2014 Error10_1.mdf (הודעה 8909 ואחריה הודעה 8939) (600 רשומותost עם REPAIR_ALLOW_DATA_LOSS) Error10_1_fixed.mdf (אין תיעודost)
SQL Server 2014 Error10_2.mdf (הודעה 8909 ואחריה הודעה 8939) (6000 רשומות (50%)ost עם REPAIR_ALLOW_DATA_LOSS) Error10_2_fixed.mdf (רק 100 רשומות)ost)
SQL Server 2014 שגיאה 7.mdf (100 רשומותost עם REPAIR_ALLOW_DATA_LOSS) Error7_fixed.mdf (רק רשומה אחת)ost)

6.4.2 תיקון כשל - שקלו פתרון מקצועי

If REPAIR_ALLOW_DATA_LOSS נכשל, הוא יפליט הודעת שגיאה אחת או יותר.

להלן מספר דוגמאות:

DBCC results for ‘MyDatabase’.
CHECKDB found 0 allocation errors and 0 consistency errors in database ‘MyDatabase’.
Msg 824, Level 24, State 2, Line 8
SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0xea8a9a2f; actual: 0x37adbff8). It occurred during a read of page (1:28) in database ID 39 at offset 0x00000000038000 in file ‘MyDatabase.mdf’. Additional messages in the SQL Server error log or system event log may provide more detail. This is a severe error condition that threatens database integrity and must be corrected immediately. Complete a full database consistency check (DBCC CHECKDB). This error can be caused by many factors; for more information, see SQL Server Books Online.
Msg 7909, Level 20, State 1, Line 8
The emergency-mode repair failed.You must restore from backup.
Msg 8992, Level 16, State 1, Line 8
Check Catalog Msg 3852, State 1: Row (object_id=69) in sys.objects (type=S ) does not have a matching row (object_id=69,column_id=1) in sys.columns.
Msg 8945, Level 16, State 1, Line 8
Table error: Object ID 41, index ID 1 will be rebuilt.
Could not repair this error.
Msg 2510, Level 16, State 17, Line 8
DBCC checkdb error: This system table index cannot be recreated.
Repair: The Nonclustered index successfully rebuilt for the object “sysidxstats” in database “MyDatabase”.
Msg 8921, Level 16, State 1, Line 8
Check terminated. A failure was detected while collecting facts. Possibly tempdb out of space or a system table is inconsistent. Check previous errors.
Msg 8998, Level 16, State 2, Line 8
Page errors on the GAM, SGAM, or PFS pages prevent allocation integrity checks in database ID 39 pages from (1:0) to (1:8087). See other errors for cause.
CHECKDB found 1 allocation errors and 0 consistency errors not associated with any single object.
Msg 2575, Level 16, State 1, Line 8
The Index Allocation Map (IAM) page (1:157) is pointed to by the next pointer of IAM page (0:0) in object ID 3, index ID 1, partition ID 196608, alloc unit ID 196608 (type In-row data), but it was not detected in the scan.
Could not repair this error.
CHECKDB found 1 allocation errors and 0 consistency errors in table ‘sys.sysrscols’ (object ID 3).
Msg 8948, Level 16, State 3, Line 8
Database error: Page (1:295) is marked with the wrong type in PFS page (1:1). PFS status 0x70 expected 0x60.
The error has been repaired.
Msg 8905, Level 16, State 1, Line 8
Extent (1:296) in database ID 39 is marked allocated in the GAM, but no SGAM or IAM has allocated it.
The error has been repaired.
Msg 5028, Level 16, State 4, Line 4
The system could not activate enough of the database to rebuild the log.
Msg 5125, Level 24, State 2, Line 2
File ‘C:Program FilesMicrosoft SQL ServerMSSQL12.SQL2014MSSQLDATASalesDatabase.mdf’ appears to have been truncated by the operating system. Expected size is 5120 KB but actual size is 5112 KB.
Msg 3414, Level 21, State 1, Line 2
An error occurred during recovery, preventing the database ‘SalesDatabase’ (39:0) from restarting. Diagnose the recovery errors and fix them, or restore from a known good backup. If errors are not corrected or expected, contact Technical Support.
Msg 3313, Level 21, State 1, Line 2
During redoing of a logged operation in database ‘SalesDatabase’, an error occurred at log record ID (135:752:2). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.

במקרים כאלה, עליך להשתמש בפתרון מקצועי כגון DataNumen SQL Recovery כדי לתקן את מסד הנתונים שלך.

קבצי דוגמה

SQL Server גרסה קובץ MDF פגום קובץ MDF תוקן על ידי DataNumen SQL Recovery
SQL Server 2014 Error1_3.mdf (הודעה בודדת 824) Error1_3_fixed.mdf
SQL Server 2014 Error1_1.mdf (שגיאות 824 בהודעה רציפת) שגיאה1_1_fixed.mdf
SQL Server 2014 Error1_2.mdf ((הודעה 824 ואחריה הודעה 7909) Error1_2_fixed.mdf
SQL Server 2014 Error4_1.mdf (הודעה 8992 ואחריה הודעה 3852) Error4_1_fixed.mdf
SQL Server 2014 Error4_2.mdf (הודעה 8992 ואחריה הודעה 3852) Error4_2_fixed.mdf
SQL Server 2014 Error5.mdf (הודעה 8945) Error5_fixed.mdf
SQL Server 2014 Error6.mdf (הודעה 2510) Error6_fixed.mdf
SQL Server 2014 Error2.mdf (הודעה 2575) Error2_fixed.mdf
SQL Server 2014 Error11.mdf (הודעה 8905) Error11_fixed.mdf
SQL Server 2014 Error3.mdf (הודעה 5028) Error3_fixed.mdf
SQL Server 2014 שגיאה 8.mdf (הודעה 5125) שגיאה 8_fixed.mdf
SQL Server 2014 Error9.mdf (הודעה 3313) Error9_fixed.mdf

7. שיטות עבודה מומלצות

7.1 תזמון פעולות CHECKDB רגילות

הטמעת ביצוע שבועי של DBCC CHECKDB עבור מסדי נתונים קריטיים ליצירת נתונים, עם בדיקות יומיות עבור מערכות בעלות כמות גדולה של עסקאות. תזמון פעולות בתקופות בעלות שימוש נמוך כדי למזער את ההשפעה על הביצועים, ושקול מעבר בין בדיקות מלאות לאפשרויות PHYSICAL_ONLY בהתבסס על גודל מסד הנתונים וחלונות התחזוקה. תזמון אוטומטי באמצעות SQL Server הסוכן מבטיח ביצוע עקבי תוך מתן יכולות ניטור והתרעה מרכזיות.

7.2 ניהול השפעה על ביצועים

פעולות DBCC CHECKDB צורכות משאבי מערכת משמעותיים, דבר שעלול להשפיע על פעילות משתמשים בו זמנית. יש לנטר את ניצול המעבד, צריכת הזיכרון וקלט/פלט של הדיסק במהלך בדיקות כדי להבין דפוסי השפעה על הביצועים. יש לשקול שימוש באפשרויות NOINDEX לבדיקות שגרתיות, תוך שמירת אימות מלא לחלונות תחזוקה חודשיים. יש ליישם הרחבות זמן קצוב לשאילתות ואסטרטגיות תקשורת משתמשים כדי לנהל ציפיות במהלך תקופות בדיקות שלמות.

7.3 תכנון חלון תחזוקה

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

7.4 ניטור והתראות אוטומטיות

גדר SQL Server התראות סוכן כדי להודיע ​​למנהלים באופן מיידי כאשר DBCC CHECKDB מזהה נזק. הטמע פתרונות ניתוח יומני רישום אשר מחלצים ומסווגים תוצאות בדיקות שלמות, ומאפשרים ניתוח מגמות וזיהוי בעיות פרואקטיבי. צור נהלי הסלמה המגדירים מסגרות זמן לתגובה וצוות אחראי לרמות חומרת נזק שונות.

8. לוח בדיקות DBCC: האלטרנטיבה הקלה

8.1 מתי להשתמש ב-CHECKTABLE במקום ב-CHECKDB

DBCC CHECKTABLE מספק בדיקת שלמות ממוקדת עבור טבלאות בודדות, מה שהופך אותו לאידיאלי עבור tarפתרון בעיות ותחזוקה של אובייקטי מסד נתונים ספציפיים. השתמש ב-CHECKTABLE בעת חקירת בעיות ביצועים עם טבלאות מסוימות, אימות טבלאות עסקיות קריטיות בין בדיקות מסד נתונים מלאות, או כאשר מגבלות זמן מונעות אימות מלא של מסד הנתונים. גישה זו מוכיחה את עצמה כיעילה במיוחד במסדי נתונים גדולים שבהם פעולות CHECKDB מלאות חורגות מחלונות התחזוקה הזמינים.

8.2 תחביר ודוגמאות של DBCC CHECKTABLE

הפקודה הבסיסית CHECKTABLE tarמקבל טבלאות ספציפיות:

DBCC CHECKTABLE('YourTable')

כמו CHECKDB, CHECKTABLE תומך באפשרויות שונות, כולל NOINDEX לאופטימיזציה של ביצועים ופרמטרי תיקון לפתרון נזקים. ניתן גם לציין שמות סכימה לזיהוי טבלאות מדויק:

DBCC CHECKTABLE('SchemaName.TableName', NOINDEX)

זֶה tarגישת geted מאפשרת אימות שלמות מפורט תוך שמירה על ביצועי המערכת במהלך שעות הפעילות.

8.3 יתרונות ביצועים עבור מסדי נתונים גדולים

פעולות CHECKTABLE מסתיימות מהר משמעותית מבדיקות מסד נתונים מלאות, מה שמאפשר אימות שלמות תכוף יותר של טבלאות קריטיות. גישה זו מאפשרת אימות יומי של טבלאות עסקיות חיוניות תוך שמירת פעולות CHECKDB מקיפות ללוחות זמנים שבועיים או חודשיים. צריכת המשאבים המופחתת הופכת CHECKTABLE למתאימה לביצוע בסביבת ייצור עם השפעה מינימלית על המשתמש.

9. כאשר CHECKDB נכשל

DBCC CHECKDB ייכשל במגוון תרחישים, כולל:

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

9.1 מבוא ל DataNumen SQL Recovery

DataNumen SQL Recovery מספק יכולות מתקדמות יותר:

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

9.2 השוואת שיעורי הצלחה

שיעורי הצלחת התאוששות שונים באופן משמעותי:

  • DBCC CHECKDB ו-CHECKTABLET: 1.27% שיעור החלמה ממוצע
  • DataNumen: 92.6% שיעור החלמה

להלן השוואה תחרותית מלאה:

טבלת השוואה של שיעורי התאוששות בין DataNumen SQL Recovery ומתחרים אחרים, כולל DBCC CHECKDB ו- CHECKTABLE.

9.3 התאוששות משחיתות חמורה

יכולות מתקדמות למקרים חמורים:

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

9.4 מתי לשקול פתרונות מקצועיים

  • אין גיבויים אחרונים זמינים
  • DBCC CHECKDB נכשל
  • תרחישי שחיתות חמורים
  • התמודדות עם נתונים עסקיים קריטיים
  • כשהזמן הוא קריטי
  • כאשר החלמה מרבית חיונית

10. שאלות נפוצות

10.1 שאלות שימוש בסיסיות

ש: באיזו תדירות עליי להריץ את DBCC CHECKDB?

A: עבור מסדי נתונים קריטיים של ייצור, יש להריץ את CHECKDB מדי שבוע. עבור מערכות עם כמות גדולה של עסקאות, יש לשקול בדיקות יומיות באמצעות האפשרות PHYSICAL_ONLY, עם בדיקות מלאות מדי שבוע. ניתן לבדוק מסדי נתונים של פיתוח מדי חודש.

ש: האם ניתן להריץ DBCC CHECKDB על מסד נתונים של ייצור בזמן אמת?

A: כן, DBCC CHECKDB יכול לפעול על מסדי נתונים מקוונים מבלי לחסום משתמשים. עם זאת, הוא צורך משאבים משמעותיים, לכן יש לתזמן אותו בתקופות פעילות נמוכה ולנטר את ביצועי המערכת.

ש: מה ההבדל בין CHECKDB ל-CHECKTABLE?

A: CHECKDB בודק את מסד הנתונים כולו, בעוד ש-CHECKTABLE מתמקד בטבלאות בודדות. השתמש ב-CHECKTABLE עבור tarפתרון בעיות או כאשר צריך לבדוק טבלאות ספציפיות מבלי לסרוק את כל מסד הנתונים.

10.2 שאלות ביצועים ומשאבים

ש: מדוע DBCC CHECKDB לוקח כל כך הרבה זמן על מסד הנתונים הגדול שלי?

A: משך הזמן של CHECKDB תלוי בגודל מסד הנתונים, בביצועי החומרה ובאפשרויות בהן נעשה שימוש. השתמש ב-PHYSICAL_ONLY לבדיקות מהירות יותר, או ב-NOINDEX כדי לדלג על אינדקסים שאינם מקובצים באשכולות. שקול להפעיל אותם במהלך חלונות תחזוקה עם משאבים ייעודיים.

ש: כמה שטח אחסון tempdb צריך CHECKDB?

A: באופן כללי, הקצו 10-15% מגודל מסד הנתונים שלכם עבור tempdb במהלך פעולות CHECKDB. השתמשו באפשרות ESTIMATEONLY כדי לקבל הערכות מדויקות: DBCC CHECKDB('YourDB') WITH ESTIMATEONLY

ש: האם ניתן לבטל פעולת CHECKDB פעילה?

A: כן, ניתן לבטל את CHECKDB באמצעות הפקודה KILL על מזהה הסשן. עם זאת, ביטול אינו מספק מידע על שלמות מסד הנתונים, ותצטרך להפעיל אותו שוב מאוחר יותר.

10.3 שאלות בנוגע לטיפול בשגיאות

ש: CHECKDB מצא שגיאות - האם עליי להיכנס לפאניקה?

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

ש: מתי עליי להשתמש ב-REPAIR_ALLOW_DATA_LOSS?

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

ש: מה המשמעות של "שגיאות עקביות במסד הנתונים" לעומת "שגיאות הקצאה"?

A: שגיאות הקצאה משפיעות על האופן שבו SQL Server עוקב אחר ניצול שטח הדיסק, בעוד ששגיאות עקביות מצביעות על בעיות במבני נתונים או אינדקס. שניהם דורשים תשומת לב, אך שגיאות עקביות בדרך כלל משפיעות על נגישות נתונים בצורה ישירה יותר.

10.4 שאלות גיבוי ושחזור

ש: האם עליי להריץ CHECKDB על הגיבויים שלי?

A: בהחלט! הפעל את CHECKDB לאחר שחזור גיבויים לשרתי בדיקה. פעולה זו מאמתת את שלמות הגיבוי ומבטיחה שתוכל להתאושש בפועל מפגיעה. אוטומציה של תהליך זה במידת האפשר.

ש: גם הגיבוי שלי פגום - מה עכשיו?

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

ש: האם שחזור עמוד יכול לתקן נזק ללא שחזור מלא של מסד הנתונים?

A: כן, אבל רק ב SQL Server מהדורת Enterprise עם מודל שחזור מלא וגיבויים עדכניים של יומני רישום. שחזור עמודים עובד עבור פגמי עמודים בודדים אך דורש ביצוע זהיר בהתאם להליכים מתאימים.

10.5 שאלות לפתרון בעיות

ש: CHECKDB נכשל עם שגיאות "חסר מקום" - מה אני יכול לעשות?

A: פנה מקום ב-tempdb, העבר את tempdb לאחסון מהיר יותר, או השתמש באפשרות TABLOCK כדי להפחית את השימוש ב-tempdb. שקול להפעיל CHECKDB עם NOINDEX או PHYSICAL_ONLY כדי להפחית את דרישות המשאבים.

ש: כיצד אוכל לזהות איזו טבלה פגומה מפלט CHECKDB?

A: חפש מספרי "זיהוי אובייקט" בהודעות שגיאה, ולאחר מכן השתמש ב: SELECT OBJECT_NAME(object_id) כדי למצוא שמות טבלאות. הודעות שגיאה כוללות גם מספרי עמודים ומשבצות לזיהוי מיקום מדויק.

ש: האם בעיות חומרה יכולות לגרום ל-CHECKDB לדווח על תוצאות חיוביות שגויות?

A: כן, חומרה כושלת (במיוחד אחסון) עלולה לגרום לשחיתות לסירוגין שמופיעה ונעלמת בין ריצות CHECKDB. אם השגיאות אינן עקביות, בדוק את תת-מערכת הקלט/פלט שלך והרץ בדיקות מרובות כדי לאשר דפוסים.

10.6 שאלות תצורה מתקדמות

ש: אילו דגלי מעקב יכולים לשפר את ביצועי CHECKDB?

A: דגל מעקב 2562 יכול לשפר את הביצועים על ידי הפעלת CHECKDB כקבוצה אחת. דגל מעקב 2549 מסייע כאשר קבצי מסד נתונים נמצאים בדיסקים נפרדים. יש להשתמש בהם בזהירות ולבדוק תחילה במצב שאינו מבוסס ייצור.

ש: כיצד ניתן להפוך את הניטור וההתראות של CHECKDB לאוטומטיות?

A: השתמש SQL Server התראות סוכן עבור מספרי שגיאה 8930, 8939 ואחרים. הטמע ניתוח יומנים כדי לחלץ תוצאות CHECKDB, וצור התראות עבור כל גילוי של נזק. שקול להשתמש במסגרות פתרונות תחזוקה כמו הסקריפטים של אולה האלנגרן.

ש: האם עליי להשתמש באפשרות EXTENDED_LOGICAL_CHECKS?

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

11. סיכום

11.1 סיכום נקודות מפתח

11.1.1 סיכום פקודות חיוניות של DBCC CHECKDB

לשלוט בתחביר הבסיסי של DBCC CHECKDB לבדיקת מסדי נתונים מקיפה, להשתמש באפשרויות NOINDEX ו-PHYSICAL_ONLY לאופטימיזציה של ביצועים, ולהבין CHECKTABLE עבור tarאימות טבלה geted. פקודות בסיסיות אלו מהוות את הבסיס לתחזוקה פרואקטיבית של מסד הנתונים, ומאפשרות גילוי מוקדם של נזקים וניטור שיטתי של שלמות.

11.1.2 תזכורת לשיטות עבודה מומלצות קריטיות

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

11.2 מתי להשתמש ב-DBCC CHECKDB לעומת פתרונות מתקדמים

השתמשו ב-DBCC CHECKDB לניטור שוטף שלמות ופתרון נזקים קלים, תוך שמירת כלי שחזור מקצועיים לתרחישי נזקים חמורים מעבר ליכולות התיקון המובנות. מסגרת ההחלטות צריכה לשקול את זמינות הגיבוי, קריטיות הנתונים, אילוצי זמן וחומרת הנזקים. מנהלי מסדי נתונים מצליחים משלבים ניטור שוטף של CHECKDB עם אסטרטגיות גיבוי מקיפות ומודעות לאפשרויות שחזור מתקדמות כאשר גישות סטנדרטיות מתגלות כלא מספקות.

12. הפניות

  1. מיקרוסופט למידה. "DBCC CHECKDB (Transact-SQL)." SQL Server תיעודתאגיד מיקרוסופט.
    https://learn.microsoft.com/en-us/sql/t-sql/database-console-commands/dbcc-checkdb-transact-sql?view=sql-server-ver17
  2. Microsoft Learn. "פתרון בעיות של שגיאות עקביות במסד נתונים שדווחו על ידי DBCC CHECKDB." SQL Server תיעודתאגיד מיקרוסופט.
    https://learn.microsoft.com/en-us/troubleshoot/sql/database-engine/database-file-operations/troubleshoot-dbcc-checkdb-errors
שתף עכשיו: