استرداد بيانات SQL المحذوفة عن طريق سجل الإجراءات

في مقالة استعادة البيانات المحذوفة عن طريق النسخة الإحتياطية أو من الملف الفعّال لقاعدة البيانات، أظهرنا سيناريوهين لاستعادة البيانات، الأول من خلال النسخة الإحتياطية الكاملة لقاعدة البيانات ، والثانية عن طريق ملف البيانات الفعّال في قاعدة البيانات– ملف MDF. إلى جانب ذلك ، هناك مصدر آخر يمكن استخدامه لاستعادة البيانات ، وهو سجل الإجراءات.

كل تغيير على المخطط أو البيانات في قاعدة بيانات SQL Server يضاف إلى سجل الإجراءات الحالي على شكل سجل إجراء. فإذا كان إجراء الحذف الذي تريد التراجع عنه موجود في سجل الإجراءات الحالي ، في سجل إجراءات منفصل أو نسخة احتياطية من سجل الإجراءات، يمكنك قراءة هذا الإجراء والتراجع عن عملية الحذف.

إذا كان نمط الإسترداد لقاعدة البيانات لديك:

  • نمط استرداد تام : يبقى إجراء الحذف موجوداً في سجل الإجراءات الحالي أو في النسخة الإحتياطية من سجل الإجراءات الذي تم إنشاؤه بعد حذف السجلات.
  • نمط استرداد تسجيل العمليات على حجوم كبيرة من البيانات: يتم تسجيل إجراءات الحذف بشكل كامل في سجل الإجراءات الحالي باستثناء حذف البيانات الثنائية كبيرة الحجم BLOB. بما أن عملية حذف البيانات الثنائية الكبيرة لا يسجّل في سجل الإجراءات الفعّال ، وعملية إدخال هذه البيانات لا يتم تسجيله لانه نمط استرداد تسجيل العمليات على حجوم كبيرة من البيانات، لذا لا يمكنك استرداد البيانات في هذه الحالة. أما في الأنواع الأخرى من البيانات ، فإن البيانات المحذوفة مسجلة في سجل الإجراءات الفعّال أو النسخة الإحتياطية لسجل الإجراءات التي تم إنشاؤها بعد الحذف.
  • نمط استرداد بسيط: اذا كان هناك العديد من الإجراءات التي نفّذت على قاعدة البيانات بعد عملية حذف السجلات ، فإن إجراء الحذف لن يكون موجوداً في سجل الإجراءات الفعّال. في هذه الحالة، كلما اسرعت في تشغيل برنامج قراءة سجل الإجراءات في SQL Server ، كانت الفرصة أفضل لعملية استرداد ناجحة للبيانات.

استخدام برنامج ApexSQL Log

لقراءة سجل الإجراءات الفعّال لقاعدة البيانات ، ملف سجل الإجراءات المنفصل أو النسخة الإحتياطية لسجل الإجراءات سواء العادي منها أو المضغوط ، استخدم برنامج ApexSQL Log. حيث يستخدم لقراءة سجل الإجراءات في SQL Server ويستطيع أن يدقق ، يعيد ويتراجع عن التغيرات التي حدثت على البيانات ، ومن ضمنها التغيرات التي حدثت قبل تنزيل برنامج ApexSQL Log على الخادم. ويقوم أيضاً بجمع المعلومات عن المستخدم ، البرنامج والجهاز المستخدم في كل إجراء.

  1. ابدأ برنامج ApexSQL Log.
  2. اشبك على قاعدة البيانات التي تم حذف البيانات منها:

    Connecting to the database in ApexSQL Log

  3. إذا تم أخذ أي نسخة احتياطية لسجل الإجراءات بعد حذف البيانات ، قم بإضافة كل النسخ الإحتياطية في الخطوة التالية. لاحظ أن النسخ الإحتياطية لسجل الإجراءات يجب أن تشكل سلسلة متكاملة اذا كانت السجلات التي تريد أن تسترجعها هي بيانات ثنائيى كبيرة الحجم (أنظر أدناه للحصول على مزيد من التفاصيل حول هذا).
  4. في حالة فصل سجل الإجراءات الذي يحتوي على السجلات المحذوفة (على سبيل المثال ، اذا قمت بجعل قاعدة البيانات غير متصلة ونسخت ملف LDF فورا بعد حذف البيانات) ، عندها يمكنك استخدام البرنامج أيضاً.

    Select log data source file

  5. استخدم قسم النطاق الزمني في خطوة خيارات إعداد التصفية من أجل تضييق نطاق الإجراءات إلى التي حدثت بوقت الحذف فقط.

    Filtering transactions by time range

  6. استخدم تصفية العمليات لتضييق نطاق النتائج بالسجلات التي تم حذفها فقط. لعمل ذلك ، أزل اختيار كل عمليات تعديل المخططات DDL، بالإضافة إلى إزالة اختيار عمليات إدخال وتعديل البيانات من القائمة.

    Choosing deleted SQL records only

  7. حدد الجدول الذي تم حذف البيانات منه اذا أمكن. وإلا فأبقي كل جداول المستخدم مختارة.

    Specifying the records from which the records have been deleted

  8. انقر على Open.
  9. تُعرض كل إجراءات الحذف في شبكة النتائج الرئيسية. كل ما عليك فعله هو اختيار كل النتائج أو فقط اختيار النتائج التي تهتم بها ، ومن ثم أنقر على Create Undo Script من القائمة لإنشاء برنامج نصي للتراجع عن عملية الحذف لهذه السجلات.

    Create Undo Script in ApexSQL Log

  10. لإنشاء برنامج نصي للتراجع عن عملية الحذف لكل السجلات الظاهرة في الشبكة، انقر على Create undo script من القائمة. لإنشاء برنامج نصي للتراجع عن عملية الحذف فقط لبعض السجلات ، اختر هذه السجلات من شبكة النتائج ، ومن خلال سياق النتائج في الشبكة ، اختر Create undo script.

    والآن سيتم إنشاء البرنامج النصي الذي سيقوم بإدخال البيانات التي تم حذفها :

    Generated Undo Script

  11. لتنفيذ البرنامج ، انقر على زر التنفيذ Run button من القائمة.

استخدام برنامج ApexSQL Log لإنشاء برنامج نصي للتراجع بشكل فوري

مكن أن تكون الطريقة السابقة مقبولة فقط اذا كان عدد السجلات في شبكة النتائج صغيراً. أما اذا كان عدد السجلات المحذوفة بالملايين، فينصح بإنشاء البرنامج النصي للتراجع بشكل فوري ، بدلا من إظهار النتائج في شبكة النتائج أولا. لعمل ذلك ، تتبع الخطوات السابقة من 1 إلى 7 كما هي:

  1. بدلاً من فتح النتائج في شبكة النتائج ، انقر على Export results to a file لحفظ النتائج في ملف.

    Export results to a file

  2. اختر Generate rollback (undo) script وحدد أين سيتم حفظ الملف وأسمه.

    Generate Rollback (UNDO) Script

  3. انقر Finish.

    والآن سيتم إنشاء برنامج نصي لإعادة إدخال كل السجلات التي تم حذفها إلى جداولها الأصلية.

    Exporting finished

ستخدام برنامج ApexSQL Recover

هناك أداة أخرى من ApexSQL والتي يمكنها قراءة سجلات الإجراءات – سجل الإجراءات الفعالة ، سجل الإجراءات المنفصلة و النسخة الإحتياطية ، العادية أو المضغوطة ، من سجل الإجراءات. تستخدم أداة ApexSQL Recover لإسترجاع البيانات التي تم حذفها من الجداول عن طريقة جملة حذف البياناتDelete ، جملة حذف الجداول Drop، أو حذف كامل بيانات الجدول Truncate . تقوم هذه الأداة باستعادة العناصر والبيانات التي فُقِدَت نتيجة عملية حذف ، وتستعيد البيانات الثنائية كبيرة الحجم BLOBs المحذوفة والحالية على شكل ملف. تكون عملية الإستعادة مشابهة لما تم وصفه في المقال استعادة البيانات المحذوفة عن طريق النسخة الإحتياطية أو من الملف الفعّال لقاعدة البيانات.

  1. ابدأ برنامج ApexSQL Recover
  2. اختر Recover lost data due to a DELETE operation
  3. حدد خادم SQL Server ، المستخدم وقاعدة البيانات التي تم حذف البيانات منها
  4. اختر Several sources are available for the recovery
  5. ستجد تلقائيا قائمة بكل من ملف سجل الإجراءات الفعّال ، كل النسخ الإحتياطية لسجل الإجراءات والنسخة الإحتياطية لقاعدة البيانات التي تم اختيارها. لإضافة نسخ احتياطية إضافية لسجل الإجراءات، أو ملف سجل إجراءات منفصل يحتوي على السجلات المحذوفة ، انقر على زر Add. لاحظ أن النسخ الإحتياطية لسجل الإجراءات يجب أن تشكل سلسلة متكاملة.
  6. حدد الوقت الذي تم فيه تنفيذ جملة الحذف. واذا كنت لا تعرف الوقت بالتحديد اختر Date and time are unknown.
  7. اختر تصفية الجدول لتضيق نطاق الإسترجاع لجداول محددة فقط اذا أمكن.
  8. انقر Recover
  9. سيتم انشاء برنامج نصي لإدخال البيانات التي تم حذفها. تأكد منها ثم قم بالتنفيذ.

والخبر السار هنا ، أن هناك فرصة لنجاح عملية استعادة البيانات التي تم حذفها حتى بدون وجود نسخة احتياطية لقاعدة البيانات أو سلسلة نسخ احتياطية متكاملة لسجل الإجراءات. لكن لن تنجح عملية استعادة بيانات BLOB المحذوفة دون وجود سلسلة متكاملة من النسخ الإحتياطية لسجل الإجراءات. لأن إجراءات حذف بيانات BLOB لا تسجل القيمة الفعلية التي تم حذفها، لذا يتطلب الأمر تتبّع كامل سلسلة النسخ الإحتياطية لسجلات الإجراءات من البداية. وإذا كان هناك أي قطع في السلسلة، يمكن أن تكون عملية إعادة بناء السياق غير ناجحة. على سبيل المثال، اذا فقدت معلومات تعديل بيانات BLOB، فإن قيمة BLOB الأصلية سيتم استرجاعها بدلاً من المعدّلة المحذوفة.

حتى لو كان نمط الإسترداد لقاعدة البيانات بسيط، هناك فرصة لاستجاع البيانات. ففي نمط الإسترداد البسيط ، يتم كتابة الإجراء الحالي الجديد فوق الإجراء القدبم. فإذا كان سجل الإجراءات الحالي بحجم 100 GB مثلا ، وكل يوم يتم تسجيل 1 GB من الإجراءات ، سيتم الكتابة فوق سجل الإجراءات الحالي كلياً بعد 100 يوم. مما يعني أن باستطاعتك إستعادة البيانات لآخر 100 يوم فقط.

هذا بالطبع لا يعني أن تعتمد عليه وتنسى استراتيجية التعامل مع الكوارث في SQL Server.

تقدم ApexSQL أداتين يمكن أن تساعدانك بالتعامل مع سجل الإجراءات. أداة ApexSQL Log التي تزودك بخيارات تصفية كثيرة وطريقة سلسة لاستعادة البيانات – إضافة إلى التصفية حسب الوقت واسم الجدول والتي هي مشتركة بين كلا الأداتين، وتزودك بتصفية لجداول النظام، والسجلات اعتماداً على قيمة عمود معين ، ووصف للإجراء حسب المستخدم الذي قام بالحذف، وعندما يعمل مراقب الإتصال في ApexSQL Log في الوقت الذي حدثت فيه الإجراءات، عن طريق البرنامج أو الجهاز.

أما بالنسبة لأداة ApexSQL Recover ، فإنها تحتوي على خيارات تصفية أقل ، لكنها تقدم خيارات أكثر لمخرجات الإسترجاع. إضافة إلى إنشاء برنامج نصي بلغة T-SQL لإدخال السجلات ، يمكنه أيضا أن ينشيء قاعدة بيانات جديدة ويدخل البيانات المحذوفة مباشرة إليها.

مترجم Ahmad Yaseen

January 19, 2016