it-swarm.asia

SQL Server 2012 kompatibilitas mundur untuk cadangan dengan 2008

Saya memiliki sejumlah klien dengan SQL Server 2008 dan itulah yang saya miliki di server saya juga. Saya menggunakan file cadangan untuk mengirim bolak-balik database antara klien dan di kantor saya.

Saya telah membaca bahwa ketika Anda membuat cadangan dari SQL Server 2012 tidak ada cara untuk mengembalikannya ke contoh 2008. Saya berasumsi bahwa tingkat kompatibilitas akan mengatasi masalah ini, tetapi tidak. Karena itu, saya bingung bagaimana cara memutakhirkan. Selain memutakhirkan semua klien saya sekaligus, yang tidak mungkin, saya tidak bisa memikirkan cara bersih untuk melakukan ini.

Saya memiliki kebutuhan untuk mengirim basis data ke klien dan juga menerima basis data dari klien. Ini adalah peningkatan versi pertama saya di SQL Server, jadi saya baru untuk masalah ini. Ada ide tentang bagaimana untuk melanjutkan?

15
Jeff Stock

Ada dua hal yang terlibat di sini: nomor versi file, dan tingkat kompatibilitas. Ketika Anda melampirkan database ke versi utama yang lebih baru (seperti dari 2008 hingga 2008R2, atau 2008R2 hingga 2012) versi database diubah secara permanen, dan Anda tidak bisa melampirkan database itu ke versi yang lebih lama lagi.

Tingkat kompatibilitas untuk parsing old-school T-SQL usang yang digunakan untuk bekerja di versi SQL Server yang lebih lama. Itu tidak mengubah bagaimana data disimpan di disk.

Untuk memberikan database kepada seseorang di versi SQL Server yang lebih lama, Anda harus mengekspor data dan mengimpornya ke database lain. Alat-alat seperti Red Gate's Data Compare sangat membantu untuk ini.

17
Brent Ozar

Pengaturan tingkat kompatibilitas digunakan oleh SQL Server untuk menentukan bagaimana fitur-fitur baru tertentu harus ditangani. Dengan cara ini DB dapat dimigrasikan ke versi SQL yang lebih baru tanpa memiliki masalah dengan aplikasi. Tingkat kompatibilitas dapat diubah bolak-balik.

Sayangnya, file cadangan tidak kompatibel mundur. Salah satu metode adalah menggunakan impor/ekspor untuk memindahkan data Anda dari DB Anda saat ini ke instance versi lama Anda.

6
StanleyJohns

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.

3
lvmeijer

Saya telah menemukan BCP lebih efektif daripada beberapa alat untuk mendapatkan data ke versi SQL Server sebelumnya, dan untuk menarik data dari RDS. (Terima kasih @ivan_posdeev.)

Saya pertama kali menghasilkan skema dengan mengklik kanan pada database di SQL Server Management Studio, Tugas, Menghasilkan skrip. Centang semua objek, dalam objek lanjutan memastikan semua yang Anda butuhkan akan ditulis (statistik, indeks, dll.), Hapus centang "USE database" jika database tujuan Anda memiliki nama yang berbeda, atur kompatibilitas ke versi database tujuan Anda, dan hasilkan sebuah file yang membuat skema Anda. Buat database di tujuan Anda dan jalankan file ini di atasnya (menggunakan osql, sqlcmd atau GUI).

Untuk memindahkan data, jalankan kueri berikut dua kali pada basis data sumber , pertama-tama mengomentari kolom kedua untuk menghasilkan file batch untuk mengekstrak data, lalu komentar kolom pertama untuk menghasilkan file batch impor untuk dijalankan di tujuan Anda. (Anda perlu menambahkan server sumber dan tujuan Anda, nama contoh, direktori file keluaran dan input, nama pengguna dan kata sandi. Untuk menggunakan keamanan terintegrasi, ganti opsi -U Dan -P Hanya dengan -T.)

Ini mendukung Unicode, jika Anda tidak membutuhkannya, ubah sakelar -N Di kedua pernyataan menjadi -n.

SELECT 
   'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME  + ' out d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
--    'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME  + ' in d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME  + '.ERRORS.dat'
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
ORDER BY 
    s.Name, t.NAME

Setelah menjalankan periksa file bernama schema.tablename.ERRORS.dat - akan menyertakan baris yang gagal, kosongkan jika tidak ada.

referensi MSDN untuk BCP di sini , lebih ramah lihat opsi BCP di sini .

Saya telah menemukan ini sangat unggul untuk menghasilkan skrip, dan salah satu alat yang saya coba. Ini juga berjalan pada basis data RDS (yang tidak mengizinkan cadangan). File data yang dihasilkan berukuran 30% dari ukuran skrip SQL, menjalankannya membutuhkan waktu, dan jauh lebih andal. (Skrip yang dihasilkan oleh SQL Server untuk data skrip selalu tersandung, kadang-kadang dapat diprediksi kadang tidak, SQL yang dihasilkan tidak kompatibel dengan 2008R2 (misalnya, digunakan nvarchar(0), sering tidak lengkap tanpa alasan yang dapat dilihat, dll. BCP juga mereplikasi pelanggaran kendala apa pun, seperti integritas referensial.).

2
Chris