Memindahkan data sandaran daripada versi baharu MS SQL Server kepada versi yang lebih lama

prasejarah

Sekali, untuk menghasilkan semula pepijat, saya memerlukan sandaran pangkalan data pengeluaran.

Yang mengejutkan saya, saya menghadapi batasan berikut:

  1. Sandaran pangkalan data telah dibuat pada versi SQL Server 2016 dan tidak serasi dengan saya SQL Server 2014.
  2. Pada komputer kerja saya, OS adalah Windows 7jadi saya tidak dapat mengemas kini SQL Server sehingga versi 2016
  3. Produk yang disokong adalah sebahagian daripada sistem yang lebih besar dengan seni bina warisan yang digandingkan rapat dan juga mengakses produk dan pangkalan lain, jadi ia boleh mengambil masa yang sangat lama untuk digunakan ke stesen lain.

Memandangkan perkara di atas, saya membuat kesimpulan bahawa masanya telah tiba untuk tongkat penyelesaian yang tidak standard.

Memulihkan data daripada sandaran

Saya memutuskan untuk menggunakan mesin maya Oracle VM VirtualBox dengan Windows 10 (anda boleh mengambil imej ujian untuk pelayar Edge oleh itu). SQL Server 2016 telah dipasang pada mesin maya dan pangkalan data aplikasi telah dipulihkan daripada sandaran (arahan).

Menyediakan akses kepada SQL Server pada mesin maya

Seterusnya, adalah perlu untuk mengambil beberapa langkah untuk membolehkan anda mengakses SQL Server dari luar:

  1. Untuk tembok api, tambahkan peraturan untuk membenarkan permintaan port lulus 1433.
  2. Adalah dinasihatkan bahawa akses kepada pelayan berlaku bukan melalui pengesahan Windows, tetapi melalui SQL menggunakan log masuk dan kata laluan (lebih mudah untuk mengkonfigurasi akses). Walau bagaimanapun, dalam kes ini, anda mesti ingat untuk mendayakan pengesahan SQL dalam sifat SQL Server.
  3. Dalam tetapan pengguna pada SQL Server pada tab Pemetaan pengguna nyatakan peranan pengguna untuk pangkalan data yang dipulihkan db_securityadmin.

Pemindahan data

Sebenarnya, pemindahan data itu sendiri terdiri daripada dua peringkat:

  1. Memindahkan skema data (jadual, paparan, prosedur tersimpan, dsb.)
  2. Memindahkan data itu sendiri

Pemindahan Skema Data

Kami melakukan operasi berikut:

  1. pilih Tugas -> Hasilkan Skrip untuk pangkalan mudah alih.
  2. Pilih objek yang anda perlukan untuk memindahkan atau meninggalkan nilai lalai (dalam kes ini, skrip akan dibuat untuk semua objek pangkalan data).
  3. Tentukan tetapan untuk menyimpan skrip. Cara paling mudah ialah menyimpan skrip dalam satu fail dalam pengekodan Unicode. Kemudian, jika terdapat kegagalan, anda tidak perlu mengulangi semua langkah sekali lagi.

Setelah skrip disimpan, ia boleh dilaksanakan pada sumber SQL Server (versi lama) untuk mencipta pangkalan data yang diperlukan.

Amaran: Selepas melaksanakan skrip, anda perlu menyemak ketekalan tetapan pangkalan data daripada sandaran dan pangkalan data yang dibuat oleh skrip. Dalam kes saya, skrip tidak mempunyai tetapan untuk COLLATE, yang membawa kepada kegagalan apabila memindahkan data dan menari dengan tamborin untuk mencipta semula pangkalan data menggunakan skrip ditambah.

Pemindahan data

Sebelum memindahkan data, anda mesti melumpuhkan menyemak semua sekatan pada pangkalan data:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Pemindahan data dijalankan menggunakan Wizard Import Data Tugas -> Import Data pada SQL Server, di mana pangkalan data yang dicipta oleh skrip terletak:

  1. Tentukan tetapan sambungan kepada sumber (SQL Server 2016 pada mesin maya). Saya menggunakan Sumber Data Pelanggan Asli Pelayan SQL dan pengesahan SQL yang disebutkan di atas.
  2. Kami menentukan tetapan sambungan ke destinasi (SQL Server 2014 pada mesin hos).
  3. Seterusnya kami menyediakan pemetaan. Anda mesti memilih semua bukan baca sahaja objek (sebagai contoh, pandangan tidak perlu dipilih). Pilihan tambahan harus dipilih "Benarkan sisipan ke dalam lajur identiti", jika sedemikian digunakan.
    Amaran: jika anda cuba memilih beberapa jadual dan memberikan harta kepada mereka "Benarkan sisipan ke dalam lajur identiti" harta itu telah pun ditetapkan sebelum ini untuk sekurang-kurangnya satu daripada jadual yang dipilih, dialog akan menunjukkan bahawa harta itu telah ditetapkan untuk semua jadual yang dipilih. Fakta ini boleh mengelirukan dan membawa kepada ralat pemindahan.
  4. Mari mulakan pemindahan.
  5. Memulihkan semakan kekangan:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

Jika berlaku sebarang ralat, kami menyemak tetapan, memadam pangkalan data yang dibuat dengan ralat, mencipta semula daripada skrip, membuat pembetulan dan mengulangi pemindahan data.

Kesimpulan

Tugas ini agak jarang berlaku dan timbul hanya disebabkan oleh batasan di atas. Penyelesaian yang paling biasa adalah untuk menaik taraf SQL Server atau menyambung ke pelayan jauh jika seni bina aplikasi membenarkannya. Walau bagaimanapun, tiada siapa yang selamat daripada kod warisan dan tangan bengkok pembangunan yang tidak berkualiti. Saya harap anda tidak memerlukan arahan ini, dan jika anda memerlukannya, ia akan membantu anda menjimatkan banyak masa dan saraf. Terima kasih kerana memberi perhatian!

Senarai sumber yang digunakan

Sumber: www.habr.com