SQL Server (2005/2008): Apakah cadangan penuh memotong log dalam mode pemulihan penuh

41

Saya baru saja membaca banyak dokumentasi MSDN dan saya pikir saya mengerti model pemulihan yang berbeda dan konsep rantai cadangan. Saya masih punya satu pertanyaan:

Apakah cadangan database lengkap memotong log transaksi (menggunakan mode pemulihan penuh)?

  • Jika ya: Di mana ini disebutkan dalam MSDN? Yang bisa saya temukan adalah bahwa hanya LOG CADANGAN yang memotong log.

  • Jika tidak: Mengapa? Karena cadangan basis data lengkap memulai rantai cadangan baru, apa gunanya menjaga transaksi yang diselesaikan sebelum cadangan penuh aktif di log?

Heinzi
sumber

Jawaban:

43

Tidak - sudah pasti tidak. Satu- satunya hal yang memungkinkan log untuk dihapus / terpotong dalam model pemulihan LENGKAP atau BULK_LOGGED adalah cadangan log - tidak ada pengecualian. Saya memiliki argumen ini beberapa waktu lalu dan memposting posting blog yang panjang dan terperinci dengan penjelasan dan skrip yang dapat Anda gunakan untuk membuktikannya kepada diri sendiri di Kesalahpahaman di sekitar log dan cadangan log: bagaimana meyakinkan diri sendiri .

Jangan ragu untuk menindaklanjuti dengan lebih banyak pertanyaan. Btw - juga lihat artikel panjang yang saya tulis untuk Majalah TechNet tentang Memahami Logging dan Pemulihan di SQL Server .

Terima kasih

Paul Randal
sumber
Terima kasih banyak, Pak, atas jawaban Anda yang super dan artikelnya telah menjawab sejuta pertanyaan di benak saya.
M.Ali
13

Cadangan lengkap TIDAK memotong log, Anda harus melakukan operasi log cadangan. Cadangan penuh TIDAK mengatur ulang rantai log - yang akan benar-benar mengacaukan replikasi / pengiriman log, dll.

Anda harus melihat dari dekat bagaimana SQL Server melakukan backup tetapi tahu bahwa transaksi dalam penerbangan / berjalan lama tidak termasuk dalam cadangan (jika tidak, cadangan mungkin tidak pernah lengkap) sehingga tidak cukup akurat untuk mengatakan bahwa cadangan penuh dari suatu database online dijamin membuat cadangan log berikutnya menjadi usang.

http://msdn.microsoft.com/en-us/library/ms175477.aspx

Matt Rogish
sumber
8

Dari pemahaman saya satu-satunya hal yang memotong log transaksi adalah cadangan log .

Cadangan lengkap hanya menyalin cukup dari log sehingga konsisten secara transaksi, karena perlu beberapa saat agar operasi pencadangan selesai & pada waktu itu, halaman yang disalin mungkin telah berubah.

Anda masih memerlukan cadangan log untuk pemulihan waktu secara tepat waktu.

Saya tidak memiliki MSDN untuk ditautkan, tetapi saya dapat menautkan Anda ke blog Paul Randal , yang merupakan pengembang di tim SQL Server, menulis DBCC CHECKDB dan bagian-bagian dari Buku Daring.

Dia juga menjawab pertanyaan di forum ini, sehingga itu akan menjadi otoritas yang lebih baik daripada informasi tangan ke-2 / ke-3 dari saya :)

Nick Kavadias
sumber
5

Orang sering memiliki kesalahpahaman tentang cadangan lengkap dan cadangan log. Agar cadangan berfungsi dalam FULLmodel pemulihan cadangan, t-log harus digunakan, karena selama cadangan mungkin masih ada transaksi yang terjadi di dalam basis data (kecuali jika Anda melakukan COLDcadangan yang disebut ketika Anda mematikan basis data). Oracle menggunakan konsep yang sama ketika Anda memiliki database dalam ARCHIVELOGmode. Urutan cadangan bermuara di bawah ini:

  1. Mulai pencadangan - menangguhkan semua tindakan dalam file nyata dan menulis ke t-log.
  2. Lakukan pencadangan - semua transaksi berlanjut, tetapi tidak ditulis ke file nyata, itu ditulis ke dalam log-t
  3. End backup - melanjutkan penulisan transaksi basis data ke file nyata.
  4. Jika perlu siram apa yang ada di T-log ke dalam file nyata.

Itulah alasan mengapa log-t tidak secara default terpotong / menyusut, karena mereka adalah bagian vital dari kelanjutan transaksi selama fase cadangan.

Peter
sumber
1

Jangan bingung memotong log dengan menyusutkan log.

  • Untuk TRUNCATE adalah untuk menghapus transaksi dalam log yang sebelum pos pemeriksaan terakhir, (pos pemeriksaan adalah ketika transaksi memerah ke database itu sendiri). Ini dilakukan dengan menggunakan perintah CADANGAN.

  • Untuk SHRINK log adalah untuk mengurangi ukuran file log yang sebenarnya. Ini dilakukan dengan menggunakan perintah DBCC.


sumber
1

Pada dasarnya Anda tidak perlu membuat penyusutan log transaksi secara otomatis setiap kali karena log transaksi membutuhkan ruang untuk bekerja dan jika Anda memotong log otomatis, log itu akan tetap berukuran hampir sama.


sumber