Cadangan Transaksi SQL Server vs Log

12

Saya telah mewarisi database SQL Server 2008 bisnis-kritis berukuran sedang dan saya mencoba untuk membungkus kepala saya di sekitar perencanaan cadangan. (Saya seorang pengembang, bukan DBA.)

Cara sistem kami diatur sekarang ada dua sistem cadangan:

  1. Backup penuh mingguan ( .bak) dan .trnbackup log transaksi per jam ( ). Kami menyimpan beberapa set cadangan ini dan dikirim secara teratur di luar lokasi.
  2. SQL Server log ( .ldf), dengan model pemulihan diatur ke Full. File ini berada di drive terpisah dari .mdffile utama , tetapi sebaliknya tidak didukung.

Jika terjadi pemulihan darurat (atau ketika mengembalikan cadangan ke mesin dev), prosedur saya adalah menggunakan .bakfile dan kemudian menerapkan file .trn. Kami memiliki skrip yang membuat prosedur ini relatif mudah.

Pertanyaan saya:

  1. Apakah mungkin mengembalikan database dari .ldffile? Untuk apa ini?
  2. Apakah tidak perlu berlebihan untuk memiliki kedua log transaksi ini?
  3. Apakah penting untuk membuat cadangan .ldffile?
Gulungan
sumber

Jawaban:

16

Tidak, itu tidak mungkin untuk mengembalikan database dari file ldf. File ldf akan dikembalikan bersama dengan file mdf.

Tidak, itu tidak berlebihan karena mereka memiliki dua tujuan berbeda.

Sangat penting untuk mengambil cadangan penuh, dan cadangan log transaksi. Hanya memiliki salinan file ldf tidak membantu Anda memulihkan database.

Untuk apa file ldf itu, ldf adalah log transaksi. Anggap saja sebagai penyangga bundar yang mencatat perubahan ke database Anda. Ketika Anda memperbarui satu baris, perubahan tersebut segera ditulis ke ldf. Di beberapa titik di masa depan (biasanya kurang dari lima menit), data yang dimodifikasi ditulis ke file mdf.

Jika server macet atau ada kegagalan daya, ketika SQL dimulai, ia membaca ldf dan menerapkan kembali (REDO) perubahan itu.

Selain itu, jika Anda memiliki transaksi yang belum dilakukan dan sever crash, semua perubahan yang dilakukan oleh transaksi itu harus dibatalkan untuk membuat database konsisten. File ldf memiliki tugas itu juga. (UNDO)

Saya sebutkan di atas bahwa file ldf berbentuk lingkaran. Mengambil cadangan log transaksi (.trn) menyalin sebagian dari file ldf. Setelah file trn dibuat dengan aman, sql dapat menggunakan kembali bagian file ldf tersebut. Serangkaian trn backup membuat rantai yang bersama-sama merekam setiap modifikasi yang dibuat ke database. Tentu saja, jika Anda tidak pernah mengambil cadangan log transi, file ldf akan tumbuh dan tumbuh dan tumbuh.

Dalam skenario bencana, mengembalikan cadangan penuh memberi Anda salinan database saat cadangan lengkap selesai. Anda kemudian dapat mengembalikan file trn agar dan membawa basis data saat ini ke titik waktu termasuk hingga cadangan trn terakhir.

Saya membahas beberapa detail penting, tetapi intinya adalah bahwa ldf adalah file yang berfungsi untuk mencatat perubahan terbaru pada database. File trn adalah salinan bagian-bagian dari ldf yang dibuat dengan asumsi bahwa Anda akan menyimpannya dengan aman sehingga sql dapat menggunakan kembali ruang dalam ldf tersebut dan jika terjadi bencana, Anda akan memilikinya di lokasi lain.

StrayCatDBA
sumber
2
+1 Jawaban yang sangat bagus. Satu-satunya hal yang akan saya tambahkan adalah ketika DBA mengatakan "Database" mereka berarti file .mdf (file data) dan .ldf (file log) digabungkan. Kedua file bersama-sama membuat satu unit. Pada beberapa database Anda bahkan dapat melihat beberapa .mdf dan / atau .ndfs (file data sekunder) juga. File-file ini juga digabungkan bersama untuk membuat unit tunggal yang disebut database. Jika Anda kehilangan salah satu dari mereka, Anda berada dalam mode bencana dan harus mengambil tindakan korektif.
Kenneth Fisher
+1 jawaban yang baik, juga jangan salah mencadangkan 'file fisik' (.mdf / .ndf / .ldfs) yang sebenarnya saat hidup di sistem, bahkan dengan aplikasi pihak ke-3 seperti Norton saat MS SQL Server berjalan sebagai 'cadangan' yang aman. File-file itu sangat sensitif, sehingga file cadangan MS SQL Server yang sebenarnya harus selalu dibuat jika memungkinkan.
Ali Razeghi
Terima kasih, ini sangat membantu. Kedengarannya seperti rencana cadangan SQL Server reguler kami sudah cukup, dan tidak perlu mengutak-atik file .mdf atau .ldf secara langsung.
Hank