Bagaimana cara mengecilkan file Transaction Log fisik ketika itu adalah kepala sekolah di cermin?

8

Kami menyiapkan mirroring basis data selama akhir pekan, dan lupa mengaktifkan kembali pekerjaan yang mencadangkan log transaksi. Ketika saya datang di pagi ini, log transaksi telah menggelembung ke 58GB, dan mengambil sebagian besar ruang drive.

Saya melakukan backup manual log transaksi ke disk untuk menjalankan database lagi, namun menjalankan DBCC SHRINKFILE tampaknya tidak mengurangi ukuran fisik file log transaksi.

DBCC SHRINKFILE (N'MyDatabaseName_Log', 1000)

Jika saya memeriksa penggunaan log menggunakan

DBCC SQLPERF(LOGSPACE)

Saya dapat melihat bahwa hanya 22% dari log saat ini sedang digunakan

Nama Database Ukuran Log (MB) Ruang Log Digunakan (%) Status
MyDatabaseName 55440.87 22.38189 0

Jika saya memeriksa log_reuse_wait_descdi sys.databses, satu-satunya catatan yang saya lihat adalah DATABASE_MIRRORING, jadi saya menduga cermin berperan dalam mengapa ukuran fisik file log tidak menyusut?

SELECT log_reuse_wait_desc
FROM sys.databases
WHERE name = N'MyDatabaseName';

Saya juga memperhatikan keadaan mirroring basis data utama saya adalah Ditangguhkan, dan mencoba untuk Melanjutkannya segera gagal dengan kesalahan berikut:

Mitra mirroring jarak jauh untuk database 'MyDatabaseName', mengalami kesalahan 5149, status 1, tingkat 25. Mirroring basis data telah ditangguhkan. Mengatasi kesalahan pada server jarak jauh dan melanjutkan mirroring, atau menghapus mirroring dan membangun kembali instance server mirror.

Log kesalahan pada server mirror juga mengandung kesalahan ini, tetapi juga mengandung kesalahan tentang drive file log yang penuh

MODIFY FILE mengalami kesalahan sistem operasi 112 (Tidak ada cukup ruang pada disk.) Ketika mencoba memperluas file fisik.

dan

F: \ Databaselogs \ MyDatabaseName_1.ldf: Kesalahan sistem operasi 112 (Tidak ada cukup ruang pada disk.) Yang ditemui.

Server utama memiliki 60GB pada drive file log (ada database lain yang dihosting di sini), sedangkan server mirroring hanya memiliki 45GB.

Mencadangkan file log membuat database dapat digunakan lagi, namun saya juga ingin mengurangi ukuran file log fisik pada disk, dan membuat mirroring dilanjutkan.

Bagaimana saya bisa mengecilkan ukuran file log transaksi fisik saya tanpa mengorbankan mirroring atau rantai cadangan?

Saya menjalankan SQL Server 2005

Rachel
sumber
Apa yang dimiliki server sekunder dalam log galat SQL Server? Anda harus memiliki beberapa pesan log kesalahan yang menentukan apa yang terjadi yang menyebabkan sesi mirroring ditunda.
Thomas Stringer
@ThomasStringer Saya sebenarnya akan memposting jawaban saya sendiri untuk pertanyaan ini ... Saya pikir jawaban saya adalah saya tidak bisa, setidaknya tidak tanpa menonaktifkan cermin dan mengaturnya lagi. Ruang di server mirror yang disediakan untuk file log kurang dari ruang di server utama (host utama database lain), dan saya tidak punya cara untuk mengurangi ukuran log transaksi cermin. Saya juga telah memperbarui pertanyaan saya dengan pesan kesalahan dari server mirroring
Rachel

Jawaban:

2

Dari apa yang bisa saya katakan, saya tidak bisa.

Saya percaya banyak file log sedang menunggu untuk dicerminkan ke server mirror, tetapi mirror sedang down dan tidak dapat dilanjutkan karena log transaksi mirroring juga telah berkembang untuk mengambil semua ruang pada disk.

Teori ini selanjutnya didukung oleh fakta setelah saya menghapus mirroring, DBCC SHRINKFILEperintah dengan benar menyusut file log fisik, dan log_reuse_wait_desckembali untuk menungguLOG_BACKUP

Saya tidak bisa mengecilkan file log di server mirror karena itu bertindak sebagai mirror dan tidak bisa dibuka, jadi saya pikir mirror tidak dapat dipulihkan.

Jadi saya akan menghapus mirror sepenuhnya, dan mengatur semuanya lagi (proses sangat lambat dengan database 300GB). Dan kali ini, saya akan memastikan ukuran log transaksi cukup kecil sebelum memulai mirror, dan bahwa backup log transaksi berjalan setelah mirror kembali dan berjalan.

Saya juga akan menetapkan batas pada seberapa besar log transaksi dapat tumbuh di server produksi, sehingga mirror tidak pernah mencoba menumbuhkan log transaksinya di luar ukuran yang tersedia pada disk.

Rachel
sumber
1
Pilihan lain mungkin untuk mengambil cadangan berbeda dan mengembalikannya ke cermin. Ini mungkin tidak berfungsi tetapi patut dicoba jika Anda atau orang lain mengalami hal ini lagi.
cfradenburg
@cfradenburg Ya, saya memang mencoba melakukan itu, tetapi tidak berhasil dalam kasus saya karena waktu pencadangan saya selama akhir pekan dan ruang disk menjadi maksimal di cermin. Pasti patut dicoba sebelum memutuskan untuk menghapus mirror sepenuhnya dan memulai dari awal lagi.
Rachel
1

Mengalami masalah yang sama hari ini dengan DB kami, yang karena alasan tertentu telah berhenti mencadangkan log transaksi selama 3 bulan terakhir dan log telah menggelembung hingga 200GB semuanya.

Kode kesalahan yang persis sama seperti dalam situasi Anda dan mirroring tidak akan dilanjutkan. Log drive benar-benar penuh di cermin.

Untungnya saya dapat mengosongkan beberapa ruang dengan menghapus beberapa log lama yang tersesat di drive Log. Setelah itu, bisa melanjutkan mirroring.

Kemudian pergi ke cadangan rencana pemeliharaan dan memicu backup database dan transaksi log secara manual. Bahkan setelah pencadangan, file log transaksi masih besar. Jadi saya harus berulang kali memberitahu SQL Studio untuk mengecilkan file log (membebaskan ruang yang tidak digunakan), dan setelah beberapa upaya selama beberapa jam, itu memotongnya ke ukuran yang lebih mudah dikelola.

Semoga ini membantu.

Nancy
sumber