در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

بازیابی داده های سالم از پایگاه داده خراب

احتمال خرابی داده یک جزء جدانشدنی از دنیای پایگاه داده است. اصولا مشکلات خرابی داده از سیستم دیسک سخت است به این صورت که در حین نوشتن داده ها بر روی دیسک سخت به هر دلیلی یکسری اختلالاتی ایجاد شده که نوشتن داده را به صورت کامل به اتمام نمی رساند یا داده به طور صحیح نوشته نمیشود.معمولا مدیران پایگاه داده به صورت روزانه یا هفتگی از پایگاه داده فایل پشتیبان تهیه می کنند تا در مواقعی این چنینی بتوانند داده های خراب را از فایل پشتیبان بازیابی کنند. ولی متاسفانه به دلیل مسائلی، فایل های پشتیبان یا غیر قابل دسترس هستند یا آنها نیز به صورت خراب در آمده و یا داده های خراب را پشتیبانی و ذخیره کرده اند. در چنین شرایطی که نه فایل پشتیبان درست و کامل در دسترس است و نه می توان خیلی از داده ها را از دست داد چه باید کرد؟ در این مقاله، یک مختصر اشاره ای به بازیابی داده های خراب بدون فایل پشتیبان می کنم.

داستان


یک شرکت پرداخت آنلاین وجود دارد که پایگاه داده ای برای ذخیره سازی اطلاعات پرداختی از طرف مشتریان است. این پایگاه داده بسیار حجیم بوده و در هیچ شرایطی به غیر از شرایط معین شده نباید از دسترس خارج شود. تلفن های اتاق مدیران پایگاه داده به صدا در می آید! چرا نرم افزار ما نمی تواند داده ها را بخواند و گزارش را تولید کند!!!!! بعد از کلی بگومگو و دعوا سر این که مشکل از نرم افزار است، یکی از مدیران فایل لاگ را خوانده و در آن به این پیغام برخورد می کند که نوشته:

SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0x298c0e0a; actual: 0x86e3f354). 
It occurred during a read of page (1:348) in database ID 12 at offset 0x000000002b8000 in file…. 

بله، درست خواندید! این یک پیغام خطا برای خواند یکسری داده است که به دلایلی خراب شده است. در این شرایطی که گفته شد، نمی توان پایگاه داده را از فایل پشتیبان بازیابی کرد به دلیل آنکه:

  1. زمانی برای این کار نیست
  2. و البته اینکه خود فایل پشتیبان به طور کلی خراب است.

در این شرایط اصولا مدیران پایگاه داده وسایل خود را جمع کرده و نامه استعفای خود را روی میز مدیر خود می گذارند. ولی شما باید چه کار کنید! در این شرایط خونسردی خود را حفظ کرده، و به دنبال چاره باشید. برای بازیابی داده های خراب باری خطای 824 بسیار راه وجود دارد از قبیل:

  1. استفاده از DBCC CHECKDB با پارامتر REPAIR__REBUILD و یا REPAIR__ALLOW__DATA_LOSS که البته از دست دادن داده یک مشکل دیگر است.
  2. استفاده از فایل پشتیبان برای بازیابی Data Page های خراب.

ولی برای انجام اینها، پایگاه داده باید از دسترس خارج شود. ولی همانطور که گفته شد این پایگاه داده نباید از دسترس سیستمهای پرداخت خارج شود.لطفا پایگاه داده را از اینجا دانلود کنید (SQL Server 2014 Express) به مثال زیر توجه کنید :

Select * from dbo.TempRows;

/*Msg 824, Level 24, State 2, Line 16
SQL Server detected a logical consistency-based I/O error: incorrect checksum (expected: 0x298c0e0a; actual: 0x86e3f354). 
It occurred during a read of page (1:348) in database ID 12 at offset 0x000000002b8000 in file 
'C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\TempData.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.
*/

همانطور که می بینید، داده خراب در Data Page 348 است. حالا با دستورات پائین به داخل 348 رفته و داده ی خراب را به صورت دستی پیدا می کنیم

DBCC TRACEON(3604);
DBCC PAGE ('TempData',1,348,2);
/*011FC744:   00000046 61726420 536f6c75 74696f6e 73205364  ...Fard Solutions Sd
011FC758:   6e204268 64202020 20202020 20020000 10002a00  n Bhd        .....*.
011FC76C:   38170000 00000000 46617264 20536f6c 7574696f  8.......Fard Solutio
011FC780:   6e732053 646e2042 68642020 20202020 20ffffff  ns Sdn Bhd       ÿÿÿ
011FC794:   ffffffff ffffffff ff000000 00466172 6420536f  ÿÿÿÿÿÿÿÿÿ....Fard So
011FC7A8:   6c757469 6f6e7320 53646e20 42686420 20202020  lutions Sdn Bhd     
011FC7BC:   20202002 00001000 2a003a17 00000000 00004661     .....*.:.......Fa
011FC7D0:   72642053 6f6c7574 696f6e73 2053646e 20426864  rd Solutions Sdn Bhd
011FC7E4:   20202020 20202020 02000010 002a003b 17000000          .....*.;....*/

همانطور که مشاهده می کنید در ردیف 011FC794 و 011FC780 یک سری F مشاهده می کنید. این قسمت از داده خراب است و باید از داده های سالم جدا شود. توجه داشته باشید که دستور DBCC CHECKDB با دستور REPAIR__ALLOW__DATA__LOSS تمام Data Page را حذف کرده و حدود 160 رکورد سالم دیگر هم حذف می شود.در مرحله بعد توسط دستور زیر نوع Page Verify را به NONE در می آوریم تا بتوانیم داده های سالم را از داده های خراب جدا کنیم.

Alter Database TempData Set Page_Verify None With No_Wait

با این دستور شما در حقیقت Data Page خراب را سالم کردید، یعنی شما می توانید تمامی رکورد ها را بدون خطا از پایگاه داده بازیابی کنید.با استفاده از دستور زیر شما می توانید تمامی رکوردها در Data Page خراب را بازیابی کرده و داده های خراب را شناسایی کنید.

Select sys.fn_physlocformatter(%%physloc%%) As [Location],* from dbo.TempRows
Where sys.fn_physlocformatter(%%physloc%%) Like '(1:348:%'

همانطور که مشاهده می کنید، در تصویر زیر دو رکورد به صورت NULL مشاهده می شود که این دو در حقیقت همان داده های خراب هستند که باید از بین بروند.

بازیابی داده های سالم از پایگاه داده خراب

حالا زمان آن رسیده که نوع Page Verify را به حالت CheckSum برگردانیم.

نویسنده : حمید ج. فرد متخصص پایگاه داده SQL Server

منبع : جزیره بانک های اطلاعاتی وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است

#بازیابی_داده_های_سالم #تعمیر_کردن_داده_های_sql_سرور #بازیابی_داده_ها_در_پایگاه_داده_sql_سرور #بازیابی_داده_در_sql_سرور #بازیابی_داده_ها_در_sql_سرور #recovery_داده_ها_در_sql_سرور #بازیابی_داده_های_سالم_در_sql_سرور #فرآیند_recovery_داده_ها_در_sql_سرور
عنوان
1 آیا NonClustered Columnstore Index گزینه مناسبی است؟ رایگان
2 مقایسه فنی Stream Aggregate و Hash Match رایگان
3 بهینه سازی بازدهی پایگاه داده SQL Server با Hypothetical Index رایگان
4 بازیابی داده های سالم از پایگاه داده خراب رایگان
5 تغییر در Optimizer Engine برای غیر فعال کردن مرتب سازی JOIN ها رایگان
6 اهمیت اجراء دستور DBCC CheckDB قبل از گرفتن فایل پشتیبان رایگان
7 اهمیت استراتژی پشتیبانگیری و بازیابی پایگاه داده در SQL Server رایگان
8 محدودیتهای بازدهی و راه حل آنها در SQL Server رایگان
9 مستلزمات برای طراحی Index در SQL Server رایگان
زمان و قیمت کل 0″ 0
6 نظر
محمد طارمی

سلام حمید جان

مقاله ی خوبی بود.

سئوال اول من اینه که چرا هنوز درSQl2014- TornPageDetection وجود داره؟

چون این موردی که شما فرمودید(CheckSum) از ورژن 2005 به بعد اضافه شد و نسب به TornPageDetection بهتر عمل می کرد.

و دوم اینکه زمانی که همان دستور DBCC Page رو با پارامتر 3 اجرا کنیم نتیجه متفاوت خواهد بود و پارامترهای بیشتری نمایش داده خواهد شد.

من طبق تستی که انجام داده بودم زمانی که Page Verify روی حالت NONEباشه و بیایم اون رو به CheckSum تغییر بدیم اتفاقی خواستی در قسمت mtornBits = 0 رخ نمی دهد.

ولی اگر یک رکورد را بروزرسانی می کردم این عدد تغییر پیدا می کرد ولی باید حتما دستور CheckPoint رو بزنم.

و سئوال دوم این است که این فرآیند بصورت Async انجام میشه؟

حمید ج. فرد

Torn page ﻗﺎﺑﻠﻴﺘﻲ اﺳﺖ ﻛﻪ ﻭﺟﻮﺩﺵ ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﺑﺮاﻱ ﺳﻴﺴﺘﻤﻬﺎﻱ ﻗﺪﻳﻤﻲ ﻧﻴﺎﺯ اﺳﺖ و اﻟﺒﺘﻪ اﻳﻨﻜﻪ ﭘﺎﻳﮕﺎﻩ ﺩاﺩﻫﺎﻱ ﺳﻴﺴﺘﻤﻲ اﺯ اﻳﻦ اﺳﺘﻔﺎﺩﻩ ﻣﻴﻜﻨﻨﺪ

ﺑﻌﺪ اﺯ ﺗﻐﻴﻴﺮ checksum ﺑﺎﻳﺪ data page ﻳﻚ ﺑﺎﺭ اﺯ ﺩﻳﺴﻚ ﺧﻮاﻧﺪﻩ و ﺩﻭﺑﺎﺭﻩ ﻧﻮﺷﺘﻪ ﺷﻮﺩ ﺑﻪ ﻫﻤﻴﻦ ﺩﻟﻴﻞ اﺳﺖ ﻛﻪ ﺷﻤﺎ ﺑﻌﺪ اﺯ ﺗﻐﻴﻴﺮ ﻫﻨﻮﺯ ﺷﺎﻫﺪ mtornbit=0 ﻫﺴﺘﻴﺪ

ﺧﻴﺮ اﻳﻦ ﻓﺮاﻳﻨﺪ ﺩﺭ ﭘﺮﻭﺳﻪ checkpoint و lazywriter ﺑﻪ ﺻﻮﺭﺕ synch اﻧﺠﺎﻡ ﻣﻴﺸﻮﺩ ﺗﻮﺿﻴﺤﺶ ﻳﻚ ﻣﻘﺪاﺭ ﺳﺨﺖ اﺳﺖ ﺑﻪ ﺻﻮﺭﺕ ﻧﻮﺷﺘﺎﺭﻱ.

حسن ضرابی

با سلام و خسته نباشید خدمت آقای مهندس بابت این مقاله عالیشون

من می خواهم لینک فایل بکاپ دیتابیس را که در توضیحات بالا گذاشتید ریستور کنم اما اصلا ریستور نمی شود که تست خودم را انجام دهم

ممنون می شوم راهنمایی کنید با این که فایل data page خراب دارد

با تشکر از شما

حسن ضرابی

با سلام و خسته نباشید

من تونستم ریستور کنم

حسن ضرابی

با سلام و خسته نباشید خدمت آقای مهندس HamidJFard

از بابت مقاله عالیتون و بدون نقص شما سپاسگزارم خیلی عالی بود آقای مهندس عزیز

ممنونم از شما دوست عزیز

حسن ضرابی

با سلام و خسته نباشید خدمت استاد عزیزم

جناب استاد منظور شما از این که Page Verify را به CheckSum تبدیل کنیم آیا با کد زیر این کار مشکلی ایجاد نمی کند و منظور شما کد زیر هست مهندس جان.

ALTER DATABASE [AdventureWorks] SET PAGE_VERIFY CHECKSUM  WITH NO_WAIT

با تشکر از شما

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....