نقل بيانات النسخ الاحتياطي من إصدار جديد من MS SQL Server إلى إصدار أقدم

قبل التاريخ

مرة واحدة ، من أجل إعادة إنتاج خطأ ، كنت بحاجة إلى نسخة احتياطية من قاعدة بيانات الإنتاج.

لدهشتي ، واجهت القيود التالية:

  1. تم عمل نسخة احتياطية لقاعدة البيانات على الإصدار خادم SQL 2016 ولم يكن متوافقًا مع خادم SQL 2014.
  2. على كمبيوتر عملي ، كان نظام التشغيل المستخدم نوافذ 7لذلك لم أستطع التحديث ملقم SQL حتى إصدار 2016
  3. كان المنتج المدعوم جزءًا من نظام أكبر بهندسة تراثية مترابطة بإحكام وتحدث أيضًا إلى منتجات وقواعد أخرى ، لذلك قد يستغرق وقتًا طويلاً لنشره في محطة أخرى.

بالنظر إلى ما سبق ، توصلت إلى استنتاج مفاده أن الوقت قد حان لعكازات الحلول غير القياسية.

استعادة البيانات من نسخة احتياطية

اخترت استخدام آلة افتراضية أوراكل VM فيرتثلبوإكس مع Windows 10 (يمكنك التقاط صورة اختبارية لمتصفح Edge من هنا). تم تثبيت SQL Server 2016 على الجهاز الظاهري وتمت استعادة قاعدة بيانات التطبيق من النسخة الاحتياطية (تعليمات).

تكوين الوصول إلى SQL Server على جهاز ظاهري

بعد ذلك ، كان من الضروري اتخاذ بعض الخطوات لتتمكن من الوصول إلى SQL Server من الخارج:

  1. بالنسبة لجدار الحماية ، أضف قاعدة لتخطي طلبات المنفذ 1433.
  2. من المستحسن ألا يمر الوصول إلى الخادم عبر مصادقة Windows ، ولكن من خلال SQL باستخدام تسجيل الدخول وكلمة المرور (من الأسهل إعداد الوصول). ومع ذلك ، في هذه الحالة ، عليك أن تتذكر تمكين مصادقة SQL في خصائص SQL Server.
  3. في إعدادات المستخدم على SQL Server في علامة التبويب رسم الخرائط المستخدم تحديد دور المستخدم لقاعدة البيانات المستعادة db_securityadmin.

نقل البيانات

في الواقع ، يتكون نقل البيانات نفسه من مرحلتين:

  1. نقل مخطط البيانات (جداول ، طرق عرض ، إجراءات مخزنة ، إلخ.)
  2. نقل البيانات نفسها

نقل مخطط البيانات

نقوم بتنفيذ العمليات التالية:

  1. اختر المهام -> إنشاء البرامج النصية لقاعدة محمولة.
  2. حدد الكائنات التي تريد نقلها أو اترك القيمة الافتراضية (في هذه الحالة ، سيتم إنشاء البرامج النصية لجميع كائنات قاعدة البيانات).
  3. حدد إعدادات حفظ البرنامج النصي. من الأنسب حفظ البرنامج النصي في ملف Unicode واحد. ثم ، في حالة الفشل ، لا تحتاج إلى تكرار كل الخطوات مرة أخرى.

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

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

نقل البيانات

قبل نقل البيانات ، يجب عليك تعطيل التحقق من جميع القيود على قاعدة البيانات:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

يتم نقل البيانات باستخدام معالج استيراد البيانات المهام -> استيراد البيانات في SQL Server ، حيث توجد قاعدة البيانات التي تم إنشاؤها بواسطة البرنامج النصي:

  1. حدد إعدادات الاتصال بالمصدر (SQL Server 2016 على جهاز ظاهري). لقد استخدمت مصدر البيانات عميل SQL Server الأصلي ومصادقة SQL المذكورة أعلاه.
  2. حدد إعدادات الاتصال للوجهة (SQL Server 2014 على الجهاز المضيف).
  3. بعد ذلك ، قم بإعداد التعيين. يجب تحديد الكل ليس للقراءة فقط كائنات (على سبيل المثال ، لا يلزم تحديد طرق العرض). كخيارات إضافية ، حدد "السماح بالإدراج في أعمدة الهوية"إذا تم استخدام هذا.
    ملاحظة: إذا ، عند محاولة تحديد عدة جداول وتعيين خصائصها "السماح بالإدراج في أعمدة الهوية" تم بالفعل تعيين الخاصية لواحد على الأقل من الجداول المحددة ، سيشير مربع الحوار إلى أنه تم بالفعل تعيين الخاصية لجميع الجداول المحددة. قد تكون هذه الحقيقة محيرة وتؤدي إلى أخطاء في الترحيل.
  4. نبدأ النقل.
  5. استعادة فحص القيد:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

في حالة حدوث أي أخطاء ، نتحقق من الإعدادات ونحذف قاعدة البيانات التي تم إنشاؤها بأخطاء ونعيد إنشائها من البرنامج النصي ونجري التصحيحات ونكرر نقل البيانات.

اختتام

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

قائمة المصادر المستخدمة

المصدر: www.habr.com