MS SQL سرور جي نئين ورزن مان پراڻن ورزن تائين بيڪ اپ ڊيٽا کي منتقل ڪرڻ

prehistory

هڪ دفعو، هڪ بگ ٻيهر پيدا ڪرڻ لاء، مون کي پيداوار ڊيٽابيس جي بيڪ اپ جي ضرورت هئي.

منهنجي تعجب ۾، مون کي هيٺين حدن ۾ ڀڄي ويو:

  1. ڊيٽابيس جو بيڪ اپ ورزن تي ڪيو ويو SQL سرور 2016 ۽ مون سان مطابقت نه هئي SQL سرور 2014.
  2. منهنجي ڪم جي ڪمپيوٽر تي، او ايس استعمال ڪيو ويو ونڊوز 7تنهنڪري مان اپڊيٽ نه ڪري سگهيو آهيان SQL سرور نسخو 2016 تائين
  3. سپورٽ ٿيل پراڊڪٽ هڪ وڏي سسٽم جو حصو هئي جنهن سان مضبوطي سان جوڙيل ميراثي فن تعمير ۽ ٻين پروڊڪٽس ۽ بنيادن سان پڻ ڳالهايو ويو، تنهنڪري ان کي ڪنهن ٻئي اسٽيشن تي پهچائڻ ۾ تمام گهڻو وقت لڳي سگهي ٿو.

مٿين ڳالهين کي نظر ۾ رکندي، مان ان نتيجي تي پهتو آهيان ته غير معياري حلن جي ڪچري جو وقت اچي ويو آهي.

بيڪ اپ مان ڊيٽا کي بحال ڪرڻ

مون هڪ ورچوئل مشين استعمال ڪرڻ جو انتخاب ڪيو اورراڙي وي ايم VirtualBox سان Windows 10 (توهان ايج برائوزر لاءِ ٽيسٽ تصوير وٺي سگهو ٿا هتي کان). SQL سرور 2016 ورچوئل مشين تي نصب ڪيو ويو ۽ ايپليڪيشن ڊيٽابيس کي بيڪ اپ مان بحال ڪيو ويو (دستياب).

ورچوئل مشين تي SQL سرور تائين رسائي کي ترتيب ڏيڻ

اڳيون، ٻاهران SQL سرور تائين رسائي حاصل ڪرڻ جي قابل ٿيڻ لاء ڪجهه قدم کڻڻ ضروري هو:

  1. فائر وال لاءِ، پورٽ جي درخواستن کي ڇڏڻ لاءِ ضابطو شامل ڪريو 1433.
  2. اهو ضروري آهي ته سرور تائين رسائي ونڊوز جي تصديق جي ذريعي نه، پر لاگ ان ۽ پاسورڊ استعمال ڪندي SQL ذريعي (انهي تائين رسائي قائم ڪرڻ آسان آهي). جڏهن ته، هن حالت ۾، توهان کي ياد رکڻ جي ضرورت آهي SQL تصديق کي فعال ڪرڻ لاء SQL سرور ملڪيت ۾.
  3. ٽيب تي SQL سرور تي صارف سيٽنگون ۾ يوزر ميپنگ بحال ٿيل ڊيٽابيس لاءِ صارف جو ڪردار بيان ڪريو db_securityadmin.

ڊيٽا جي منتقلي

دراصل، ڊيٽا جي منتقلي پاڻ کي ٻن مرحلن تي مشتمل آهي:

  1. ڊيٽا اسڪيما جي منتقلي (ٽيبل، ڏيک، ذخيرو طريقا، وغيره)
  2. ڊيٽا پاڻ کي منتقل ڪرڻ

ڊيٽا اسڪيما جي منتقلي

اسان هيٺ ڏنل عملن کي انجام ڏيون ٿا:

  1. چونڊيو ڪم -> اسڪرپٽ ٺاھيو هڪ پورٽبل بنياد لاء.
  2. شيون چونڊيو جيڪي توهان کي منتقل ڪرڻ جي ضرورت آهي يا ڊفالٽ قيمت ڇڏڻ (هن صورت ۾، اسڪرپٽ سڀني ڊيٽابيس جي شين لاء ٺاهي ويندي).
  3. اسڪرپٽ محفوظ ڪرڻ لاءِ سيٽنگون بيان ڪريو. اسڪرپٽ کي ھڪڙي يونيڪوڊ فائل ۾ محفوظ ڪرڻ تمام آسان آھي. پوء، ناڪامي جي صورت ۾، توهان کي سڀني مرحلن کي ٻيهر ورجائڻ جي ضرورت ناهي.

هڪ دفعو اسڪرپٽ محفوظ ٿي وڃي ٿي، ان کي هلائي سگهجي ٿو اصل SQL سرور (پراڻو ورزن) تي گهربل بنياد ٺاهڻ لاءِ.

خبردار: اسڪرپٽ تي عمل ڪرڻ کان پوء، توهان کي بيڪ اپ مان ڊيٽابيس جي سيٽنگن ۽ اسڪرپٽ پاران ٺاهيل ڊيٽابيس جي وچ ۾ رابطي جي جانچ ڪرڻ جي ضرورت آهي. منهنجي صورت ۾، اسڪرپٽ ۾ COLLATE لاءِ ڪا به سيٽنگ نه هئي، جنهن جي نتيجي ۾ ڊيٽا کي منتقل ڪرڻ ۾ ناڪامي ٿي ۽ ضمني اسڪرپٽ استعمال ڪندي ڊيٽابيس کي ٻيهر ٺاهڻ لاءِ ٽامبورين سان ناچ.

ڊيٽا جي منتقلي

ڊيٽا کي منتقل ڪرڻ کان پهريان، توهان کي ڊيٽابيس تي سڀني پابندين جي چيڪ کي غير فعال ڪرڻ گهرجي:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

ڊيٽا جي منتقلي ڊيٽا درآمد مددگار استعمال ڪندي ڪيو ويندو آهي ڪم -> ڊيٽا درآمد ڪريو SQL سرور تي، جتي اسڪرپٽ پاران ٺاهيل ڊيٽابيس واقع آهي:

  1. ماخذ ڏانهن ڪنيڪشن سيٽنگون بيان ڪريو (SQL سرور 2016 ورچوئل مشين تي). مون ڊيٽا جو ذريعو استعمال ڪيو SQL سرور اصلي ڪلائنٽ ۽ مٿي بيان ڪيل SQL جي تصديق.
  2. وضاحت ڪريو ڪنيڪشن سيٽنگون منزل لاءِ (SQL سرور 2014 ميزبان مشين تي).
  3. اڳيون، ميپنگ کي ترتيب ڏيو. سڀني کي چونڊڻ گهرجي نه رڳو پڙهڻ شيون (مثال طور، نظارن کي چونڊڻ جي ضرورت ناهي). اضافي اختيارن جي طور تي، چونڊيو "سڃاڻپ جي ڪالمن ۾ داخل ڪرڻ جي اجازت ڏيو"جيڪڏهن اهڙا استعمال ڪيا وڃن.
    خبردار: جيڪڏهن، جڏهن ڪيترن ئي جدولن کي چونڊڻ ۽ انهن جي ملڪيت کي سيٽ ڪرڻ جي ڪوشش ڪري رهيا آهيو "سڃاڻپ جي ڪالمن ۾ داخل ڪرڻ جي اجازت ڏيو" ملڪيت اڳ ۾ ئي مقرر ڪئي وئي آهي گهٽ ۾ گهٽ هڪ چونڊيل جدولن لاءِ، ڊائلاگ ظاهر ڪندو ته ملڪيت اڳ ۾ ئي سڀني چونڊيل جدولن لاءِ مقرر ڪئي وئي آهي. اها حقيقت مونجهارو ٿي سگهي ٿي ۽ لڏپلاڻ جي غلطين جي ڪري ٿي سگهي ٿي.
  4. اسان منتقلي شروع ڪريون ٿا.
  5. پابندي واري چيڪ کي بحال ڪرڻ:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

جيڪڏهن ڪا غلطي ٿئي ٿي، اسان سيٽنگون چيڪ ڪريون ٿا، غلطين سان ٺهيل ڊيٽابيس کي حذف ڪريو، ان کي اسڪرپٽ مان ٻيهر ٺاهيو، درست ڪريو ۽ ڊيٽا جي منتقلي کي ورجائي.

ٿڪل

اهو ڪم بلڪل نادر آهي ۽ صرف مٿين حدن جي ڪري ٿئي ٿو. سڀ کان وڌيڪ عام حل SQL سرور کي اپڊيٽ ڪرڻ يا ريموٽ سرور سان ڳنڍڻ آهي جيڪڏهن ايپليڪيشن آرڪيٽيڪچر ان کي اجازت ڏئي ٿي. تنهن هوندي، ڪو به وراثت ڪوڊ کان محفوظ نه آهي ۽ خراب معيار جي ترقي جي هٿرادو هٿ. مون کي اميد آهي ته توهان کي هن هدايت جي ضرورت نه هوندي، پر جيڪڏهن توهان اڃا تائين ان جي ضرورت آهي، اهو گهڻو وقت ۽ اعصاب بچائڻ ۾ مدد ڪندو. توهان جي توجه لاء مهرباني!

استعمال ٿيل ذريعن جي فهرست

جو ذريعو: www.habr.com