چرا قبل از بکاپ گیری از SQL باید دستور DBCC CheckDB بزنیم؟

اهمیت دستور DBCC CheckDB در بکاپ گیری از SQL چقدر است؟ در هر محیط پایگاه داده ای؛ گرفتن فایل پشتیبان بدون مشکل یکی از پر اهمیت ترین کارهایی است که یک مدیر پایگاه داده در انجام آن نباید کوتاهی کند. بر اساس تجربه بنده بیشتر مدیران پایگاه داده اقدام به گرفتن فایل پشتیبان بدون بررسی مشکلات ساختاری و منطقی پایگاه داده انجام می دهند که این امکان وجود دارد که داده های خراب در فایل پشتیبان ذخیره شود.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

چرا دستور DBCC CheckDB پر اهمیت است؟

این دستور تمامی هماهنگی فیزیکی و منطقی تمامی اشیاء داخل پایگاه داده را بررسی کرده و از سلامت آنها اطمینان حاصل می نماید. دستور DBCC CheckDB مراحل زیر را انجام می دهد:

  1. اجراء دستور DBCC CheckAlloc بر روی پایگاه داده
  2. اجراء دستور DBCC CheckTable بر روی تمامی جداول و «ویو ها» در پایگاه داده
  3. اجراء دستور DBCC CheckCatalog بر روی پایگاه داده
  4. اعتبار سنجی تمامی «ایندکس ویوها» بر روی پایگاه داده
  5. اعتبار سنجی بین ارتباط داده ها و متادیتا های سیستم ؛ اعتبار سنجی بین فایلها و پوشه ها زمانی که از نوع داده ای VarBinary(Max) و Filestream استفاده شده باشد.
  6. اعتبار سنجی داده های Service Broker در پایگاه داده

این به این معنی است که شما بعد از اجراء دستور DBCC CheckDB دیگر نیازی به اجراء دستورات DBCC CheckAlloc , DBCC CheckTable و DBCC CheckCatalog ندارید.

  • نکته: دستور DBCC CheckDB در پایگاه داده هایی که قابلیت In-Memory Optimized Table فعال باشد قابل اجراء است اما فقط جداول Disk-Base مورد بررسی قرار می گیرند به هر حال در عملیات پشتیبان گیری و بازیابی پایگاه داده اجراء عملیات CheckSum برروی جداول In-Memory اجراء می شود. دستور DBCC توانایی درست کردن خرابی احتمالی در جداول In-Memory را ندارد پس بر این اساس بهتر است که شما از این نوع پایگاه داده ها فایل پشتیبان گرفته و فایل پشتیبان را بررسی مجدد کنید تا از نبود داده خراب در آن اطمینان حاصل فرمايید.

در ذهن داشته باشید که دستور DBCC CheckDB با پارامتر Repair به صورت تراکنشی است و کاملا قابل برگشت به وضعیت اول بعد از اجراء دستور می باشد. مایکروسافت همیشه به تمامی کاربران این پیشنهاد را می دهد که این دستور را با یک تراکنش خارجی یا Explicit Transaction اجراء کنند که توانایی بازگرداندن به حالت قبل را داشته باشند. دستورات زیر زمان آخرین اجراء دستور DBCC CheckDB را بر روی هر یک از پایگاه های داده در SQL Server نمایش می دهد.

CREATE TABLE #result (DBName sysname,Last_DBCC DATETIME);
 
CREATE TABLE #temp (ParentObject sysname,OBJECT sysname,Field sysname,VALUE NVARCHAR(200));
 
EXEC sp_MSforeachdb ' USE [?];
Insert Into #temp
Exec (''dbcc dbinfo() With Tableresults;'');
 
Insert Into #result select db_name(),VALUE from #temp where Field = ''dbi_dbccLastKnownGood'';
 
Truncate Table #temp;
';
 
SELECT * FROM #result;
 
DROP TABLE #result;
DROP TABLE #temp;

حمید ج. فرد
حمید ج. فرد

متخصص پایگاه داده SQL Server Microsoft Certified Master: SQL Server 2008 Microsoft Certified Solutions Master: Charter - Data Platform Microsoft Certified Solutions Expert: Data Platform Microsoft Certified Solutions Associate: SQL Server 2012 Microsoft Certified IT Professional Microsoft Certified Technology Specialist Microsoft Certified Professional Developer Microsoft Certified Trainer CIW Database Design Specialist

نظرات