Identifikasi akar penyebab mengapa database macet dalam kondisi RESTORING

10

Saya tahu ada pertanyaan yang memecahkan masalah database yang macet RESTORINGdan telah menggunakan solusi tersebut untuk secara manual membawa database kembali online, tetapi skenario saya agak berbeda.

Saya memiliki pemulihan otomatis menggunakan skrip Powershell yang mengembalikan salinan produksi ke instance DEV. Skrip tidak berubah selama sekitar satu tahun dan kadang-kadang proses pemulihan selesai tetapi database yang dipulihkan macet dalam RESTORINGkeadaan (terkadang skrip berfungsi dengan baik, terkadang gagal seperti ini).

Setiap kali jika saya menjalankan kembali prosesnya secara manual, atau jika saya secara manual mengembalikan basis data dari antarmuka pengguna SSMS atau melalui T-SQL, proses itu selesai tanpa masalah.

Saya telah menemukan jawaban yang direkomendasikan untuk dijalankan CHECKDBpada DB yang dipulihkan tetapi tidak ada yang keluar sebagai penyebab masalah ini.

Karena skrip pemulihan mengembalikan cadangan database LENGKAP dan menggunakan "WITH RECOVERY"opsi, saya mencoba mencari tahu apa yang mungkin menghentikan proses pemulihan, meskipun saya sebenarnya mengembalikannya menggunakan "WITH RECOVERY".

Setiap saran sangat dihargai karena saya terjebak dalam mencoba memahami mengapa ini terjadi dari waktu ke waktu.

Saya sangat ingin menyelesaikan akar penyebab masalah daripada mengobati gejalanya, yaitu mengembalikan DB secara manual sekali lagi.

Memperbarui:

Github Gist sebagai @Brent direkomendasikan - di sini .

Radu Gheorghiu
sumber
1
Anda bisa mendapatkan jawabannya dari log SQL Server dan event viewer, apakah Anda sudah memeriksa? Apakah ada masalah ruang yang terjadi karena hal itu dapat menyebabkan kondisi pemulihan macet. Apakah Anda memverifikasi integritas cadangan sebelum memulihkan? Bagaimana subsistem penyimpanan Anda
Shanky
@Shanky saya akan melihat pada mereka, meskipun saya tidak memiliki akses langsung ke informasi itu (saya perlu berkenalan dengan admin SAN saya). Integritas cadangan diatur untuk diperiksa saat mencadangkan dan saat menulis ke disk.
Radu Gheorghiu
1
Apa yang errorlog SQL Server katakan? Coba jalankan EXEC sys.xp_readerrorlog 0,1;- cari pesan di sekitar waktu operasi pemulihan.
Max Vernon
@ MaxVernon Log kesalahan dari saat pemulihan terjadi . Saya telah memeriksa pesan kesalahan dan sepertinya merekomendasikan memeriksa ruang disk, yang jumlahnya banyak. Saya akan menggali lebih dalam dan melihat apa yang bisa saya temukan, tetapi pada pandangan singkat ini bisa berkembang cukup banyak dan akan membuat saya melihat banyak hal .
Radu Gheorghiu

Jawaban:

8

Pisau cukur Occam menyarankan dimulai dengan yang sudah jelas:

Jika skrip Anda terkadang meninggalkan database dalam kondisi pemulihan, maka debug skrip tersebut.

Mulailah dengan mencatat apa yang Anda lakukan dalam sebuah tabel atau file. Kemudian, ketika Anda berakhir dengan database dalam keadaan memulihkan, melangkah kembali melalui log Anda untuk melihat apa yang salah. (Jika Anda ingin satu set mata kedua dari komunitas, coba unggah skrip Anda sebagai Github Gist, tetapi perlu diingat bahwa semakin besar, semakin sulit bagi orang untuk menemukan bug.)

Jika Anda tidak ingin melakukan itu, maka cobalah menjalankan jejak Profiler atau Extended Events untuk melacak pemulihan peristiwa, tetapi berhati-hatilah - itu jauh lebih sulit daripada yang terlihat. (Baca komentar pada posting itu untuk mengetahui lebih banyak lagi gagasan pembaca yang telah mereka coba dan gagal.)

Brent Ozar
sumber
Terima kasih Brent, ini adalah beberapa panduan yang bagus! Saya akan kembali dengan pembaruan ketika saya memiliki lebih banyak info, untuk saat DB baik-baik saja, saya akan melihat apa yang terjadi ketika proses berjalan lagi besok pagi.
Radu Gheorghiu