Downgrade dari SQL Server 2008 ke 2005

32

File database yang dibangun menggunakan SQL 2008 tidak kompatibel dengan 2005. Apakah ada cara lain?

Sevki
sumber
Jangan lupa juga mengekspor login server.
StanleyJohns
Apakah ini karena Anda berkembang pada 2008 tetapi server produksi Anda masih 2005? Solusi apa pun yang Anda berikan hanya akan menunda hal yang tak terhindarkan sementara pada saat yang sama membuat hidup Anda sengsara, karena Anda mungkin akan akhirnya melakukan penurunan peringkat ini secara teratur.
datagod

Jawaban:

16

Tidak perlu alat pihak ketiga. SQL Server 2008 Management Studio memberi kami alat yang sangat ampuh untuk mengonversi database karena mereka menambahkan opsi "Data skrip" ke panduan "Skrip basis data".

Cukup klik kanan DB di SQL2008 SSMS, dan pergi ke Tugas, lalu "Hasilkan Script"

Berjalan melalui wizard, pastikan untuk memilih "True" untuk "Script Data" di bawah tabel / opsi tampilan. Pilih semua objek, lalu jalankan skrip yang dibuatnya di server 2005. (Harap diingat bahwa skrip yang dibuat bisa sangat besar jika database asli sangat besar!)

Perhatikan bahwa Anda bahkan dapat menjalankan wizard terhadap server SQL2005 untuk menurunkan konversi database SQL2005 ke SQL2000 (tentu saja Anda memerlukan alat 2008 yang diinstal pada workstation Anda).

BradC
sumber
4
Jangan tersinggung, tetapi ini tidak bisa menjadi solusi jika databasenya besar. Cobalah teknik itu di meja mana saja dengan jutaan baris (dan anggap varchar (maks) sebagai tipe data dari satu kolom) dan jika Management Studio akan dapat membuka dan mengurai file ini Anda akan senang, tapi saya yakin itu tidak akan terbuka, itu akan crash. Maaf, tapi itu bukan solusi untuk masalah ini, kecuali jika db sangat kecil.
Marian
3
Tentu, jika db terlalu besar, skrip keluar hanya struktur database, lalu gunakan metode favorit Anda (SSIS, BCP, Import Wizard) untuk mendorong data.
BradC
Dalam SSMS 11.0 tampaknya tidak ada opsi untuk skrip data bersama dengan struktur. i.imgur.com/SGkG8oZ.png
jcollum
Ah OK sekarang di bawah "Jenis data ke skrip" tepat di atas Tabel / Lihat Pilihan
jcollum
16

Anda bisa BCP data dari satu contoh SQL Server ke contoh lain. Itu akan menjadi cara tercepat untuk menyalin data dari satu versi ke versi lain. Tergantung pada volume data, mungkin butuh waktu lama.

Jeremiah Peschka
sumber
2
Bergantung pada volume data, hampir selalu membutuhkan waktu yang lama
jcolebrand
Ya, tentu saja. Memindahkan database besar ke versi SQL Server yang lebih lama bukanlah tugas yang mudah.
mrdenny
2
Keuntungan BCP adalah lebih cepat daripada menggunakan data skrip. Ya, lambat, tetapi lebih cepat daripada banyak alternatif.
Jeremiah Peschka
15

Tidak ada cara langsung, yang saya tahu, untuk menurunkan versi DB dari format 2008 menjadi 2005 sayangnya.

Cara saya melakukan ini di masa lalu (sebenarnya dengan versi SQL server yang lebih lama, tetapi prosesnya akan sama) adalah:

  1. Kembalikan DB pada contoh SQL2008 jika belum dilakukan
  2. Membangun DB kosong dengan struktur yang benar (tabel, indeks, batasan, tampilan, procs, pemicu, ...) pada contoh SQL2005. Mudah-mudahan Anda dapat melakukan ini dari prosedur build yang ada dan / atau kode sumber, tetapi jika tidak, Anda dapat menggunakan SQL Server Manager untuk membuat skrip untuk semua yang ada di DB 2005 dan menjalankan hasilnya pada yang kosong pada contoh 2008.
  3. Pastikan kedua instance dapat saling melihat (mis. Tidak ada firewall yang memblokir koneksi jika instans berada pada mesin yang berbeda) dan menautkannya menggunakan sp_addlinkedserver .
  4. Salin semua data dari satu DB ke yang lain. Jika tidak ada batasan kunci asing dan masalah serupa di pemicu yang perlu dikhawatirkan, Anda bisa menautkan DB bersama-sama dan mengarahkan kursor ke daftar tabel (memilihnya dari sys.objects) dan menjalankan
    INSERT destinationserver.destinationdb.schema.table SELECT * FROM sourcedb.schema.table
    (atau INSERT schema.table SELECT * FROM sourceserver.sourcedb.schema.tablejika Anda telah menautkan instance seperti itu di sekitar )
    untuk setiap tabel. Jika Anda memang memiliki kendala dan pemicu konsistensi antar-tabel, tentu saja Anda harus menjadi sedikit lebih pintar tentang pemesanan operasi ini, terutama jika Anda memiliki kendala siklik seperti tabel dengan kendala berdasarkan pada dirinya sendiri (satu hierarki memegang satu data, sebagai contoh yang mungkin).

Mungkin lebih efisien untuk hanya menyalin data terlebih dahulu dan menambahkan semua struktur lainnya (indeks, procs, pemicu, ...) setelah langkah 3. Ini menghindari masalah urutan penyisipan baris yang disebabkan oleh kendala dan pemicu, dan membangun indeks di akhir seharusnya secara teori lebih cepat daripada membangunnya karena semua data ditambahkan - meskipun jika Anda memiliki indeks berkerumun di tabel Anda buat ini sebelum menambahkan data karena mereka tidak akan lebih cepat untuk dibuat setelah fakta.

Tentu saja ini semua mengasumsikan bahwa tidak ada objek Anda menggunakan fitur spesifik SQL 2008 - jika mereka melakukannya, Anda diharapkan akan menemukan dan memperbaiki hal-hal seperti itu ketika ada kesalahan saat membangun kembali skema. Jika salah satu kode Anda bergantung pada perilaku resmi yang tidak terdefinisi yang kebetulan bervariasi antara versi SQL Server, Anda mungkin memiliki bug yang jauh lebih halus dan sulit dipahami untuk diburu dan disetrika kemudian.

David Spillett
sumber
1
-1 karena ini sebenarnya tidak efisien (pilih * ke dari) dibandingkan dengan suka BCP.
jcolebrand
@ jcolebrand cukup adil dalam hal efisiensi. Padahal tekniknya adalah salah satu yang sudah saya jalani.
David Spillett
itu adalah sistem yang adil, saya hanya berpikir saya akan memasukkan itu karena pembaca masa depan di sini. Anda memiliki upvotes saat ini untuk tidak menjadi masalah. ;)
jcolebrand
1

Pertama-tama Anda harus skrip database dan pastikan pada versi yang Anda tentukan jenis yang ingin Anda turunkan peringkatnya. Dan untuk menyalin data dari versi yang lebih tinggi ke versi yang lebih rendah, membandingkan SQL Data akan membantu Anda.

Semoga berhasil!

Mbongeni
sumber