نحوه کار با DBCC

درس “مانیتورینگ SQL Server با استفاده از DBCC” که بخشی از دوره جامع آموزشی SQL Server در وبسایت طهاکو است، به بررسی ابزار تخصصی Database Console Commands (DBCC) برای مانیتورینگ و تضمین سلامت پایگاه داده میپردازد. این درس چهار دسته اصلی دستورات DBCC شامل نگهداری، متفرقه، اطلاعاتی و اعتبارسنجی را پوشش میدهد و تمرکز ویژهای بر دستورات اعتبارسنجی مانند DBCC CHECKDB، CHECKTABLE و CHECKALLOC دارد که برای شناسایی و رفع اشکالات منطقی و فیزیکی پایگاه داده در SQL Server Management Studio (SSMS) استفاده میشوند. هدف این آموزش، توانمندسازی مهندسان و متخصصان پایگاه داده است تا با اجرای این دستورات، یکپارچگی و عملکرد پایگاه داده را بهینهسازی کنند.
اکنون ما میخوایم راجب ابزار دیگه ای برای مانیتورینگ و نظارت در sql server2016 صحبت کنیم. و اون بررسی کننده سازگاری پایگاه داده با لاتین database consistency checker و صورت مختصراون هم D-B-C-C هست. Dbcc به ما اجازه میده تا یکپارچگی object یا موضوع های مختلف داخل پایگاه داده مون رو بررسی کنیم. من میخوام query جدیدی رو باز کنم و در اون dbcc و بعد یک اسپیس بذارم و در ادامه می نویسم، CHECKTABLEو بعد از اون پرانتز و تک کوتیشن را رو تایپ میکنم. من باید نام جدول رو در پرانتز بذارم. بنابراین به صورت dbcc checktable (‘HumanResources.Employee’ )’ رو خواهیم داشت.
با ران کردن این دستور یک بررسی سازگاری روی این جدول انجام میشه. با این دستور ما میخایم مطمئن بشیم که همه داده ها در تموم ستون ها با نوعه داده های درست هستن و همچنین با این دستور ما میخایم مطمئن بشیم که آیا همه رکورد ها، رکوردهایی کامل شده هستن، و اینکه آیا اونها کامل ثبت و ذخیره شدن. همچنین با این دستور ما میخایم مطمئن بشیم که در هر ارتباطی از یک جدول به جدول دیگه، ایا در حقیقت مرحله ای برای رکورد و ضبط این ارتباط موجود هست یا نه؟ و نهایتا با این دستور ما میخایم مطمئن بشیم که داده های بزرگ در dynamic management viewsصحیح هستن. بنابراین من این رو اجرا میکنم و زمانی که ما این رو تنها برای یک جدول اجرا میکنیم، معمولا با سرعت نسبتا زیادی اجرا میشه.
و نتایجی رو که به ما میده این هست که there are 290 rows in 7 pages و این یعنی 290 سطر در7 صفحه وجود داره. همچنین پیام هایی می بینیم که میگن اجرای dbcc به صورت کامل انجام شد و این پیام رو هم می بینید که If DBCC printed error messages, contact your systems administrator و این بمعنی این هست که اگه dbcc پیغام خطا رو چاپ کرد، باsystems administrator تون ارتباط برقرار کنین. بنابراین dbcc به ندرت به صورت صریح میگه که همه چیز اوکی هست. اون فقط میگه که اگه هیچ ارری ندیدین، میتونین حدس بزنین که همه چیز اوکی هست. بنابراین، این نتایجی که ما در اینجا به اون رسیدیم، اساسا با موفقیت بودن. پس اگه dbcc بعضی یا همه داده ها رو به صورت خوب، پیدا کرد. این بمعنی این هست که هیچ اروری پیدا نکرده و همه چیز آروم.
غیر از گزینه بررسی جداول، گزینه های متفاوت برای بررسی view ها، بررسی index ها و بررسی تعداد زیادی از چیزهای مختلف از طریق dbcc وجود داره. اما به جای بررسی همه چیز به صورت جداگونه، میتونیم همه چیز رو در یک پایگاه داده با دستور dbcc checkdb هم بررسی کنیم و اگه اون رو اجرا کنیم، اون هر جدول، هر index، رو در پایگاه داده مثلا AdventureWorks بررسی میکنه. در واقع برخی چیزها رو در پایگاه داده به صورت کلی بررسی میکنه.
در یک پایگاه داده بزرگ، این میتونه چند دقیقه طول بکشه، ممکن هست نیم ساعت برای اجرا زمان ببره. AdventureWorks پایگاه داده بزرگی نیست بنابراین اجرای dbcc در اون شاید به نسبت یک پایگاه داده بزرگ سریع باشه. در پایان هم اون اطلاعات دقیق زیادی رو پیرامون اونچه که دقیقا بررسی میکنه، و اونچه که دقیقا پیدا میکنه رو درست در همین پانل message بهمون، میده. دوباره اینو یادآور میشم که بندرت به موقعیتی که میگه: هر چیزی که در این جستجو پیدا شد، خوب، میره. فقط عدم وجود خطا در یک جستجوی dbcc می تونه نهایتا یک نتیجه خوب برای ما بیاره. بنابراین ما به سمت پایین میریم و بعد از اسکرول همه این پیام ها میبینیم که ارور خاصی نداره و عددی که کنار اررهای مختلف بنمایش درومده، همه عدد صفر هستن.
و اون با پیام DBCC execution completed میگه که dbcc به صورت کامل اجرا شده. اگه اون پیام ارری داشته باشه، بهتر که با مدیر سیستم تماس بگیرید. معمولا زمانی که این ارورها داده میشن، اونها تا حدی مبهم هستن. اما بهرحال ممکنه تعداد زیادی از اون ارر های خاص داده بشه. که این هم بگم اگه میخاستین خودتون مشکل رو حل کنید، شما میتونین در داکیومنت مایکروسافت برای کسب اطلاعات بیشتر در رابطه با اون اررهای خاص جستجو کنین. اس کیو ال یک محصول بسیار محبوبی هست، بنابراین اگه شما به یک پیغام خطای خاصی برسین، خیلی بعید هست که شما اولین کسی در جهان باشین که به این پیغام خطا رسیدین. بنابراین سریعا از طریق یک موتور جستجو اطلاعات زیادی در رابطه باعملکرد احتمالی افراد دیگه ای که مشکل مشابه به شما رو داشتن و برخی از ایده هایی که برای رفع این مشکلات انجام دادن، جستجو کنین.
اگه شما با DBCC CHECKDB به مشکل بر بخورید، بهترین راه برای رفع اون، معمولا بازیابی از backupهست. مشکلاتی که dbcc پیدا میکنه، مشکلات خیلی جدی هستن. در بسیاری اوقات مشکلات منجر به از دست دادن داده ها میشه. بنابراین اگه یک backup جدید داشته باشین، بهترین فرصتی هست که فقط backup اخیرمون رو بازیابی کنیم، تا بتونیم بهترین شانس برای رفع تمام اررهای داده شده از طریق dbcc رو بدست بیاریم. و اگه شما بک اپ جدید نداشته باشین، خب پس، شما درجستجوهای انلاین تون، برای پیدا کردن اطلاعات بیشتر درباره این مشکل احتمالی، بدون شک یک تجربه دردناک و مرحله عیب یابی دشواری رو در پیش خواهید داشت.
من توصیه میکنم که DBCC CHECKDB رو اغلب اجرا کنین. اگه شما یک مشکل با دیتا بیستون داشته باشین، هر چه زودتر درمورد اون مشکل بدونین، بهتر هست. شما میتونین اسیب های بیرونی رو پیش از وقوع با این نتایج به حداقل برسونین. اگه شما بتونین یک مشکل رو که تنها روی یک جدول تاثیر گذاشته پیدا کنین، خیلی بهتر از پیدا کردن اون مشکل با گذشت چند هفته هست که روی چندین جدول تاثیر گذاشته. بنابراین من توصیه میکنم که اون رو اجرا کنین. 99% شما هیچ مشکلی نمی بینین. دوباره اگه مشکلی رو پیدا کردین، اون مشکل ها معمولا خیلی جدی هستن و امیدتون به اخرین بک آپی باشه که داشتین.