Pemulihan cadangan basis data SQL Server pada versi yang lebih rendah

185

Bagaimana mengembalikan file cadangan database SQL Server versi yang lebih tinggi ke versi yang lebih rendah SQL Server?

Menggunakan SQL Server 2008 R2 (10.50.1600) , saya membuat file cadangan dan sekarang saya ingin mengembalikannya di server saya SQL Server 2008 (10.00.1600) .

Ketika saya mencoba mengembalikan cadangan ke SQL Server 2008 itu memberikan kesalahan yaitu Restore Failedkarena:

Basis data didukung pada server yang menjalankan versi 10.50.1600. Versi itu tidak kompatibel dengan server ini, yang menjalankan versi 10.00.1600.

Bagaimana cara mengembalikan file cadangan di server ini?

Oreo
sumber
2
Anda tidak dapat melakukan ini - itu tidak mungkin. SQL Server tidak mengizinkan * menurunkan versi "database dari versi yang lebih tinggi ke versi yang lebih rendah.
marc_s
18
Microsoft tahu segalanya tentang SQL server (karena mereka membuatnya) dan belum memindahkan data antara 2 versi tidak mungkin. Saya tidak mengerti mengapa semacam mode kompatibilitas tidak tersedia dalam ekspor. Seberapa sulit?
dvdmn
1
@dvdmn sama sulitnya dengan episode Top Gear mana pun yang mereka katakan - tipe berbeda, pernyataan berbeda, tata letak blok berbeda. Memindahkan data antar database sangat mudah, tidak peduli versi apa pun yang terlibat. Penurunan peringkat tidak .
Panagiotis Kanavos
2
@PanagiotisKanavos Saya tidak setuju, di mysql Anda dapat mengekspor db sebagai perintah sql dan Anda dapat mengembalikannya di versi mysql (turun atau naik). Ya, Anda juga dapat mengekspor sql db sebagai skrip tetapi mengembalikannya tidak mudah jika Anda memiliki beberapa fungsi / prosedur tersimpan yang saling bergantung. Ini pada dasarnya tidak berguna / solusi.
dvdmn
3
@dvdmn mengekspor skrip database sama sekali berbeda dari cadangan. Saya menyadari beberapa produk tidak menawarkan fungsi backup / restore atau lebih buruk, mengacaukan dua konsep. Ini sering terjadi karena alasan historis: kekurangan cadangan di masa lalu, beberapa produk yang disebut ekspor / skrip dengan nama itu. Sekarang mereka melakukannya , mereka harus terus memecahkan konflik istilah, dengan berbicara tentang cadangan fisik dan logis, kemudian terlibat ketika mereka berbicara tentang scripting
Panagiotis Kanavos

Jawaban:

78

Tidak, tidak mungkin untuk menurunkan versi database. 10.50.1600 adalah versi SQL Server 2008 R2 . Sama sekali tidak ada cara Anda dapat mengembalikan atau melampirkan database ini ke contoh SQL Server 2008 yang Anda coba pulihkan pada (10.00.1600 adalah SQL Server 2008). Satu-satunya pilihan Anda adalah:

  • memutakhirkan contoh ini ke SQL Server 2008 R2 atau
  • memulihkan cadangan yang Anda miliki pada contoh SQL Server 2008 R2, ekspor semua data dan impor pada database SQL Server 2008.
Remus Rusanu
sumber
saya tidak dapat memutakhirkan server langsung klien karena pembatasan izin. dan ukuran basis data saya lebih dari 2.5GB sehingga saya tidak dapat membuat skrip data karena kesalahan pengecualian memori.
9
@Gaurav Jangan skrip data - sebaliknya, skrip seluruh database (tabel, procs, pemicu, kendala, dll) tanpa data, buat database baru, lalu klik kanan database sumber, buka "Alat", lalu "Ekspor Data" untuk mentransfer isi tabel ke database Anda.
Jim McLeod
17
Saya sangat curiga pada jawaban tepuk "tidak ada cara yang mungkin" - itu berarti Anda belum menemukan jalan. Mungkin ada banyak alasan mengapa Anda ingin melakukan ini, jadi ini bukan jawaban yang membantu.
Jay Imerman
6
Saya tidak setuju, @Jay, kadang-kadang "Anda tidak bisa" adalah jawaban yang sempurna, meskipun lebih bermanfaat untuk menawarkan solusi jika tersedia.
Russell Fox
1
@Zhang jika Anda memiliki pertanyaan, tanyakan sebagai pertanyaan, bukan sebagai komentar.
Remus Rusanu
83

Anda dapat menggunakan fungsionalitas yang disebut Aplikasi Data-Tier Ekspor yang menghasilkan .bacpacfile yang terdiri dari skema dan data basis data.

Di server tujuan, Anda dapat menggunakan opsi Impor Data-Tier Aplikasi yang membuat dan mengisi basis data baru dari .bacpacfile yang dibuat sebelumnya

Jika Anda hanya ingin mentransfer skema basis data, Anda dapat menggunakan Ekstrak Aplikasi Data-Tier untuk membuat file dan Menyebarkan Aplikasi Data-Tier untuk menggunakan skema database yang dibuat.

Saya sudah mencoba proses ini pada berbagai versi SQL Server dari SQL 2014 ke SQL 2012 dan dari SQL 2014 ke SQL 2008R2 dan bekerja dengan baik.

veljasije
sumber
8
Ini adalah jawaban yang patut mendapat perhatian lebih. Ini sebenarnya hanya berfungsi untuk sebagian besar kasus. Jika Anda memiliki pengguna SQL di sana yang menjadi yatim, operasi Ekspor akan gagal. Anda selalu dapat menghapus / menambahkan bit-bit itu secara manual ke versi SQL yang sebaliknya.
Dokter Blue
3
Saya baru saja mencoba ini, untuk membuat DB yang dibuat di MSSQLEX2014 (V12) di MSSQLEX2012 (V11). Saya hanya mendapatkan "Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider tidak valid" kesalahan dengan tidak ada cara untuk mengubahnya.
Craig
5
Mengimpor dari SQL Server 2014 hingga 2012 menggunakan .bakpac DOES berfungsi, tetapi membutuhkan versi SSMS yang benar. Sebagai contoh, saya menggunakan SSMS 2016 CTP3 dan bekerja dengan sempurna. Itu TIDAK bekerja untuk saya menggunakan SSMS 2012. Saya belum menguji SSMS 2014.
Greg Gum
1
Adakah yang tahu jika ada yang bisa skrip prosedur ini dalam T-SQL? PEMBARUAN (menjawab sendiri setelah sedikit googling): Anda dapat mengotomatiskan ini melalui sqlpackage.exebaris perintah. Google untuk lebih.
Alex
1
Ini adalah satu-satunya solusi yang berhasil bagi saya untuk menurunkan cukup besar / rumit SQL2017 ke SQL2016. Performanya juga sangat bagus.
Keith Blows
35

Belum tentu bekerja

Akan bekerja

  • Pembuatan skrip - Tugas -> Buat Skrip . Pastikan Anda menetapkan target versi SQL Server yang diinginkan pada halaman Set Scripting Options -> Advanced . Anda juga dapat memilih di sana apakah akan menyalin skema, data, atau keduanya. Perhatikan bahwa dalam skrip yang dibuat, Anda mungkin perlu mengubah folder DATA untuk file mdf / ldf jika berpindah dari non-express ke express atau sebaliknya.

  • Layanan Penerbitan Basis Data Microsoft SQL Server - dilengkapi dengan SQL Server 2005 dan di atasnya, saya kira. Unduh versi terbaru dari sini . Prasyarat: sqlncli.msi/ sqlncli_x64.msi/ sqlncli_ia64.msi, SQLServer2005_XMO.msi/ SQLServer2005_XMO_x64.msi/ SQLServer2005_XMO_ia64.msi(unduh di sini ).

Ohad Schneider
sumber
7
Pembuatan skrip tidak dapat diandalkan untuk basis data substansial, hindari jika memungkinkan.
Chris
Kedua tautan di bawah adalah 404.
Sнаđошƒаӽ
29

Berikut adalah 2 sen saya pada opsi yang berbeda untuk menyelesaikan ini:

Alat pihak ketiga : Mungkin cara termudah untuk menyelesaikan pekerjaan adalah membuat database kosong pada versi yang lebih rendah dan kemudian menggunakan alat pihak ketiga untuk membaca cadangan dan menyinkronkan database yang baru dibuat dengan cadangan.

Gerbang merah adalah salah satu yang paling populer tetapi ada banyak lainnya seperti ApexSQL Diff , ApexSQL Data Diff , Adept SQL , Idera .... Semua ini adalah alat premium tetapi Anda bisa menyelesaikan pekerjaan dalam mode uji coba;)

Membuat skrip : seperti yang telah disebutkan sebelumnya, Anda selalu dapat skrip struktur dan data menggunakan SSMS tetapi Anda harus mempertimbangkan urutan eksekusi. Secara default, skrip objek tidak dipesan dengan benar dan Anda harus mengurus dependensi. Ini mungkin menjadi masalah jika database besar dan memiliki banyak objek.

Impor dan ekspor panduan : Ini bukan solusi ideal karena tidak akan mengembalikan semua objek tetapi hanya tabel data tetapi Anda dapat mempertimbangkannya untuk perbaikan cepat dan kotor saat dibutuhkan.

Ken Williams
sumber
1
Red Gate Sql Clone tidak mendukung kloning antara berbagai versi SQL server, melaporkan kesalahan yang persis sama yang saya dapatkan ketika mencoba melakukan ini secara manual.
DarkDeny
29

Anda tidak dapat memulihkan basis data (atau melampirkan) yang dibuat di versi atas ke versi yang lebih rendah. Satu-satunya cara adalah membuat skrip untuk semua objek dan menggunakan skrip untuk menghasilkan basis data.

masukkan deskripsi gambar di sini

pilih "Skema dan Data" - jika Anda ingin membawa kedua hal tersebut ke file skrip Cadangan
pilih Skema Saja - jika hanya diperlukan skema.

masukkan deskripsi gambar di sini

Ya, sekarang Anda telah selesai dengan Skrip Buat dengan Skema dan Data dari Basis Data.

Smit Patel
sumber
16

Cara lain untuk melakukan ini adalah dengan menggunakan fitur "Copy Database":

Temukan dengan mengklik kanan sumber database> "Tugas"> "Salin Basis Data".

Anda bisa menyalin database ke versi yang lebih rendah dari SQL Server Instance. Ini bekerja untuk saya dari SQL Server 2008 R2 (SP1) - 10.50.2789.0 ke Microsoft SQL Server 2008 (SP2) - 10.0.3798.0

Joy Walker
sumber
3
Perhatikan bahwa ini tidak akan berfungsi jika targetnya adalah SQL server express "Server tujuan tidak boleh berupa SQL Server 2005 atau yang lebih baru Express." social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread/…
Ohad Schneider
2
Juga tidak mungkin untuk menyalin database dari SQL Server 2012 ke SQL Server 2008 dengan cara ini.
Twinkles
1
Copy database adalah operasi Detach / Attach
Panagiotis Kanavos
1
Terima kasih atas petunjuk ini! Itu sangat membantu saya. Saya menyalin data dari SQL 2008 R2 ke SQL 2008.
dns_nx
8

Anda bisa mencoba ini.

  1. Buat Database ke SQL Server 2008.
  2. Menggunakan Impor Data fitur impor data dari SQL Server R2 (atau versi yang lebih tinggi).
  3. gunakan "RedGate SQLCompare" untuk menyinkronkan skrip.
Ishtiyaq Khan
sumber
6

Pergi ke Tugas-> Buat Skrip ...

Di Tingkat Lanjut di "Jenis data untuk skrip" pilih "Schema and data"dan coba jalankan skrip ini dalam versi yang lebih rendah.

mathewsun
sumber
5
Ini adalah solusi yang sangat baik tetapi bekerja sangat buruk dengan database yang lebih besar.
veljasije
5

Ini tidak cantik, tetapi ini adalah bagaimana saya melakukannya memberikan Anda opsi ini diinstal pada SQL 2008 R2 Anda instal ..

1) Klik kanan database di SQL Server 2008 R2 "Tugas" .. "Hasilkan skrip" di wizard, pilih seluruh database dan objek di langkah pertama. Pada langkah "Tetapkan Opsi Scripting" Anda akan melihat tombol "Advanced", pilih ini dan pastikan Anda memilih "Script for Server Version" = SQL Server 2008 "bukan versi R2. Ini adalah langkah penting, karena" impor data " dengan sendirinya tidak membawa semua kunci utama, konstanta dan benda lain seperti prosedur tersimpan. "

2) Jalankan skrip SQL yang dihasilkan pada instal baru atau instance database SQL Express atau SQL Server 2008 menggunakan jendela kueri atau buka skrip .sql yang disimpan dan jalankan dan Anda akan melihat database baru.

3) Sekarang klik kanan pada database baru dan pilih "Tugas" .. "Impor Data .." pilih sumber sebagai basis data R2 dan tujuan sebagai basis data baru. "Salin data dari satu atau beberapa tabel atau tampilan", pilih kotak centang atas untuk memilih semua tabel dan kemudian langkah selanjutnya, jalankan paket dan Anda harus memiliki semuanya pada versi yang lebih lama. Ini harus bekerja untuk kembali ke versi 2005 juga. Semoga ini bisa membantu seseorang.

motogeek
sumber
hai @ motogeek, saya memiliki masalah yang sama, tetapi saya memiliki R2 pada server produksi dan 2008 pada lokal, dalam hal ini saya tidak dapat menggunakan data impor dan ekspor. apa yang akan menjadi solusi ideal untuk ini?
Abbas
2

Anda bisa menggunakan BCP masuk dan keluar untuk tabel kecil.

Perintah BCP OUT: -

BCP "SELECT *  FROM [Dinesh].[dbo].[Invoices]" QUERYOUT C:\av\Invoices1.txt -S MC0XENTC -T -c -r c:\error.csv

Perintah BCP IN: - Membuat struktur tabel untuk Invoicescopy1.

BCP [Dinesh].[dbo].[Invoicescopy1] IN C:\av\Invoices.txt -S MC0XENTC -T -c
arnav
sumber
0

Saya menghargai ini adalah posting lama, tetapi mungkin bermanfaat bagi orang-orang untuk mengetahui bahwa Azure Migration Wizard (tersedia di Codeplex - tidak dapat ditautkan karena Codeplex saat ini sedang saya ketik ini) akan melakukan ini dengan mudah.

tony.wiredin
sumber
Alat itu telah diganti dengan Asisten Migrasi Data SQL Server. Lihat: stackoverflow.com/questions/46517060/…
ahwm
0

Anda harus menggunakan penyihir Impor / Ekspor di SSMS untuk memigrasi semuanya

Tidak ada "downgrade" mungkin menggunakan backup / restore atau lepas / pasang. Maka yang harus Anda lakukan adalah:

  1. Cadangkan database dari server yang menjalankan versi SSMS / SQL baru.
  2. Impor data dari file .bak yang dihasilkan, dengan memperluas menu "Tugas" (setelah mengklik kanan basis data target) dan memilih opsi "Impor Data".
tonderaimuchada
sumber