Memindahkan basis data dari SQL Server 2012 ke 2008

29

Saya memiliki database pada contoh SQL Sever 2012 yang ingin saya salin ke server 2008. Server 2008 tidak dapat memulihkan cadangan yang dibuat oleh server 2012 (saya telah mencoba).

Saya tidak dapat menemukan opsi apa pun di 2012 untuk membuat cadangan 2008 yang kompatibel. Apakah saya melewatkan sesuatu?

Apakah ada cara mudah untuk mengekspor skema dan data ke format versi-agnostik yang kemudian dapat saya impor ke 2008?

Basis data tidak menggunakan fitur spesifik 2012. Ini berisi tabel, data, dan prosedur tersimpan.

Inilah yang saya coba sejauh ini

Saya mencoba TugasHasilkan Skrip di server 2012, dan saya dapat menghasilkan skema (termasuk prosedur tersimpan) sebagai skrip SQL. Ini tidak termasuk data apa pun.

Setelah membuat skema itu di mesin 2008 saya, saya bisa membuka panduan "Ekspor Data" pada mesin 2012, dan setelah mengkonfigurasi 2012 sebagai mesin sumber dan 2008 sebagai mesin target, saya disajikan dengan daftar tabel yang saya bisa menyalin. Saya memilih semua tabel saya (300+), dan mengklik wizard. Sayangnya ia menghabiskan waktu untuk menghasilkan skripnya, kemudian gagal dengan kesalahan seperti "Gagal memasukkan ke dalam kolom baca-saja 'FOO_ID'".

Saya juga mencoba "Copy Database Wizard", yang diklaim dapat menyalin "dari 2000 atau lebih tinggi hingga 2005 atau lebih baru". Ini memiliki dua mode:

  1. "Lepaskan dan Lampirkan", yang gagal karena kesalahan:

    Message: Index was outside the bounds of the array.
    StackTrace:    at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value)
    ...
    at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName()
    
  2. Metode objek manajemen SQL yang gagal dengan kesalahan

    Tidak dapat membaca properti IsFileStream. Properti ini tidak tersedia di SQL Server 7.0. "

Kaya
sumber
Apakah Anda dapat mengekspor langsung? Saya tidak tahu seberapa besar DB Anda, tapi ini yang akan saya lakukan ketika bekerja dengan database yang lebih kecil.
Dave
2
Tidak ada versi SQL Server yang lebih lama yang dapat memulihkan cadangan dari versi yang lebih baru. Ini dengan desain. Gunakan fitur Ekspor,
4
"Mencoba mencari tahu mengapa orang waras akan bermigrasi ke belakang." - Saya memiliki server produksi yang menjalankan 2012, tetapi mesin dev saya hanya memiliki 2008. Saya ingin salinan DB lokal untuk membantu pengembangan, tetapi saya tidak ingin menginstal 2012 pada mesin dev saya karena saya belum ruang kosong yang tersisa, dan tidak ingin menghabiskan berjam-jam menginstalnya. (Jadi, saya menghabiskan waktu berjam-jam untuk mencoba bermigrasi ke belakang .... tapi itu hanya saya.)
Rich
1
Anda hampir sampai. Bagian Ekspor yang Anda masuki memiliki opsi untuk memasukkan data serta skema.
1
Hanya ingin menambahkan untuk Ramhound: Saya untuk satu upgrade SQL 2008 R2 ke SQL 2012 pada lingkungan Dev saya dan kemudian, setelah saya mengubah banyak skema dan data dalam contoh saya yang ditingkatkan, menyadari VS 2010 tidak dapat membandingkan skema atau data dengan SQL 2012. SSDT untuk VS 2010 dan VS 2012 dapat membandingkan skema dengan SQL 2012 tetapi tidak kompatibel dengan proyek database VS 2010 asli, dan tidak dapat membandingkan data. Singkatnya, saya lebih suka kembali ke SQL 2008 R2 dan menunggu sampai keputusan dibuat perusahaan bijaksana untuk maju ke 2012. Tapi saya ingin menyimpan skema / data baru saya. AFAIK Aku waras.
GFK

Jawaban:

40

Klik kanan pada database di SQL Management Studio 2012, dan pilih "Tugas -> Buat Skrip". Klik melewati layar pembuka, pilih "skrip seluruh basis data dan semua objek basis data". Pada halaman "tentukan bagaimana skrip harus disimpan", klik "lanjut". Di bawah "Umum" di halaman properti munculan, ubah "Jenis data ke skrip" dari "Skema saja" menjadi "Skema dan data", dan ubah "Skrip untuk Versi Server" dari "2012" menjadi "2008".

Saya kemudian harus menemukan beberapa cara untuk mengedit awal dari file SQL yang besar ini, untuk mengubah bagaimana database akan dibuat - lihat q ini: https://stackoverflow.com/questions/102829/best-free-text-editor -mendukung lebih dari 4gb file

Dan akhirnya saya harus menemukan beberapa cara untuk menjalankan skrip SQL, yang terlalu besar untuk dibuka di SQL Management Studio - lihat q ini: https://stackoverflow.com/questions/431913/how-do-you-run- a-300mb-ms-sql-sql-file

Kaya
sumber
apa yang Anda tweak pada awal file?
JonoRR
1
Saya tidak ingat persis, maaf. Hal spesifik aplikasi, saya pikir. Mungkin nama database atau semacamnya. Saya pikir saya akan menambahkannya di sini jika relevan dengan orang-orang dengan masalah yang sama.
Kaya
3
@JonoRR Anda kemungkinan besar ingin mengedit pernyataan CREATE DATABASE dan mengatur jalur datafile ke apa pun yang masuk akal di server tujuan.
Igby Largeman
12

Untuk migrasi SQL, gunakan Wisaya Migrasi Database SQL sumber terbuka dan gratis.

Saya memiliki database 5GB dengan pasangan ~ 10 juta catatan dan mencoba rute melalui Generate Script dan kemudian menjalankannya dengan sqlcmd.exe. Pertama-tama, skrip yang dihasilkan tidak selalu berfungsi dengan benar. Kedua, sqlcmd.exe dapat gagal pada file besar juga, mengeluh tentang memori yang tersedia. osql.exe berfungsi, tetapi hanya butuh waktu lama (dan memiliki argumen baris perintah yang sama).

Lalu saya menemukan alat yang luar biasa untuk memigrasi SQL Server ke database SQL Azure. Ini berfungsi untuk SQL Server ke SQL Server juga, misalnya jika Anda ingin memigrasi database SQL 2012 ke 2008 R2. Ini menggunakan bcp.exe, yang menggunakan salinan massal. Ada versi GUI dan baris perintah (Batch) yang tersedia dan open source. Lihat http://sqlazuremw.codeplex.com/ . Dalam kasus saya, operasi memakan waktu 16 menit.

Di layar lanjutan, Anda dapat memilih bahwa target Anda adalah SQL Server, bukan SQL Azure.

lvmeijer
sumber
1
Di mana Anda mengatur 2008 R2 di wisaya ini?
JonoRR
Tip luar biasa, saya telah memulihkan database dari Express 2012 ke Web 2008. Sangat mudah.
rkawano
Dapat mengonfirmasi itu berfungsi seperti yang diiklankan. Melakukan 2014-> 2012, lintas domain, SQL-server lokal. Bagaimana alat ini menghindari pencarian saya begitu lama! Luar biasa bahkan untuk penggunaan non-biru.
Gomibushi
3

Saya baru mengenal SQL, tetapi saya berhasil bermigrasi dari 2012 hingga 2008. Untuk melakukannya saya menggunakan utilitas impor dan ekspor SQL. Saya memilih server SQL 2012 dan basis data yang ingin saya migrasi dan akhirnya server 2008 dan membuat basis data baru sebagai basis data tujuan saya. Itu berhasil.

Fernando
sumber
2

Coba alat APEXSQL . Mereka memiliki alat yang akan skrip database dan skrip data juga.

Paul
sumber
"from $ 299" - apakah ada alternatif gratis?
Rich
1

Setelah membuat skema itu di mesin 2008 saya, saya bisa membuka panduan "Ekspor Data" pada mesin 2012, dan setelah mengkonfigurasi 2012 sebagai mesin sumber dan 2008 sebagai mesin target, saya disajikan dengan daftar tabel yang saya bisa menyalin. Saya memilih semua tabel saya (300+), dan mengklik wizard. Sayangnya ia menghabiskan waktu untuk menghasilkan skripnya, kemudian gagal dengan kesalahan seperti "Gagal memasukkan ke dalam kolom baca-saja 'FOO_ID'".

Masalahnya adalah ia tidak dapat menyisipkan kolom ID, jadi:

  1. Pilih semua tabel dengan mencentangnya
  2. Pilih semua tabel (cara untuk melakukan ini adalah klik yang pertama dan tahan shift dan klik pada tabel terakhir)
  3. Klik "Edit Pemetaan" - Anda dapat melihatnya tepat di atas tombol selanjutnya dan di sebelah pratinjau.
  4. Anda akan mendapatkan jendela, centang pada "Aktifkan penyisipan identitas" dan kemudian klik berikutnya dan lanjutkan, ini seharusnya bekerja. Itu berhasil untuk saya.
Jaimee Jose
sumber
1

Saya mengikuti solusi Rich https://superuser.com/a/469597/312310 di atas dan itu berhasil! Terima kasih - saya belum bisa memilih di sini!

Langkah-langkah tambahan yang harus saya lakukan untuk membuatnya bekerja adalah:

  • Ubah nama file logis dan pastikan jalurnya benar. Saya juga harus mengubah nama log yang dihasilkan, kalau tidak mencoba untuk menimpa file mdf dengan log dan kemudian melemparkan kesalahan ini https://stackoverflow.com/questions/7534664/sql-server-script-error-database-is- Telah digunakan

    BUAT DATABASE [xxxxx] TENTANG PRIMER (NAMA = xxxxx ', FILENAME = N'C: \ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx.mdf', SIZE = 14400KB, MAXSIZE = TIDAK DILIMITED, FILEGROWTH = 1024KB) LOG ON (NAME = N'xxxxxldf ', FILENAME = N'C: \ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf', SIZE = 18560KB, MAXSIZE = 2048GB, FILEGROWTH = 10 %) GO

  • Saya harus mengomentari bagian yang dibuat dan menambahkan izin pengguna secara manual sesudahnya

    USE [xxxxx]
    GO
    /****** Object:  User [xxxxx]    Script Date: 30/11/2014 12:44:07 ******/
    CREATE USER [xxxxx] FOR LOGIN [xxxxx] WITH DEFAULT_SCHEMA=[dbo]
    GO
    sys.sp_addrolemember @rolename = N'db_owner', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'Umbraco'
    GO
    

Jalankan itu, dan lihatlah sekarang saya dapat mengembalikan database Umbraco 7.1.2 saya yang baru ke server web saya yang hanya memiliki SQL Server 2008 R2!

ladygargar
sumber
0

Lihatlah xSQL Schema Compare dan xSQL Data Compare . Pertama-tama Anda dapat menyinkronkan skema dengan membandingkan skema dan kemudian menyalin data.

Penafian: Saya berafiliasi dengan xSQL.

Endi Zhupani
sumber