פקודת DBCC CHECKDB לבדיקת תקינות מסד הנתונים - ilDBA Portal

פקודת DBCC CHECKDB לבדיקת תקינות מסד הנתונים

14/06/2011 | פורסם על ידי

מבוא:

פקודת DBCC CHECKDB   הינה אחת הפקודות החשובות והוותיקות ביותר של מסד הנתונים SQL SERVER.
הפקודה, בהפעלתה השלמה כדו"ח, בודקת את השלמות הלוגית והפיסית של הדפים במסד הנתונים, את הקצאות המקום לדפים, לשורות, את טבלאות המערכת וכן בודקת את אכיפת קשרי הגומלין (FOREIGN KEYS).

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

הפקודה הנ"ל מריצה למעשה 6 מהלכים פנימיים :

DBCC CHECKALLOC – בדיקת הקצאות המקום בכל בסיס הנתונים
DBCC CHECKTABLE – בדיקת פיזית של כל טבלא וטבלא
DBCC CHECKCATALOG – בדיקת כל המתאר (הקטלוג) של בסיס הנתונים

כמו כן מבוצעות בדיקה של רכיבי ה-service broker, בדיקת שלמות הדפים המידע מכל סוג שהוא ובדיקת שלמות האינדקסים

סינטקס הפקודה הכללי הינו:

DBCC CHECKDB
[
    [ ( database_name | database_id | 0
        [ , NOINDEX
        | , { REPAIR_ALLOW_DATA_LOSS | REPAIR_FAST | REPAIR_REBUILD } ]
        ) ]
    [ WITH
        {
            [ ALL_ERRORMSGS ]
            [ , EXTENDED_LOGICAL_CHECKS ]
            [ , NO_INFOMSGS ]
            [ , TABLOCK ]
            [ , ESTIMATEONLY ]
            [ , { PHYSICAL_ONLY | DATA_PURITY } ]
        }
    ]
]

באופן הטיפוסי ביותר הפקודה מורצת כך:

DBCC CHECKDB (database name)

בצורה זו מבוצעות כלל הבדיקות שתוארו לעיל בפקודה.
כל טעות ו/או בעיה מדווחות בפלט הפקודה.
דוגמאות לבעיות אפשריות יכולות להיות – נתונים מושחתים (עקב בעיות בחומרת הדיסקים), דפים (pages) שניזוקו, בעיות במנוע של MSSQL  וכד'.

דוגמא להרצת הפקודה :

הרצת הפקודה על בסיס נתונים Northwind  לדוגמא תהיה כך:

DBCC results for 'Northwind'.
Service Broker Msg 9675, State 1: Message Types analyzed: 14.
Service Broker Msg 9676, State 1: Service Contracts analyzed: 6.
Service Broker Msg 9667, State 1: Services analyzed: 3.
Service Broker Msg 9668, State 1: Service Queues analyzed: 3.
Service Broker Msg 9669, State 1: Conversation Endpoints analyzed: 0.
Service Broker Msg 9674, State 1: Conversation Groups analyzed: 0.
Service Broker Msg 9670, State 1: Remote Service Bindings analyzed: 0.
Service Broker Msg 9605, State 1: Conversation Priorities analyzed: 0.
DBCC results for 'sys.sysrscols'.
There are 785 rows in 9 pages for object "sys.sysrscols".
DBCC results for 'sys.sysrowsets'.
There are 136 rows in 2 pages for object "sys.sysrowsets".
DBCC results for 'sys.sysallocunits'.
There are 152 rows in 3 pages for object "sys.sysallocunits".
DBCC results for 'sys.sysfiles1'.
.
.
DBCC results for 'Employees'.
There are 9 rows in 1 pages for object "Employees".
CHECKDB found 0 allocation errors and 0 consistency errors in database 'Northwind'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

הפלט המלא של פקודה זו נמצא בקובץ הבא: Basic_DBCC_output.

כפי שניתן לראות בפלט הפקודה, כל הטבלאות ה-DB הנבק נסרקות, כולל טבלאות המערכת.
בנוסף, נרשמות סטטיסטיקות לגבי כמויות השורות ובסופו של הדוח יש דיווח על כמות טעויות בהקצאת המקום ובשלמות הנתונים.
במידה ומתקבלות 0 טעויות על שני פרמטרים אלו, הדו"ח יצא תקין (המצב הרצוי).

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

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

אופציות חשובות נוספות בפקודה:

  • לפקודה יש אפשרות לרוץ יותר מהר ולחסוך את הבדיקות הלוגיות ע"י תוספת של אופציית PHYSICAL_ONLY לפקודה, לדוגמא:

DBCC CHECKDB (database name) With PHYSICAL_ONLY

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

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

DBCC CHECKDB (database name) With DATA_PURITY

—–

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

  • אופציית REPAIR_REBUILD מבטיחה שלא נאבד מידע.
    יש לציין שכל תיקון מעין זה במסד הנתונים יש לבצע אך ורק ב-mode של משתמש בודד (SINGLE USER)
USE master
GO
ALTER DATABASE Northwind set single_user
go
DBCC CHECKDB (northwind,REPAIR_REBUILD)
go
ALTER DATABASE Northwind set multi_user
go

אם אין ברירה, וגם השימוש באופציית REPAIR_REBUILD אינו מצליחה, ניתן להשתמש להשתמש באופציה נוספת –

  • האופציה REPAIR_ALLOW_DATA_LOSS מבצעת תיקונים על מסד הנתונים, צריך לקחת בחשבון, שיכול להיות שנאבד מידע בעת שימוש בה.
USE master
GO
ALTER DATABASE Northwind set single_user
GO
DBCC CHECKDB (northwind, REPAIR_ALLOW_DATA_LOSS)
GO
ALTER DATABASE Northwind set multi_user
GO>

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

USE master
GO
DBCC CHECKDB (northwind) with NO_INFOMSGS
GO

במידה והכול תקין יוחזר הפלט Command(s) completed successfully ותו לא.

לסיכום,

ניתן לומר כי DBCC CHECKDB , הינה פקודת תחזוקה חשובה ביותר והכרחית בכל תוכנית לתחזוקה מתמשכת של מסד הנתונים שלנו.

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

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

לפרטים נוספים על הפקודה ניתן לגשת ללינק:
http://msdn.microsoft.com/en-us/library/ms176064(v=SQL.100).aspx

נתראה ברשומה הבאה,

אלי לייבה, DBA אפליקטיבי בכיר ומפתח אפליקציות בחברת החשמל,
בעל 19 שנות ותק בתחום מסדי נתונים ותכנות.
ניתן לפנות לאלי במייל: iecdba@hotmail.com

2 תגובות ל- “פקודת DBCC CHECKDB לבדיקת תקינות מסד הנתונים”

commenter

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

commenter

אני בד"כ עושה תוכנית תחזוקה לבדיקה של
DBCC CHECKDB
פעם בשבוע בסופ שבוע
למערכות שלא מתעדכנו כמעט אני עושה אפילו פעם בשבועיים/חודש

השאר תגובה:

שם (חובה):
אימייל (לא יפורסם) (חובה):
תגובה (חובה):

*



מאמרים קשורים

שחזור טבלה באמצעות RMAN

בפוסט זה אציג פיצ'ר שאורקל הוסיפו בגרסת  12c (12.1.0.1 ליתר דיוק) – שחזור טבלה\טבלאות לנקודת זמן מסוימת באמצעות RMAN. הפיצ'ר יכול להיות שימושי במקרים הבאים: נמחק או השתנה המידע בטבלה ולא ניתן להשתמש [...]
PL/SQL

PL/SQL Injection – The Beginning

עודד רז פותח בסדרת מאמרים על Pl/sql [...]

תיעוד בסיס הנתונים – למה זה טוב?

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

צבעים דינמיים ב-SSRS

כאשר לקוח שלי ולא משנה אם הוא מבוסס אורקל או SQL Server חושב על פתרון Reporting אני ישר מציע לו את ה- Sql Server Reporting Services. שתי סיבות עיקריות להצעה שלי: רישוי ויכולות. איתי בנימין מסביר על צבעים דינמים [...]
Copyright 2019 ilDBA Portal. Brought to you by Brillix - Israel Leading DBA company. Sponsored by: DBSnaps - Database Video Tutorialss
Website Security Test
%d בלוגרים אהבו את זה: