Perbedaan antara Full backup dan Full-only full backup


17

Saya melihat di utas SQL Server Central Apakah cadangan lengkap memotong log? cadangan penuh itu tidak memotong log:

Tidak. Cadangan Penuh atau Diferensial tidak memotong log transaksi. - Lynn Pettis
Tidak - cadangan lengkap tidak memotong log. - Chad Crawford

Jadi apa perbedaan antara cadangan penuh dan hanya salinan lengkap?

Untuk cadangan log ada cadangan hanya salinan yang mencegah rantai log dari putus tanpa memotong log. Jadi apa itu cadangan lengkap hanya salinan?

Jawaban:


14

Paling tidak Anda perlu mempertimbangkan cadangan diferensial. Kecuali hanya salinan pada bagian penuh yang digunakan, cadangan diff Anda berikutnya akan dimatikan. Cadangan Khusus Salin :

Cadangan lengkap hanya salin (semua model pemulihan) Cadangan hanya salin tidak dapat berfungsi sebagai basis diferensial atau cadangan diferensial dan tidak memengaruhi basis diferensial.

Satu-satunya perbedaan antara salinan lengkap dan salinan penuh adalah salinan lengkap tidak memutus rantai diferensial. Tak satu pun dari mereka memutus rantai log karena tak satu pun dari mereka memotong file log.


24

Perbedaan utama antara cadangan Lengkap dan Salin-saja adalah apakah LSN (Nomor Urutan Log) atau tidak, dan secara khusus DatabaseBackupLSNdiperbarui.

Ketika Anda mengambil cadangan penuh, DatabaseBackupLSNitu diperbarui. Setelah mengambil cadangan lengkap, jika Anda mengambil cadangan Diferensial, cadangan tersebut memiliki cadangan DatabaseBackupLSNyang 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:

Gambar SQLmag - Cadangan Penuh v Salinan _ Hanya backup

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_ONLYdalam perintah , atau dengan PowerShell gunakan -CopyOnlyparameter.


1
Untuk menambahkan: Praktis SALINAN HANYA memungkinkan membuat cadangan untuk tujuan non-cadangan. Untuk seorang pelanggan, pencadangan dilakukan secara otomatis ke sistem pencadangan perusahaan - mendapatkan pengembalian PAINFULL, terutama membawanya ke lingkungan yang berbeda (dokumen, lakukan siang hari). COPY ONLY memungkinkan saya untuk membuat salinan TANPA mengganggu cadangan yang dikelola oleh cadangan perusahaan dan kemudian mengembalikannya ke lingkungan pengujian.
TomTom

12

Anggaplah kita memiliki database dengan cadangan terjadwal. Cadangan lengkap berjalan sekali dalam 24 jam pada pukul 00:00, kami juga memiliki cadangan diferensial yang berjalan setiap 6 jam, dan cadangan log transaksi yang berjalan setiap jam. Jadi, bagaimana jika kita perlu membuat cadangan penuh ekstra di tengah hari, untuk memulihkan server lain? Apa yang akan kita lakukan dalam kasus ini. Tentu saja, kita dapat membuat cadangan penuh.

BACKUP DATABASE Test TO DISK = 'C:/Test.bak'

Tetapi ketika Anda membuat cadangan dari database, ada beberapa perubahan yang mempengaruhi bagaimana cadangan berikut akan dipulihkan (cadangan diferensial dan cadangan log transaksi keduanya memengaruhi bagaimana operasi pemulihan akan). Dalam hal ini, semua cadangan diferensial berikut akan bergantung pada cadangan lengkap terakhir. Jika cadangan penuh terakhir hilang, pemulihan database tidak mungkin dilakukan.masukkan deskripsi gambar di sini

Tetapi bagaimana kita bisa membuat cadangan yang tidak akan memengaruhi proses pencadangan atau pemulihan berikut untuk database itu. Di sinilah cadangan hanya salinan diterapkan.

BACKUP DATABASE Test TO DISK = 'C:\Test.bak' WITH COPY_ONLY

masukkan deskripsi gambar di sini


2

Ketika Anda memiliki cadangan lengkap dan satu set cadangan file log, rantai log dipertahankan menggunakan LSN (Nomor Urutan Log). Jika Anda ingin melakukan pencadangan tanpa memutus rantai log, maka lakukan pencadangan salinan saja.

Jika Anda tidak melakukan cadangan hanya salinan, rantai log rusak dan cadangan yang Anda ambil akan menjadi cadangan lengkap terbaru. Ini berarti bahwa cadangan log sebelumnya tidak dapat diterapkan ke cadangan lengkap yang baru diambil. Rantai log sebagian besar dikelola untuk pemulihan titik waktu atau skenario pengiriman log.

Misalnya: Anda memiliki skenario cadangan yang membutuhkan cadangan penuh setiap 6 jam (tengah malam, 6 pagi, siang, 6 sore) dan mencatat cadangan setiap 15 menit. Permintaan masuk pukul 9 pagi untuk memiliki salinan DB Anda ditempatkan pada server uji. Anda ingin mengambil cadangan tanpa memutus rantai log Anda atau mengganggu pekerjaan cadangan Anda. Ini terjadi ketika cadangan hanya salinan diambil. Salinan hanya cadangan tidak akan mengganggu set cadangan reguler Anda.


1
Saya tidak berpikir rantai log efek pencadangan salinan saja. Cadangan lengkap hanya penyalinan tidak mengatur ulang basis diferensial. Itulah satu-satunya perbedaan. Lihat tautan ini sqlservercentral.com/Forums/Topic1471058-391-1.aspx?Update=1 dan sqlinthewild.co.za/index.php/2011/03/08/…
Peneliti IT

1
Saya tidak menyetujui jawaban Anda. Baik cadangan penuh maupun cadangan penuh saja tidak memutus rantai log. Selain dari 'basis diferensial yang tidak disetel ulang', hanya salinan lengkap yang persis sama dengan cadangan penuh normal dalam segala hal. Lihat tautan forum yang telah saya sebutkan di komentar saya sebelumnya.
Peneliti IT

Katakanlah Anda memiliki cadangan lengkap: FB1 dan 3 cadangan log: LB1, LB2, LB3. Sekarang lakukan full backup manual: FB2 (tanpa copy_only). Tunggu 3 cadangan log lagi: LB4, LB5, LB6. Sekarang hapus FB2. Bisakah Anda mengembalikan FB1 + LB1 + LB2 + LB3 + LB4 + LB5 + LB6?
StanleyJohns

Ya saya bisa mengembalikan. saya mengambil full backup (bukan copyonly) FB1, lalu log backup (LB1), kemudian full backup (bukan hanya copy) FB2, kemudian lagi log backup (LB2). maka saya dikembalikan dalam urutan ini FB1 + LB1 + LB2. Dipulihkan dengan benar dan menemukan semua baris dimasukkan dengan benar.
Peneliti IT

2
-1 karena opsi salin saja dengan cadangan penuh tidak ada hubungannya dengan rantai LSN. Peneliti menunjukkan hal itu tetapi Anda tidak memperbarui / menghapus jawaban Anda.
Edward Dortland

0

Cadangan lengkap dan hanya menyalin cadangan tidak memutus rantai log. hanya jika Anda melakukan backup tlog akan ada ketidakcocokan LSN.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.