قبل التاريخ
مرة واحدة ، لإعادة إنتاج الخلل ، كنت بحاجة إلى نسخة احتياطية من قاعدة الإنتاج.
لدهشتي ، صادفت القيود التالية:
- تم إجراء النسخ الاحتياطي لقاعدة البيانات على إصدار SQL Server 2016 ولم يكن متوافقًا مع SQL Server 2014 .
- على جهاز الكمبيوتر العامل الخاص بي ، تم استخدام نظام التشغيل Windows 7 كنظام تشغيل ، لذلك لم أستطع ترقية SQL Server إلى الإصدار 2016
- كان المنتج المدعوم جزءًا من نظام أكبر بهندسة Legacy متصلة بشكل كبير وتحول أيضًا إلى منتجات وقواعد أخرى ، لذلك قد يستغرق نشره في محطة أخرى وقتًا طويلاً للغاية.
بالنظر إلى ما سبق ، توصلت إلى استنتاج مفاده أن الوقت قد حان
لعكازات الحلول غير القياسية.
استعادة البيانات من النسخ الاحتياطي
قررت استخدام
Oracle VM VirtualBox مع Windows 10 (يمكنك التقاط صورة اختبار لمتصفح Edge
من هنا ). تم تثبيت SQL Server 2016 على الجهاز الظاهري وتم استعادة قاعدة بيانات التطبيق عليه من النسخة الاحتياطية (
التعليمات ).
تكوين الوصول إلى SQL Server في جهاز الظاهري
علاوة على ذلك ، كان من الضروري اتخاذ بعض الخطوات لتمكين الوصول إلى SQL Server من الخارج:
- لجدار الحماية ، أضف قاعدة لتخطي الطلبات إلى المنفذ 1433 .
- من المرغوب فيه ألا يتم الوصول إلى الخادم من خلال مصادقة Windows ، ولكن من خلال SQL باستخدام اسم مستخدم وكلمة مرور (من الأسهل تكوين الوصول). ومع ذلك ، في هذه الحالة ، يجب أن تتذكر تمكين مصادقة SQL في خصائص SQL Server.
- في إعدادات المستخدم على SQL Server ، ضمن علامة التبويب " تعيين المستخدم" ، حدد دور المستخدم db_securityadmin لقاعدة البيانات المستعادة.
نقل البيانات
في الواقع ، يتألف نقل البيانات نفسه من مرحلتين:
- نقل مخطط البيانات (الجداول ، المشاهدات ، الإجراءات المخزنة ، إلخ.)
- نقل البيانات نفسها
ترحيل مخطط البيانات
نقوم بالعمليات التالية:
- حدد المهام -> إنشاء برامج نصية لقاعدة البيانات المحمولة.
- نختار الكائنات اللازمة لنقل أو ترك القيمة الافتراضية (في هذه الحالة ، سيتم إنشاء البرامج النصية لجميع الكائنات في قاعدة البيانات).
- حدد الإعدادات لحفظ البرنامج النصي. هو الأكثر ملاءمة لحفظ البرنامج النصي في ملف واحد ترميز في Unicode. ثم ، في حالة حدوث فشل ، ليس من الضروري تكرار جميع الخطوات مرة أخرى.
بعد حفظ البرنامج النصي ، يمكن تنفيذه على SQL Server الأصلي (الإصدار القديم) لإنشاء قاعدة البيانات المطلوبة.
انتباه: بعد تشغيل البرنامج النصي ، تحتاج إلى التحقق من توافق إعدادات قاعدة البيانات من النسخة الاحتياطية وقاعدة البيانات التي أنشأها البرنامج النصي. في حالتي ، لم يكن هناك إعداد لـ COLLATE في البرنامج النصي ، مما أدى إلى تعطل عند نقل البيانات
والرقص مع الدف لإعادة إنشاء قاعدة البيانات باستخدام برنامج نصي مضاف.
نقل البيانات
قبل نقل البيانات ، يجب عليك تعطيل التحقق من جميع القيود بناءً على:
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
ننقل البيانات باستخدام
المهام -> معالج استيراد بيانات الاستيراد على SQL Server ، حيث توجد قاعدة البيانات التي تم إنشاؤها بواسطة البرنامج النصي:
- حدد إعدادات الاتصال المصدر (SQL Server 2016 على الجهاز الظاهري). لقد استخدمت عميل مصدر بيانات SQL Server الأصلي ومصادقة SQL المذكورة أعلاه.
- حدد إعدادات الاتصال بالوجهة (SQL Server 2014 على الجهاز المضيف).
- بعد ذلك ، قم بتكوين التعيين. يجب عليك تحديد كل الكائنات غير المقروءة فقط (على سبيل المثال ، لا تحتاج إلى تحديد طرق العرض). كخيارات إضافية ، حدد "السماح بالإدراج في أعمدة الهوية" ، إذا تم استخدامها.
تنبيه: إذا حاولت ، عند محاولة تحديد عدة جداول وتعيين الخاصية "السماح بالإدراج في أعمدة الهوية" ، بالفعل تعيين أحد الجداول المحددة على الأقل ، سيشير مربع الحوار إلى أن الخاصية تم تعيينها بالفعل لجميع الجداول المحددة. هذه الحقيقة يمكن أن تكون مربكة وتؤدي إلى أخطاء النقل. - نبدأ النقل.
- استعادة فحص القيد:
EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
في حالة حدوث أي أخطاء ، تحقق من الإعدادات وحذف قاعدة البيانات التي تم إنشاؤها باستخدام الأخطاء ، وأعد إنشائها من البرنامج النصي ، وقم بإجراء التصحيحات وكرر نقل البيانات.
استنتاج
هذه المهمة نادرة جدًا وتنشأ فقط بسبب القيود المذكورة أعلاه. الحل الأكثر شيوعًا هو ترقية SQL Server أو الاتصال بخادم بعيد إذا سمحت بنية التطبيق بذلك. ومع ذلك ، لا يوجد أحد في مأمن من الكود القديم
والأيدي الملتوية للتنمية السيئة الجودة. آمل ألا تحتاج إلى هذه التعليمات ، ولكن إذا كنت لا تزال بحاجة إليها ، فستساعد على توفير الكثير من الوقت والأعصاب. شكرا لاهتمامكم!
قائمة المصادر المستخدمة