Perbedaan utama antara cadangan Lengkap dan Salin-saja adalah apakah LSN (Nomor Urutan Log) atau tidak, dan secara khusus DatabaseBackupLSN
diperbarui.
Ketika Anda mengambil cadangan penuh, DatabaseBackupLSN
itu diperbarui. Setelah mengambil cadangan lengkap, jika Anda mengambil cadangan Diferensial, cadangan tersebut memiliki cadangan DatabaseBackupLSN
yang sesuai dengan cadangan Penuh, dan oleh karena itu SQL dapat menghubungkan keduanya bersama-sama (mis. Ia mengetahui dari LSN tersebut bahwa diff mengikuti penuh).
Masalahnya muncul ketika Anda memiliki cadangan dijadwalkan berjalan, sehingga Anda memiliki cadangan penuh awal, dan kemudian urutan Diferensial. Jika Anda secara manual mengambil cadangan Lengkap, itu akan memperbarui LSN, dan kemudian sejak saat itu dan seterusnya setiap cadangan Diferensial yang Anda ambil melalui cadangan terjadwal akan merujuk bahwa LSN baru bukan yang asli. Jika perlu mengembalikan, Anda dapat memulihkan cadangan Lengkap Anda yang terjadwal, tetapi ketika Anda mencoba mengembalikan salah satu cadangan Diferensial yang diambil setelah pekerjaan manual Anda akan menemukannya akan gagal karena LSN tidak lagi cocok.
Dengan cadangan khusus Salin, ia tidak menyentuh DatabaseBackupLSN
, dan karenanya tidak memutus rantai cadangan.
Ada deskripsi yang baik tentang masalah ini, dan juga mengapa begitu banyak orang salah paham dalam Memutus Rantai Cadangan - REDUX (Atau Eating Crow) oleh Michael K. Campbell, yang mencakup panduan visual yang bagus seperti ini:
Untuk penjelasan yang baik tentang empat LSN yang berbeda dan bagaimana mereka digunakan, lihat Memahami Nomor Urutan Log SQL Server untuk Cadangan oleh Simon Liew.
Cara untuk menghindari masalah ini adalah dengan tidak memiliki lebih dari satu hal melakukan pencadangan standar dari suatu basis data. Setiap cadangan adhoc atau sekunder harus dilakukan dengan opsi hanya salin, lihat Salin Hanya Cadangan (SQL Server) untuk rincian lengkap, tetapi pada dasarnya Anda menggunakan opsi "Salin Cadangan Saja" di SSMS, melalui T-SQL tentukan WITH COPY_ONLY
dalam perintah , atau dengan PowerShell gunakan -CopyOnly
parameter.