Lampirkan / lepaskan vs cadangan / pulihkan

14

Saya perlu mentransfer database (secara keseluruhan) ke server lain, untuk membuat database duplikat untuk mengatur lingkungan pengujian lain.

Saya punya dua pilihan:

  1. Buat cadangan penuh di server sumber / pulihkan di server tujuan;
  2. Lepaskan di server sumber / lampirkan di server tujuan.

Apa pro dan kontra dari dua solusi sesuai dengan persyaratan saya?

Saya menggunakan SQL Server 2008 Enterprise.

Paul White 9
sumber

Jawaban:

12

Backup / restore seharusnya menjadi metode pilihan Anda. Ini akan lebih cepat di sebagian besar situasi.

Anda dapat menggunakannya secara konsisten, juga untuk pengujian juga.

Lihat pertanyaan terkait ini juga, di mana cadangan / pengembalian vs detas / lampirkan disebutkan:

Migrasi SQL Server memulihkan cadangan vs menyalin data dan file log

Pastikan Anda menambahkan WITH COPY_ONLYopsi ke cadangan sehingga tidak memutus rantai cadangan rencana pemeliharaan yang ada.

gbn
sumber
SQL 2008 Enterprise memperkenalkan kompresi cadangan; kemungkinannya adalah cadangan yang dikompresi akan secara signifikan lebih kecil dari 100GB, dan dengan demikian lebih cepat untuk menghapus / menyalin / memuat daripada menyalin melalui MDF / LDF.
Thomas Rushton
6
  1. Melepaskan basis data akan membuatnya offline. Buat cadangan jika Anda membutuhkan database untuk tetap online saat Anda menyalinnya ke server lain.
  2. Memindahkan dan mengembalikan file cadangan (.bak) mungkin lebih sederhana / lebih mudah daripada memindahkan dan melampirkan banyak file mdf / ldf (seperti yang Anda lakukan jika Anda memisahkan database).
  3. Di atas kertas, pelepasan / pemasangan basis data mungkin lebih cepat secara teknis, tetapi dalam praktiknya, pencadangan / pemulihan cenderung lebih cepat dan lebih mudah. Ketika Anda melepaskan basis data, pertama-tama Anda harus membuat basis data asli offline (lepaskan semua orang dan semuanya), dan kemudian basis data tidak tersedia sampai Anda memasang kembali. Anda juga harus melacak semua file, sedangkan dengan cadangan semua file dikelompokkan.

Jika Anda memutuskan untuk mencadangkan / mengembalikan, gunakan opsi WITH COPY_ONLY selama pencadangan untuk memastikan bahwa rantai cadangan rencana pemeliharaan yang ada tidak rusak.

File .bak kompres dengan baik, jadi jika Anda memutuskan untuk membuat cadangan, mengompres cadangan sebelum memindahkannya mungkin menghemat waktu transfer.

Bob Black
sumber
4

Saya akan melakukan backup / restore karena meninggalkan database asli dalam keadaan operasional.

Terutama jika Anda melakukan konversi 'produksi untuk menguji', penting agar basis data produksi tetap online.

Backup / restore juga merupakan pilihan yang lebih aman : Apa yang terjadi jika file menjadi rusak di suatu tempat antara awal detach, copy, attach, dll? Setidaknya jika Anda melakukan pencadangan dan file menjadi rusak, Anda dapat memulai kembali. Jika itu terjadi dengan detach, database Anda hilang.

Juga, bagi saya (meskipun lebih merupakan perasaan daripada yang lain), backup / restore adalah "pekerjaan sehari-hari" sedangkan detach / attach adalah sesuatu yang Anda lakukan dalam keadaan luar biasa. Jangan tanya saya dari mana saya mendapat ide ini ;-)

Brimstedt
sumber
1

Saya selalu mengalami masalah dengan bagian "restore" dari backup / restore. Saya tidak bisa mengutip secara spesifik karena saya akhirnya menyerah dan telah mengirim / menyalin / melampirkan sejak itu.

Satu-satunya hal tentang detach adalah bahwa Anda HARUS HARUS memastikan Anda memastikan bahwa DBMS juga tidak akan menghapus database. Pernahkah ini terjadi, dan itu bukan pemandangan yang indah.

Ditipu
sumber
5
DBMS tidak akan menghapus database pada detach. Apa jenis toko Anda jika lepas menghapus file dan mengembalikan memiliki masalah?
gbn
@Will: sp_detach_db bukan DROP: 2 perintah terpisah dan tidak terkait yang harus dikeluarkan secara terpisah. Basis data yang terpisah tidak dapat DIHENTIKAN atau file dihapus melalui SQL. Basis data yang jatuh tidak dapat dipisahkan. Detach tidak memiliki opsi "hapus file" melalui kode atau melalui SSMS. Jadi, saya dapat membenarkan komentar pertama saya karena Anda harus memilih opsi untuk menghapus file pada DROP dengan sengaja. Not detach
gbn
1

Saya merekomendasikan a copy_only cadangan menggunakan metode ini dari shell DOS (sehingga Anda tidak mengganggu log transaksi) :

Lari dari C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Backup direktori:

backup.bat SQLDBNAME

Di mana backup.batberisi (line break ditambahkan untuk dibaca) :

sqlcmd.exe -U username -P xxxxxxx -S SQL-SERVERNAME 
    -Q "BACKUP DATABASE %1 TO DISK = '%1_COPYONLY.BAK' WITH COPY_ONLY,INIT;"
Djangofan
sumber