ويبدو أن ما نشرته الأسبوع الماضي قد أثار بعض الاهتمام، لكنه، للأسف، لم يكن يحتوي على "ممارسة". نعم، يقول كيف يمكنك حفظ البيانات، ولكن لا توجد أمثلة.
في البداية، أردت أن أقوم بترجمة أخرى لنفس المؤلف، لكن بعد التفكير في الأمر، قررت أن أكتب تدوينة "بمفردي"، كما لو كانت "مبنية عليها". سأصف الأسباب التي دفعتني للقيام بذلك في نهاية المنشور في الملاحظات.
في قاعدة البيانات هذه أقوم بإنشاء جدول الأعطال.
تعطل إنشاء جدول (txt varchar(1000)) سنقوم بإتلاف حقل نوع varchar للتحقق مما سيحدث إذا وجد SQL Server فجأة بيانات تختلف عن ما كتبه هناك.
قبل أن تفسد شيئًا ما، عليك أن تملأه بشيء ما. أقوم بإدخال البيانات اليسرى في الجدول الذي تم إنشاؤه.
قم بتعيين NOCOUNT على DECLARE @i INT SET @i = 1 بينما @i<100000
BEGIN
INSERT INTO crash
SELECT REPLICATE("a", 1000)
SET @i = @i + 1
END
SET NOCOUNT OFF
Теперь делаю резервную копию журнала транзакций:
سجل النسخ الاحتياطي AdventureWorks على القرص = "D:\tmp\aw_backups\aw_log_ok1.trn"
الآن دعونا نغير البيانات قليلاً:
لذلك، كل شيء جاهز. نقوم بفصل قاعدة البيانات ونفتح ملف mdf باستخدام FAR (أو ما هو أكثر ملاءمة لك)، ونبحث عن السطر "zzzzzzz" فيه ونستبدل العديد من "z" بأحرف عشوائية:
الآن بعد أن أصبحت قاعدة البيانات تالفة، نقوم بتوصيلها. ونعم، أتذكر أنه في المقالة السابقة تم النص بوضوح على أنه لا ينبغي عليك فصل/إرفاق قاعدة البيانات. ولكن في حالتنا فهو "آمن" تمامًا - لن تسقط قاعدة البيانات في الحالة "المشتبه بها".
Msg 8928، المستوى 16، الحالة 1، السطر 1
معرف الكائن 1883153754، معرف الفهرس 0، معرف القسم 72057594054246400، معرف وحدة التخصيص 72057594061651968 (اكتب البيانات في الصف): تعذرت معالجة الصفحة (1:20455). راجع الأخطاء الأخرى للحصول على التفاصيل.
Msg 8939، المستوى 16، الحالة 98، السطر 1
خطأ في الجدول: معرف الكائن 1883153754، معرف الفهرس 0، معرف القسم 72057594054246400، معرف الوحدة المخصصة 72057594061651968 (اكتب البيانات في الصف)، الصفحة (1:20455). فشل الاختبار (IS_OFF (BUF_IOERR, pBUF->bstat))). القيم هي 29493257 و -4.
عثر CHECKDB على 0 أخطاء في التخصيص وخطأين في التناسق في الجدول "تعطل" (معرف الكائن 1883153754).
عثر CHECKDB على 0 أخطاء تخصيص و2 أخطاء تناسق في قاعدة البيانات "AdventureWorks".
يعتبر Repair_allow_data_loss هو الحد الأدنى لمستوى الإصلاح للأخطاء التي تم العثور عليها بواسطة DBCC CHECKDB (AdventureWorks).
في هذه الحالة، تكون البيانات نفسها الموجودة في الكومة (معرف الفهرس = 0) تالفة، لذلك لن يتمكن SQL Server من استرداد هذه البيانات.
الآن لدينا ثلاثة خيارات:
استعادة صفحة قاعدة بيانات AdventureWorks = "1:20455" من القرص = "D:\tmp\aw_backups\aw_full_ok1.bak" مع NORECOVERY
ونتيجة لذلك، لدينا:
يرجى ملاحظة أنك بحاجة إلى استخدام خيار NORECOVERY، حيث لا يزال يتعين علينا إنشاء نسخ احتياطية لسجل المعاملات عليه.
استعادة سجل AdventureWorks من القرص = "D:\tmp\aw_backups\aw_log_ok1.trn" مع NORECOVERY و
استعادة سجل AdventureWorks من القرص = "D:\tmp\aw_backups\aw_log_fail3.trn" مع الاسترداد
يبدو أن كل شيء قد سار على ما يرام، فلنقم بتشغيل DBCC CHECKDB و...
كانت عملية الترميم ناجحة.
يرجى ملاحظة أنه يتم تقليل وقت التوقف عن العمل نظرًا لحقيقة أنه من خلال النسخة الاحتياطية الكاملة، لا نقوم باستعادة قاعدة البيانات بأكملها، ولكن فقط الصفحات التالفة (إذا كنت قد استعدت النسخة الاحتياطية بأكملها، فسيتم استعادة النسخة الاحتياطية في 8.5 ثانية، ولكن كلما زاد حجم النسخة الاحتياطية) حجم قاعدة البيانات، سيكون هناك فارق زمني أكبر). المحظوظون الذين يستخدمون SQL Server Enterprise Edition والذين يستخدمون الاسترداد عبر الإنترنت سيوفرون أيضًا الوقت في الاستعادة من النسخ الاحتياطية للسجل، ومع الاسترداد دون اتصال، للأسف، ستتم معالجة السجلات بالكامل.
ومن الجدير بالذكر أيضًا أنه في SQL Server 2005، 2008، 2008 R2، لا يمكن استعادة صفحة واحدة إلا باستخدام T-SQL في Denali، وأصبح من الممكن القيام بذلك من خلال واجهة المستخدم الرسومية.
أحد المتطلبات الرئيسية لنظام إدارة قواعد البيانات (DBMS) هو موثوقية تخزين البيانات في الذاكرة الخارجية. تعني موثوقية التخزين أن نظام إدارة قواعد البيانات (DBMS) يجب أن يكون قادرًا على استعادة آخر حالة متسقة لقاعدة البيانات بعد أي فشل في الأجهزة أو البرامج. عادة، يتم أخذ نوعين محتملين من أعطال الأجهزة في الاعتبار: ما يسمى بالأعطال البسيطة، والتي يمكن تفسيرها على أنها توقف مفاجئ للكمبيوتر (على سبيل المثال، انقطاع التيار الكهربائي في حالات الطوارئ)، والأعطال الصلبة، التي تتميز بفقدان المعلومات على الأجهزة الخارجية وسائط الذاكرة. يمكن أن تكون أمثلة فشل البرامج: تعطل نظام إدارة قواعد البيانات (بسبب خطأ في البرنامج أو نتيجة لفشل بعض الأجهزة) أو تعطل برنامج المستخدم، ونتيجة لذلك تظل بعض المعاملات غير مكتملة. يمكن اعتبار الحالة الأولى بمثابة نوع خاص من فشل الأجهزة البسيطة؛ وعندما يحدث هذا الأخير، فمن الضروري إزالة عواقب معاملة واحدة فقط.
على أية حال، لاستعادة قاعدة البيانات، يجب أن يكون لديك بعض المعلومات الإضافية. بمعنى آخر، يتطلب الحفاظ على موثوقية تخزين البيانات في قاعدة البيانات تكرار تخزين البيانات، ويجب تخزين جزء البيانات المستخدم للاسترداد بشكل موثوق بشكل خاص. الطريقة الأكثر شيوعًا للاحتفاظ بهذه المعلومات المتكررة هي الاحتفاظ بسجل تغيير قاعدة البيانات.
السجل هو جزء خاص من قاعدة البيانات، لا يمكن لمستخدمي نظام إدارة قواعد البيانات الوصول إليه ويتم صيانته بعناية خاصة (في بعض الأحيان يتم الاحتفاظ بنسختين من السجل، موجودتين على أقراص فعلية مختلفة)، والذي يتلقى سجلات لجميع التغييرات في الجزء الرئيسي من قاعدة البيانات. عند الاحتفاظ بمجلة، يتم اتباع استراتيجية تسجيل "استباقية"، مما يعني أن سجل التغيير في أي كائن قاعدة بيانات يجب أن يدخل إلى الذاكرة الخارجية للمجلة قبل أن يدخل الكائن الذي تم تغييره إلى الذاكرة الخارجية للجزء الرئيسي من قاعدة البيانات. ومن المعروف أنه إذا تمت ملاحظة هذا الشرط بشكل صحيح في نظام إدارة قواعد البيانات، فباستخدام السجل يمكنك حل جميع مشاكل استعادة قاعدة البيانات بعد أي فشل.
أثناء الفشل البسيط، قد تحتوي الذاكرة الخارجية للجزء الرئيسي من قاعدة البيانات على كائنات معدلة بواسطة معاملات لم تكتمل في وقت الفشل، وقد لا يكون هناك كائنات معدلة بواسطة معاملات اكتملت بنجاح في وقت الفشل ولكن لم تتم كتابتها على الذاكرة الخارجية. الهدف من عملية الاسترداد بعد فشل بسيط هو حالة الذاكرة الخارجية للجزء الرئيسي من قاعدة البيانات، والتي قد تنشأ إذا تم تسجيل تغييرات جميع المعاملات المكتملة في الذاكرة الخارجية والتي لن تحتوي على أي آثار غير مكتملة المعاملات. ومن أجل تحقيق ذلك، يقومون أولاً باستعادة المعاملات غير المكتملة، ثم يعيدون تشغيل عمليات المعاملات المكتملة التي لا يتم عرض نتائجها في الذاكرة الخارجية. لاستعادة قاعدة بيانات بعد فشل كبير، استخدم سجلاً ونسخة مؤرشفة من قاعدة البيانات. نسخة الأرشيف هي نسخة كاملة من قاعدة البيانات في الوقت الذي بدأ فيه ملء السجل. لاستعادة قاعدة البيانات العادية بعد فشل كبير، من الضروري ألا يختفي السجل. ثم يتكون استرداد قاعدة البيانات من إعادة إنتاج عمل جميع المعاملات التي انتهت في وقت الفشل باستخدام السجل، بناءً على نسخة الأرشيف.
على الرغم من وجود متطلبات خاصة للحفاظ على السجل من حيث الموثوقية، إلا أنه من الممكن، من حيث المبدأ، فقدانه. ثم الطريقة الوحيدة لاستعادة قاعدة البيانات هي العودة إلى النسخة الاحتياطية. وبطبيعة الحال، في هذه الحالة لن تتمكن من الحصول على آخر حالة متسقة لقاعدة البيانات، لكنه أفضل من لا شيء.
أسهل طريقة لأرشفة قاعدة بيانات عند حدوث تجاوز سعة السجل. يتم تقديم ما يسمى بـ "المنطقة الصفراء" في المجلة، وعند الوصول إليها يتم حظر تكوين المعاملات الجديدة مؤقتًا. عند اكتمال جميع المعاملات، وبالتالي تكون قاعدة البيانات في حالة متسقة، يمكنك أرشفتها، ثم البدء في ملء السجل مرة أخرى.
يمكنك عمل نسخة احتياطية لقاعدة البيانات الخاصة بك في كثير من الأحيان أقل من امتلاء السجل. عندما يمتلئ السجل وتنتهي جميع المعاملات التي بدأت، يمكنك أرشفة السجل نفسه. نظرًا لأن مثل هذا السجل المؤرشف مطلوب فقط لإعادة إنشاء النسخة المؤرشفة من قاعدة البيانات، فيمكن ضغط معلومات السجل بشكل كبير أثناء الأرشفة.
غالبًا ما يحتاج مطورو ومسؤولو Microsoft SQL Server إلى ذلك استعادة قاعدة البيانات من الأرشيف(النسخ الاحتياطي)، على سبيل المثال لإنشاء نسخة من قاعدة البيانات التي سيتم استخدامها لاختبار التطبيق، أو على سبيل المثال، قمت بإعادة تثبيت نظام التشغيل وتحتاج إلى استعادة قاعدة البيانات، هذا ما سنفعله اليوم.
في هذه المقالة سنلقي نظرة على استعادة قاعدة البيانات باستخدام نظام إدارة قواعد البيانات (DBMS) كمثال. مايكروسوفت SQL خادم 2000. من أجل استعادة قاعدة البيانات، يجب أن يكون لديك أرشيف لقاعدة البيانات هذه. تم إنشاؤه بامتداد *.dat. أوصي الجميع بإنشاء أرشيفات لقواعد بياناتهم، وأرشيفات يومية؛ إذا حدث أي شيء، سيكون لديك دائمًا أرشيف لاستعادته.
لنبدأ، افتح Enterprise Manager، وحدد قاعدة البيانات التي تريد استعادتها، أو إذا قمت للتو بتثبيت نظام إدارة قواعد البيانات (DBMS) ولا توجد قواعد بيانات هناك حتى الآن، فما عليك سوى إنشاء قاعدة بيانات واستعادتها من الأرشيف. افتح القائمة " الأدوات->استعادة قاعدة البيانات"وستفتح النافذة التالية:
يختار " من الجهاز" وانقر " حدد الأجهزة».
(تحميل موضع البانر 3
انقر فوق موافق وفي " اختر استعادة قاعدة البيانات»انقر أيضًا على موافق. وفي النافذة الرئيسية " استعادة قاعدة البيانات"لا تتعجل في النقر فوق "موافق" بعد، انتقل إلى علامة التبويب " خيارات» وحدد المربع كما في الصورة.
هنا أيضًا، قم بتعيين المسار لملفات قاعدة البيانات، لأنه قد يكون غير صحيح، ويمكنك الكتابة فوق، على سبيل المثال، قاعدة بيانات موجودة إذا قمت بإنشاء نسخة من قاعدة البيانات، ولكن إذا قمت للتو بتثبيت كل شيء (DBMS)، فأنت ليس من الضروري تغييره.
هذا كل شيء، وبعد ذلك يمكنك النقر فوق موافق. وبعد مرور بعض الوقت، سيتم استعادة قاعدة البيانات ويمكنك استخدامها.
بالمناسبة، إذا كان أي شخص مهتمًا بلغة T-SQL ( هو امتداد للغة SQL في Microsoft SQL Server)، ثم يمكنني أن أوصي بالكتاب " مسار مبرمج T-SQL. البرنامج التعليمي للغة SQL للعمليات"، بعد قراءتها ستتمكن من البرمجة بسهولة في T-SQL.
ويبدو أن ما نشرته الأسبوع الماضي قد أثار بعض الاهتمام، لكنه، للأسف، لم يكن يحتوي على "ممارسة". نعم، يقول كيف يمكنك حفظ البيانات، ولكن لا توجد أمثلة.
في البداية، أردت أن أقوم بترجمة أخرى لنفس المؤلف، لكن بعد التفكير في الأمر، قررت أن أكتب تدوينة "بمفردي"، كما لو كانت "مبنية عليها". سأصف الأسباب التي دفعتني للقيام بذلك في نهاية المنشور في الملاحظات.
في قاعدة البيانات هذه أقوم بإنشاء جدول الأعطال.
تعطل إنشاء جدول (txt varchar(1000)) سنقوم بإتلاف حقل نوع varchar للتحقق مما سيحدث إذا وجد SQL Server فجأة بيانات تختلف عن ما كتبه هناك.
قبل أن تفسد شيئًا ما، عليك أن تملأه بشيء ما. أقوم بإدخال البيانات اليسرى في الجدول الذي تم إنشاؤه.
قم بتعيين NOCOUNT على DECLARE @i INT SET @i = 1 بينما @i<100000
BEGIN
INSERT INTO crash
SELECT REPLICATE("a", 1000)
SET @i = @i + 1
END
SET NOCOUNT OFF
Теперь делаю резервную копию журнала транзакций:
سجل النسخ الاحتياطي AdventureWorks على القرص = "D:\tmp\aw_backups\aw_log_ok1.trn"
الآن دعونا نغير البيانات قليلاً:
لذلك، كل شيء جاهز. نقوم بفصل قاعدة البيانات ونفتح ملف mdf باستخدام FAR (أو ما هو أكثر ملاءمة لك)، ونبحث عن السطر "zzzzzzz" فيه ونستبدل العديد من "z" بأحرف عشوائية:
الآن بعد أن أصبحت قاعدة البيانات تالفة، نقوم بتوصيلها. ونعم، أتذكر أنه في المقالة السابقة تم النص بوضوح على أنه لا ينبغي عليك فصل/إرفاق قاعدة البيانات. ولكن في حالتنا فهو "آمن" تمامًا - لن تسقط قاعدة البيانات في الحالة "المشتبه بها".
Msg 8928، المستوى 16، الحالة 1، السطر 1
معرف الكائن 1883153754، معرف الفهرس 0، معرف القسم 72057594054246400، معرف وحدة التخصيص 72057594061651968 (اكتب البيانات في الصف): تعذرت معالجة الصفحة (1:20455). راجع الأخطاء الأخرى للحصول على التفاصيل.
Msg 8939، المستوى 16، الحالة 98، السطر 1
خطأ في الجدول: معرف الكائن 1883153754، معرف الفهرس 0، معرف القسم 72057594054246400، معرف الوحدة المخصصة 72057594061651968 (اكتب البيانات في الصف)، الصفحة (1:20455). فشل الاختبار (IS_OFF (BUF_IOERR, pBUF->bstat))). القيم هي 29493257 و -4.
عثر CHECKDB على 0 أخطاء في التخصيص وخطأين في التناسق في الجدول "تعطل" (معرف الكائن 1883153754).
عثر CHECKDB على 0 أخطاء تخصيص و2 أخطاء تناسق في قاعدة البيانات "AdventureWorks".
يعتبر Repair_allow_data_loss هو الحد الأدنى لمستوى الإصلاح للأخطاء التي تم العثور عليها بواسطة DBCC CHECKDB (AdventureWorks).
في هذه الحالة، تكون البيانات نفسها الموجودة في الكومة (معرف الفهرس = 0) تالفة، لذلك لن يتمكن SQL Server من استرداد هذه البيانات.
الآن لدينا ثلاثة خيارات:
استعادة صفحة قاعدة بيانات AdventureWorks = "1:20455" من القرص = "D:\tmp\aw_backups\aw_full_ok1.bak" مع NORECOVERY
ونتيجة لذلك، لدينا:
يرجى ملاحظة أنك بحاجة إلى استخدام خيار NORECOVERY، حيث لا يزال يتعين علينا إنشاء نسخ احتياطية لسجل المعاملات عليه.
استعادة سجل AdventureWorks من القرص = "D:\tmp\aw_backups\aw_log_ok1.trn" مع NORECOVERY و
استعادة سجل AdventureWorks من القرص = "D:\tmp\aw_backups\aw_log_fail3.trn" مع الاسترداد
يبدو أن كل شيء قد سار على ما يرام، فلنقم بتشغيل DBCC CHECKDB و...
كانت عملية الترميم ناجحة.
يرجى ملاحظة أنه يتم تقليل وقت التوقف عن العمل نظرًا لحقيقة أنه من خلال النسخة الاحتياطية الكاملة، لا نقوم باستعادة قاعدة البيانات بأكملها، ولكن فقط الصفحات التالفة (إذا كنت قد استعدت النسخة الاحتياطية بأكملها، فسيتم استعادة النسخة الاحتياطية في 8.5 ثانية، ولكن كلما زاد حجم النسخة الاحتياطية) حجم قاعدة البيانات، سيكون هناك فارق زمني أكبر). المحظوظون الذين يستخدمون SQL Server Enterprise Edition والذين يستخدمون الاسترداد عبر الإنترنت سيوفرون أيضًا الوقت في الاستعادة من النسخ الاحتياطية للسجل، ومع الاسترداد دون اتصال، للأسف، ستتم معالجة السجلات بالكامل.
ومن الجدير بالذكر أيضًا أنه في SQL Server 2005، 2008، 2008 R2، لا يمكن استعادة صفحة واحدة إلا باستخدام T-SQL في Denali، وأصبح من الممكن القيام بذلك من خلال واجهة المستخدم الرسومية.
سأشارك تجربتي حول كيفية استعادة قاعدة بيانات موقع الويب (DB) من نسخة احتياطية عبر phpMyAdmin على استضافتك.
قد لا يكون هذا الشيء مفيدًا لك أبدًا، ولكن في حالة حدوث ذلك، يجب أن تفهم كيفية التصرف في موقف حرج. كما يقولون: "جهز مزلقتك في الصيف...".
ومن الجدير بالذكر أن المضيفين أنفسهم يمكنهم استعادة موقع الويب الخاص بك من نسخة احتياطية مجانًا إذا كنت تستخدم خدمات شركة استضافة جيدة. إذا كان الوضع أنه لا يوجد أحد للمساعدة، فاقرأ.
كيفية استعادة قاعدة البيانات من النسخة الاحتياطية
في هذه المرحلة، لديك بالفعل نسخة احتياطية لقاعدة البيانات على جهاز الكمبيوتر الخاص بك. كل ما تبقى هو تحميله على قاعدة البيانات الحالية مع استبداله ليبدأ الموقع بالعمل مرة أخرى، أو تصبح التغييرات التي أجريتها على موقع محلي أو موقع آخر نافذة المفعول. للقيام بذلك، تحتاج إلى الدخول إلى phpMyAdmin على الاستضافة الخاصة بك. سأعرض لك المثال الخاص بي (سيكون مشابهًا للآخرين في الجزء الوظيفي).
سيبدو phpMyAdmin نفسه مشابهًا لك، ربما مع اختلافات طفيفة.
- أنتقل إلى لجنة التنسيق الإدارية. القسم - الزاوية اليمنى العليا من الصورة السابقة MYSQL
- مقابل قاعدة البيانات المطلوبة (إذا لم يكن لديك واحدة، بل عدة)، انقر فوق نقش phpMyAdmin (الصورة أدناه)
سيتم فتح هذه الصفحة أمامك، حيث تحتاج إلى النقر فوق اسم قاعدة البيانات الخاصة بك:
الآن ستتاح لك الفرصة لاستعادة الموقع من نسخة احتياطية. انقر على "استيراد" في اللوحة العلوية:
بشكل افتراضي، يتم ترميز جميع مواقع WordPress بالترميز UTF-8، لذلك لا تحتاج إلى لمس هذا الإعداد. إذا كان موقعك بتشفير مختلف، فاختر الترميز المناسب من القائمة المنسدلة. ونترك الباقي كما هو في الصفحة.
بعد النقر فوق "موافق"، ستبدأ عملية استرداد الموقع. قد يستغرق ذلك بضع ثوانٍ أو دقائق، حسب حجم قاعدة البيانات.
إذا ظهرت مشاكل في عملية الاسترداد أثناء العملية، فستظهر رسالة مقابلة تصف الخطأ في أعلى الصفحة. هنا سيتعين عليك اللجوء إلى المضيف للحصول على المساعدة، لأنه... تحدث الأخطاء غالبًا بسبب إعدادات الخادم (وهذا لا يشمل الموقف عندما تتلف النسخة الاحتياطية لقاعدة البيانات نفسها).
من تجربتي، سأقول أنه في أغلب الأحيان يحدث خطأ عند استعادة قاعدة البيانات بسبب حجم قاعدة البيانات نفسها، عندما لا يتمكن الخادم من معالجة النسخة الاحتياطية بشكل صحيح. في هذه الحالة، هناك طريقتان للخروج:
- قم بفك ضغط الأرشيف من قاعدة البيانات بحيث تحصل على ملف .sql فقط، أو العكس، قم بتعبئته (حسب الموقف).
- اتصل بالدعم الفني للمضيف للحصول على المساعدة.
سأخبرك في إحدى المقالات التالية بما يجب عليك فعله إذا لم يكن لدى مضيفك حق الوصول إلى phpMyAdmin لمستخدم عادي. لقد واجهت وضعا مماثلا عدة مرات. الحل بسيط للغاية.