Ini adalah pertanyaan lanjutan dari pertanyaan sebelumnya tentang mengapa saya tidak bisa mengecilkan file log pada basis data utama.
Singkatnya, saya membuat mirroring basis data tetapi lupa untuk memastikan pekerjaan yang mendukung log transaksi berjalan kembali, dan log transaksi tumbuh hampir 60GB.
Karena mirroring diatur, peningkatan ukuran ini diduplikasi pada server mirroring, dan akhirnya mengambil semua ruang disk dan membuat database mirror tidak dapat digunakan.
Per pertanyaan ini tentang pemeliharaan log transaksi pada basis data cermin, Anda tidak dapat mencadangkan log di cermin, tetapi ketika ditanya secara khusus dalam komentar tentang cara mengecilkan file log yang ditumbuhi berlebihan pada basis data cermin, ada komentar yang tersisa bahwa
Salah satu cara untuk melakukan ini adalah dengan failover ke mirrored database dan lakukan menyusut di sana. Ujilah dengan seksama dalam lingkungan non-produksi untuk memastikan ia memiliki perilaku yang Anda inginkan / harapkan.
Ini sepertinya menyarankan bahwa mungkin ada cara lain untuk mengecilkan file log pada mirror, dan metode ini mungkin tidak aman untuk dilakukan pada server produksi.
Apakah ada cara untuk mengecilkan file log transaksi dengan aman di mirror database?
sumber
Jawaban:
The
DBCC SHRINKFILE
perintah akan dicerminkan dari prinsipal ke database cermin. Ini beberapa buktinya.Buat contoh database pada prinsipal:
Buat database yang sama dari cadangan dengan
NORECOVERY
:Siapkan sesi mirroring Anda namun ke arah mana Anda memilih.
Pada basis data utama, lihat ukuran file basis data:
Kumpulan hasil saya terlihat seperti ini:
Pada database cermin , buat snapshot dan lihat informasi yang sama:
Kumpulan hasil saya terlihat seperti berikut:
Sekarang tumbuh file log transaksi pada basis data utama (saya membawanya ke 1 GB):
Melihat ukuran log transaksi basis data utama , kita sekarang melihat ukuran yang disesuaikan:
Kumpulan hasil saya terlihat seperti berikut:
Buat snapshot lain pada basis data cermin , dan lihat ukuran file log transaksi di sana:
Kumpulan hasil saya terlihat seperti berikut:
Sekarang lakukan
DBCC SHRINKFILE
pada prinsipal :Kumpulan hasil saya adalah sebagai berikut:
Buat snapshot ketiga dan terakhir pada basis data cermin , dan lihat ukurannya:
Dan saya mendapatkan hasil set berikut:
Jadi seperti yang Anda lihat di sini,
DBCC SHRINKFILE
perintah sebenarnya dicerminkan ke database cermin.sumber
DBCC SHRINKFILE
. Adapun jika Anda dapat memperbaiki sesi mirror Anda tanpa menghapus mirroring pada database itu, ada sedikit penyelidikan yang harus dilakukan di sana. Sepertinya itu ditangguhkan karena ukuran file. Sudahkah Anda mencoba memulai kembali pasangannya?