Saat ini saya harus berurusan dengan log transaksi SQL Server yang sudah di luar kendali. Penafian: Saya bukan dba dan ini bukan bidang keahlian saya jadi mohon ikut saya.
Saat ini saya memiliki file log Transaksi 115GB untuk database 500MB yang (jelas) telah dikelola dengan buruk selama beberapa waktu untuk mendapatkan status ini.
Prioritas utama adalah untuk mendapatkan kembali ruang pada disk yang diambil oleh file ini sebelum kita kehabisan! Saya telah diberitahu bahwa meningkatkan ukuran drive bukanlah suatu pilihan, bahkan untuk sementara, dan berdasarkan pada pertumbuhan masa lalu, kita perlu segera bertindak.
Seperti yang saya pahami, pendekatan terbaik adalah menjaga db dalam mode pemulihan penuh tetapi mengambil cadangan reguler dari file log, memonitor ini selama periode waktu dan menyesuaikan ukuran awal dan kenaikan sesuai. Baiklah semuanya.
Melihat kami mengambil cadangan db penuh secara teratur pada tengah malam, apakah aman bagi saya untuk sementara menempatkan database ke dalam Mode Pemulihan Sederhana (setelah salah satu dari cadangan ini berjalan), mengecilkan file log untuk mendapatkan kembali (hampir semua) ruang dan lalu masukkan kembali ke Pemulihan Penuh dengan strategi cadangan yang disebutkan di atas?
Pemikiran saya adalah jika sesuatu terjadi sekitar waktu ini, kita dapat dengan mudah mengembalikan cadangan penuh tanpa menggunakan log.
MEMPERBARUI
Beberapa detail tambahan sebagai balasan atas beberapa jawaban dan komentar:
Kami ingin mempertahankan kemampuan untuk melakukan pemulihan point-in-time sehingga database harus tetap dalam mode pemulihan penuh.
Alasan mengapa file t-log telah tumbuh begitu besar adalah karena itu tidak pernah didukung . Diverifikasi sebagai log_reuse_wait_desc mengembalikan 'LOG_BACKUP'.
sumber
Jawaban:
Log transaksi untuk database itu berisi semua transaksi sejak cadangan log transaksi terakhir, atau terakhir kali diaktifkan dari mode pemulihan sederhana. Jalankan berikut ini untuk mendapatkan jawaban pasti mengapa SQL Server tidak dapat memotong log dan selanjutnya mengapa log tumbuh.
Jika Anda ingin pemulihan waktu, tinggalkan DB dalam model pemulihan penuh dan sering-seringlah membuat cadangan log. Setiap cadangan log akan berisi semua transaksi sejak cadangan log terakhir. Proses pencadangan log juga bertanggung jawab untuk membersihkan log dan menandai ruang untuk digunakan kembali yaitu transaksi berikutnya yang dibuat dalam DB akan ditulis ke awal log terpotong secara melingkar. Pencadangan dan penggunaan kembali log ini adalah yang mencegah pertumbuhan file log.
Jika Anda tidak tertarik pada titik pemulihan waktu dan ingin menyederhanakan administrasi basis data. Kemudian atur basis data ke model pemulihan sederhana dan jangan mengambil cadangan t-log. SQL Server akan secara otomatis memotong log transaksi setelah setiap transaksi dilakukan. Artinya, begitu transaksi dilakukan ke log, catatan ditimpa oleh transaksi berikutnya, dll.
Either way, setelah Anda membuat salah satu dari dua keputusan ini, Anda kemudian dapat mengecilkan file log ke ukuran yang lebih masuk akal. Perhatikan idealnya Anda ingin membuatnya cukup besar sehingga tidak tumbuh tetapi tidak terlalu besar sehingga Anda harus menyusutkannya lagi. Perhatikan juga bahwa Anda tidak dapat mengecilkan bagian aktif dari log.
Unduh dan gunakan solusi administrasi database https://ola.hallengren.com/ untuk mencakup cadangan, fragmentasi indeks, statistik, dan CHECKDB.
Anda mungkin juga menemukan laporan 'penggunaan disk' dikembalikan dengan mengklik kanan DB di Object Explorer> Laporan> Laporan standar> 'penggunaan disk' berguna untuk mengembalikan ruang kosong di log-t.
Saya juga merekomendasikan kepada Anda Google mengapa sangat penting untuk menjaga rantai log tetap utuh dari sudut pandang DR, dan bagaimana beralih dari penuh ke sederhana memecah rantai sehingga Anda terpapar kehilangan data.
sumber
Ya, itu akan aman asalkan Anda tidak mengganggu transaksi ketika Anda melakukan ini, seperti beban larut malam. Secara umum, jika database harus dalam mode pemulihan penuh, Anda ingin cadangan T-Log biasa. Ini akan mengurangi masalah yang Anda hadapi. Saya menulis "secara umum" karena dalam beberapa kasus, saya telah melihat orang mengatur database menjadi penuh tanpa mengetahui mengapa mereka melakukannya. Anggap saja ini bukan kasusnya.
Anda mungkin ingin mempertimbangkan mengapa log adalah ukuran ini relatif terhadap ukuran database. Database 500MB dengan log 116GB tampaknya sangat tidak proporsional untuk acara satu kali. Saya menyarankan untuk memantau apa yang terjadi pada basis data untuk melihat bagaimana ia sampai pada ukuran itu.
sumber