Mindhah data serep saka versi anyar MS SQL Server menyang versi lawas

prasejarah

Sawise, kanggo ngasilake bug, aku butuh serep database produksi.

Kanggo kaget, aku nemoni watesan ing ngisor iki:

  1. Serep database digawe ing versi SQL Server 2016 lan ora kompatibel karo mine SQL Server 2014.
  2. Ing komputer kerjaku OS ana Windows 7dadi aku ora bisa nganyari SQL Server nganti versi 2016
  3. Produk sing didhukung minangka bagean saka sistem sing luwih gedhe kanthi arsitektur warisan sing digandhengake kanthi rapet lan uga bisa ngakses produk lan basis liyane, saengga bisa njupuk wektu sing suwe kanggo disebarake menyang stasiun liya.

Ngelingi ing ndhuwur, aku teka ing kesimpulan yen wektu wis teka kanggo crutches solusi non-standar.

Mulihake data saka serep

Aku mutusaké kanggo nggunakake mesin virtual Oracle VM VirtualBox karo Windows 10 (sampeyan bisa njupuk gambar test kanggo browser Edge saka kene). SQL Server 2016 wis diinstal ing mesin virtual lan database aplikasi dibalèkaké saka serep (manual).

Nyetel akses menyang SQL Server ing mesin virtual

Sabanjure, sampeyan kudu njupuk sawetara langkah supaya bisa ngakses SQL Server saka njaba:

  1. Kanggo firewall, nambah aturan kanggo ngidini panjalukan port kanggo pass 1433.
  2. Disaranake akses menyang server ora liwat otentikasi Windows, nanging liwat SQL nggunakake login lan sandhi (luwih gampang kanggo ngatur akses). Nanging, ing kasus iki, sampeyan kudu ngelingi kanggo ngaktifake otentikasi SQL ing properti SQL Server.
  3. Ing setelan pangguna ing SQL Server ing tab Pemetaan pangguna nemtokake peran pangguna kanggo database sing dipulihake db_securityadmin.

Transfer data

Bener, transfer data kasebut dumadi saka rong tahap:

  1. Transfer skema data (tabel, tampilan, prosedur sing disimpen, lsp.)
  2. Transfer data dhewe

Transfer Skema Data

Kita nindakake operasi ing ngisor iki:

  1. Pilih Tugas -> Nggawe Skrip kanggo basis portabel.
  2. Pilih obyek sing kudu ditransfer utawa ninggalake nilai standar (ing kasus iki, skrip bakal digawe kanggo kabeh obyek database).
  3. Nemtokake setelan kanggo nyimpen skrip. Cara sing paling trep yaiku nyimpen skrip ing file siji ing enkoding Unicode. Banjur, yen ana gagal, sampeyan ora perlu mbaleni kabeh langkah maneh.

Sawise skrip disimpen, bisa dieksekusi ing sumber SQL Server (versi lawas) kanggo nggawe database sing dibutuhake.

Pènget: Sawise nglakokake script, sampeyan kudu mriksa konsistensi setelan database saka serep lan database digawe dening script. Ing kasusku, skrip ora duwe setelan kanggo COLLATE, sing nyebabake kegagalan nalika nransfer data lan nari karo rebana kanggo nggawe database maneh nggunakake skrip ditambah.

Transfer data

Sadurunge nransfer data, sampeyan kudu mateni mriksa kabeh watesan ing database:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Transfer data ditindakake nggunakake Wisaya Impor Data Tugas -> Impor Data ing SQL Server, ing ngendi database digawe dening script dumunung:

  1. Nemtokake setelan sambungan menyang sumber (SQL Server 2016 ing mesin virtual). Aku nggunakake Sumber Data SQL Server Native Client lan otentikasi SQL sing kasebut ing ndhuwur.
  2. Kita nemtokake setelan sambungan menyang tujuan (SQL Server 2014 ing mesin inang).
  3. Sabanjure kita nyiyapake pemetaan. Sampeyan kudu milih kabeh ora mung diwaca obyek (contone, tampilan ora perlu dipilih). Opsi tambahan kudu dipilih "Idini nyisipake menyang kolom identitas", yen kuwi digunakake.
    Pènget: yen sampeyan nyoba milih sawetara tabel lan nemtokake properti kasebut "Idini nyisipake menyang kolom identitas" property wis sadurunge disetel kanggo ing paling siji saka tabel milih, dialog bakal nunjukaké sing property wis disetel kanggo kabeh tabel milih. Kasunyatan iki bisa mbingungake lan nyebabake kesalahan transfer.
  4. Ayo dadi miwiti transfer.
  5. Mulihake pamriksa kendala:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Yen ana kesalahan, kita mriksa setelan kasebut, mbusak database sing digawe kanthi kesalahan, gawe maneh saka skrip, koreksi lan baleni transfer data.

kesimpulan

Tugas iki cukup langka lan mung muncul amarga watesan ing ndhuwur. Solusi sing paling umum yaiku upgrade SQL Server utawa nyambung menyang server remot yen arsitektur aplikasi ngidini. Nanging, ora ana sing aman saka kode warisan lan tangan bengkok pembangunan sing ora apik. Muga-muga sampeyan ora butuh pandhuan iki, lan yen sampeyan butuh, bakal mbantu sampeyan ngirit wektu lan saraf. Matur nuwun kanggo perhatian sampeyan!

Dhaptar sumber sing digunakake

Source: www.habr.com