2017/03/12

شرح متقدم للنسخ الاحتياطية في قواعد بيانات ال SQL Server بالعربي

في هذا المقال سوف نتحدث عن انواع النسخ الاحتياطية المتاحة داخل ال Sql Server والية عملها .

في البداية قبل التعرف على انواع النسخ الاحتياطية المختلفة لابد من معرفة ما هي انواع ال Recovery Model لارتباطها باحد انواع النسخ الاحتياطية

انواع ال Recovery Model

قواعد بيانات ال SQL Server يتم تخزين بياناتها في نوعين ملفات اساسيين 
Data File And Log File
Primary Data File
هو الملف الذي تخزن فيه البيانات الفعلية ويكون بامتداد MDF او NDF
Transaction LOG File
وهذا الملف له عدة وظائف ولكن اشهرها انه ملف مرحلي يتم فيه تخزين البيانات مؤقتا الى ان تنتقل الى ملف ال Data File ويكون بامتداد LDF ولكن لماذا لا يتم الكتابة مباشرة في ملف ال Data File؟
تخيل معي انك تقوم باعداد برنامج للقيام بادخال فاتورة مبيعات وهذه الفاتورة بياناتها على جدولين في قاعدة البيانات مثلا
(الفاتورة و اصناف الفاتورة) تخيل انه تم نجاح الادخال في الجدول الاول ولم ينجح في الثاني , سينتج عن ذلك وجود فواتير بدون اصناف مثلا
ولحل هذه المشكلة تجد اهمية استخدام ال Transaction LOG File حيث يتم كتابة البيانات فيه, فاذا نجحت كل العمليات , يتم نقلها الى ال Data File اما اذا حدث خطأ في اي مرحلة , يتم الغاء العملية كأن لم تكن.

على حسب نوع ال Recovery Model يتم الاحتفاظ بالبيانات في ال  Transaction LOG File او لا والانواع المتاحة هي

Simple Recovery Model

في هذا النوع لا يتم الاحتفاظ باي بيانات في ال Transaction LOG File مما يؤدي الى ان حجم الملف يكون صغير جدا

Full Recovery Model

في هذا النوع يتم الاحتفاظ دائما باي بيان يتم كتابته داخل ال Transaction LOG File وهذا يؤدي الى تضخم حجم الملف الى ان يقوم مدير قواعد البيانات بتفريغه

Bulk Logged Recovery Model

وهذا النوع يتم الاحتفاظ فيه بكل البيانات التي يتم كتابتها في ال Transaction LOG File عدا العمليات الناتجة عن Bulk Operation يتم الاحتفاظ بالحد الادنى الممكن الاحتفاظ به داخل ال Log File وذلك لتقليل مساحته وهذه العمليات هي
1. SELECT INTO
2. BULK IMport operations including BULK INSERT and BCP
3. INSERT INTO SELECT command using the OPENROWSET(BULK) function
4. Partial updates to columns having large value data type
5. Using WRITE clause in UPDATE statements
6. Index operations e.g CREATE INDEX, ALTER INDEX REBUILD , DROP INDEX


انواع النسخ الاحتياطية

Full Backup

في هذا النوع من النسخ الاحتياطية يتم اخذ نسخة كاملة من قاعدة البيانات وهذا اهم نوع من انواع النسخ الاحتياطية لان اي نوع من الانواع التالية يعتمد على وجود نسخة Full Backup وهذا النوع يمكن اخذه مع اي Recovery Model
والمشكلة الوحيدة التي قد تواجه مديرين قواعد البيانات مع هذا النوع هو التأثير على اداء قاعدة البيانات اثناء اخذ النسخة الاحتياطية خصوصا لو قاعدة البيانات بحجم كبير.
ملاحظة هامة: يمكن اخذ الBackup لقاعدة البيانات ككل او ل File Group معينة ويمكنك مراجعة المقال التالي لتوضيح المقصود شرح SQL Server FileGroups بالعربي

Differential Backup

في هذا النوع يتم اخذ نسخة من كل البيانات الPages التي تمت من اخر نسخة Full Backup الى وقت اخذ النسخة ال Differential فقط ولذلك تكون مساحته صغيرة نوعا ما .
ولعمل Restore لل Differential Backup لابد من عمل Restore لملف ال Full Backup الذي يعتمد عليه حيث انه لا يحتوي على كل قاعدة البيانات انما يحتوي على التغيرات فقط بين اخر نسخة Full والنسخة ال Differential.
ويتخيل البعض انه عندما يأخذ نسخة Differential ثانية فانها تحتوي على التغيرات بين نسخة الDifferential الاولى و الثانية ولكن هذا خطأ حيث انها تحتوي على التغيرات بين اخر Full واخر Differential يتم اخذه ولذلك عند عمل Restore لا تحتاج الا اخر نسخة Differential ونسخة ال Full التي تعتمد عليها
ويمكن اخذ هذا النوع مع اي نوع من ال Recovery Model

Log Backup

هذا النوع من ال Backup يتم اخذ نسخة احتياطية من ال Transaction Log File ولذلك فهو يعتمد على ان تكون قاعدة البيانات ب Recovery Model من نوع Full او بحد ادنى Bulk Logged وهذه الانواع التي تحتفظ بالبيانات في ال Transaction Log.
فعند اخذ هذا ال Backup يتم تفريغ ملف ال Transaction Log مباشرة بعد اخذ ال Backup ولذلك عند اخذ Log Backup مرة اخرى تكون البيانات التي تمت من اخر Log Backup حتى ال Log Backup الحالي ولذلك في حالة الاحتياج الى عمل Restore لابد من ارجاع اخر ملف Full واخر ملف Differential وكل ملفات ال Log Backups التي تمت بعد ذلك.
وفي حالة قواعد البيانات ذات الحجم الكبير يعتبر هذا النوع من ال Backups ذو اهمية عالية حيث انه اقل تأثيرا على اداء قاعدة البيانات لما يحتويه على بيانات قليلة من اخر Log Backup تم اخذه قبل ذلك.
ومن مزايا هذا النوع انك ممكن تقوم بعمل Restore للبيانات حتى وقت معين بمعنى انك تريد عمل استرجاع مثلا للبيانات حتى الساعة الثانية ظهرا وليس للوقت الذي تم فيه الباكب.
ملاحظة: تفريغ ملف ال Transaction Log File بعد اخذ ال Log Backup ليس معناه تقليل حجم الملف انما يتم تفريغ الملف من البيانات ويتم ترك مكانها فارغ متاح للكتابة عليه مرة اخرى ولكن لتقليل حجم الملف لابد من عمل Shrink لل  Transaction Log File

التأكد من سلامة النسخة الاحتياطية

يوجد خطأ شائع يقوم به مديروا قوعد البيانات وهو انهم يقومون باخذ النسخة الاحتياطية دون التأكد من امكانية استرجاعها ففي بعض الاحيان قد يتلف ملف الباكب ويكون غير صالح للاسترجاع لذلك لابد من التأكد من سلامة الملف وبياناته 
يوجد خاصية لقاعدة البيانات لعمل فحص ملف الباكب وتسمى Restore Verify Only ولكن حتى هذه الخاصية لا تؤكد بنسبة مائة بالمائة بسلامة الملف وقابليته للاسترجاع لذلك الوسيلة الوحيدة للتأكد بنسبة مائة بالمائة هي عمل Restore.

طريقة اخذ النسخ الاحتياطية من ال Management Studio

كليك يمن على قاعدة البيانات ثم اختر Tasks ثم اختر Backup ثم انظر الشكل التالي



ولعمل استرجاع Restore لقاعدة البيانات يمكنك زيارة المقال من هنـــــا

--
تم بحمد الله

هناك 4 تعليقات:

Unknown يقول...

شكرا جزيلا لك ع هذا الموضوع قليل مانجد مثله باللغه العربيه وفقك الله ❤

Mohamed Galal يقول...

شكرا جدا لتعليق حضرتك والله التعليقات دي اللي بتحسسني بقيمة المواضيع اللي بكتبها
شكرا جدا

emad muse يقول...

كل الشكر باش مهندس

Unknown يقول...

احسنت اخي

مقدمة عن الDevOps

في هذا المقال سوف اتحدث عن مقدمة بسيطة عن ال DevOps ولماذا لابد ان تهتم فرق تطوير البرمجيات به وما هي النتائج المترتبة عن استخدام اساليبه ...