MS SQL Serverin yeni versiyasından köhnə versiyaya ehtiyat məlumatların köçürülməsi

Prehistorya

Bir dəfə, bir səhvi təkrarlamaq üçün istehsal məlumat bazasının ehtiyat nüsxəsinə ehtiyacım oldu.

Təəccüblə, aşağıdakı məhdudiyyətlərlə qarşılaşdım:

  1. Versiyada verilənlər bazasının ehtiyat nüsxəsi hazırlanmışdır SQL Server 2016 və mənimlə uyğun gəlmirdi SQL Server 2014.
  2. İş kompüterimdə istifadə olunan OS idi Windows 7ona görə də yeniləyə bilmədim SQL Server 2016-cı versiyaya qədər
  3. Dəstəklənən məhsul sıx birləşmiş köhnə arxitekturaya malik daha böyük sistemin bir hissəsi idi və digər məhsullar və bazalarla da danışırdı, ona görə də onu başqa bir stansiyaya yerləşdirmək çox uzun vaxt apara bilər.

Yuxarıda göstərilənləri nəzərə alaraq, qeyri-standart həllərin qoltuqlarının vaxtının gəldiyi qənaətinə gəldim.

Məlumatların ehtiyat nüsxədən bərpası

Mən virtual maşından istifadə etməyi seçdim Oracle VM VirtualBox Windows 10 ilə (siz Edge brauzeri üçün sınaq şəkli çəkə bilərsiniz buradan). SQL Server 2016 virtual maşına quraşdırıldı və proqram verilənlər bazası ehtiyat nüsxədən bərpa edildi (təlim).

Virtual maşında SQL Serverə girişin konfiqurasiyası

Bundan sonra, SQL Serverə kənardan daxil olmaq üçün bəzi addımlar atmaq lazım idi:

  1. Firewall üçün port sorğularını keçmək üçün bir qayda əlavə edin 1433.
  2. Arzu edilir ki, serverə giriş Windows identifikasiyası vasitəsilə yox, login və paroldan istifadə edərək SQL vasitəsilə (girişi qurmaq daha asandır). Bununla belə, bu halda SQL Server xüsusiyyətlərində SQL Authentication-ı aktivləşdirməyi yadda saxlamaq lazımdır.
  3. Nişanda SQL Serverdə istifadəçi parametrlərində İstifadəçi Xəritəçəkməsi bərpa edilmiş verilənlər bazası üçün istifadəçi rolunu təyin edin db_securityadmin.

Məlumat ötürülməsi

Əslində, məlumat ötürülməsinin özü iki mərhələdən ibarətdir:

  1. Məlumat sxeminin ötürülməsi (cədvəllər, görünüşlər, saxlanılan prosedurlar və s.)
  2. Məlumatların özü ötürülməsi

Məlumat sxeminin ötürülməsi

Aşağıdakı əməliyyatları həyata keçiririk:

  1. seçmək Tapşırıqlar -> Skriptlər yaradın portativ baza üçün.
  2. Ötürmək üçün lazım olan obyektləri seçin və ya standart dəyəri tərk edin (bu halda bütün verilənlər bazası obyektləri üçün skriptlər yaradılacaq).
  3. Skripti saxlamaq üçün parametrləri təyin edin. Skripti vahid Unicode faylında saxlamaq ən rahatdır. Sonra, uğursuzluq halında, bütün addımları yenidən təkrarlamaq lazım deyil.

Skript saxlandıqdan sonra tələb olunan bazanı yaratmaq üçün orijinal SQL Serverdə (köhnə versiya) işə salına bilər.

Diqqət: Skripti icra etdikdən sonra ehtiyat nüsxədən verilənlər bazasının parametrləri ilə skriptin yaratdığı verilənlər bazası arasında yazışmaları yoxlamaq lazımdır. Mənim vəziyyətimdə, skriptdə COLLATE parametri yox idi, bu, məlumatların ötürülməsi zamanı uğursuzluğa səbəb oldu və əlavə edilmiş skriptdən istifadə edərək verilənlər bazasını yenidən yaratmaq üçün qavalla rəqs etdi.

Məlumat ötürülməsi

Məlumatları ötürməzdən əvvəl verilənlər bazasındakı bütün məhdudiyyətlərin yoxlanılmasını deaktiv etməlisiniz:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Məlumatların ötürülməsi məlumatların idxalı sihirbazından istifadə etməklə həyata keçirilir Tapşırıqlar -> Məlumatları idxal edin skript tərəfindən yaradılmış verilənlər bazasının yerləşdiyi SQL Serverdə:

  1. Mənbə ilə əlaqə parametrlərini göstərin (virtual maşında SQL Server 2016). Mən məlumat mənbəyindən istifadə etdim SQL Server Yerli Müştəri və yuxarıda qeyd olunan SQL autentifikasiyası.
  2. Təyinat üçün əlaqə parametrlərini təyin edin (ana kompüterdə SQL Server 2014).
  3. Sonra, xəritəçəkməni qurun. Hamısı seçilməlidir yalnız oxumaq üçün deyil obyektlər (məsələn, görünüşlərin seçilməsinə ehtiyac yoxdur). Əlavə seçimlər kimi seçin "Şəxsiyyət sütunlarına daxil etməyə icazə verin"belə istifadə olunarsa.
    Diqqət: əgər, bir neçə cədvəl seçmək və onların əmlakını təyin etmək istəyərkən "Şəxsiyyət sütunlarına daxil etməyə icazə verin" xassə artıq seçilmiş cədvəllərdən ən azı biri üçün təyin edilibsə, dialoq pəncərəsində xüsusiyyətin artıq seçilmiş bütün cədvəllər üçün təyin olunduğu göstərilir. Bu fakt çaşdırıcı ola bilər və miqrasiya səhvlərinə səbəb ola bilər.
  4. Transferə başlayırıq.
  5. Məhdudiyyət yoxlamasının bərpası:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Hər hansı bir səhv baş verərsə, biz parametrləri yoxlayırıq, səhvlərlə yaradılmış verilənlər bazasını silir, skriptdən yenidən yaradırıq, düzəlişlər edirik və məlumat ötürülməsini təkrar edirik.

Nəticə

Bu vəzifə olduqca nadirdir və yalnız yuxarıda göstərilən məhdudiyyətlər səbəbindən baş verir. Ən ümumi həll SQL Serveri təkmilləşdirmək və ya proqram arxitekturası imkan verirsə, uzaq serverə qoşulmaqdır. Bununla belə, heç kim köhnə kodlardan və keyfiyyətsiz inkişafın əyri əllərindən immun deyil. Ümid edirəm ki, bu təlimata ehtiyacınız olmayacaq, amma hələ də ehtiyacınız varsa, bu, çox vaxt və əsəblərə qənaət etməyə kömək edəcəkdir. Diqqətinizə görə təşəkkürlər!

İstifadə olunan mənbələrin siyahısı

Mənbə: www.habr.com