Mendiagnosis kesalahan Microsoft SQL Server 9001: Log untuk database tidak tersedia

20

Selama akhir pekan, sebuah situs web yang saya jalankan berhenti berfungsi, merekam kesalahan berikut di Peraga Peristiwa setiap kali permintaan dibuat ke situs web:

ID Peristiwa: 9001

Log untuk database ' nama database ' tidak tersedia. Periksa log peristiwa untuk pesan kesalahan terkait. Atasi semua kesalahan dan mulai ulang basis data.

Situs web di-host di server khusus, jadi saya dapat RDP ke server dan melihat-lihat. The LDFfile untuk database ada di C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATAfolder, tetapi berusaha untuk melakukan pekerjaan dengan database dari hasil Management Studio dalam kotak dialog melaporkan kesalahan yang sama - 9001: The log untuk database tidak tersedia ...

Ini adalah pertama kalinya saya menerima kesalahan ini, dan saya telah meng-hosting situs ini (dan lainnya) di server web khusus ini selama lebih dari dua tahun sekarang.

Ini adalah pemahaman saya bahwa kesalahan ini menunjukkan file log yang rusak. Saya bisa mendapatkan situs web kembali online dengan Melepaskan basis data dan kemudian memulihkan cadangan dari beberapa hari yang lalu, tetapi kekhawatiran saya adalah bahwa kesalahan ini menunjukkan masalah yang lebih menyeramkan, yaitu kegagalan hard drive.

Saya mengirim email dukungan di perusahaan web hosting dan ini adalah jawaban mereka:

Tampaknya tidak ada indikasi lain tentang penyebab dalam Log Kejadian, jadi mungkin log tersebut rusak. Saat ini sumber daya memori pada 87%, yang juga mungkin berdampak tetapi tidak mungkin.

Bisakah log hanya "menjadi rusak?"

Pertanyaan saya: Apa langkah selanjutnya yang harus saya ambil untuk mendiagnosis masalah ini? Bagaimana saya bisa menentukan apakah ini memang masalah perangkat keras? Dan jika ya, apakah ada opsi selain mengganti disk?

Terima kasih

Scott Mitchell
sumber

Jawaban:

16

Lebih dari 99% masalah korupsi basis data adalah untuk melakukan sistem penyimpanan. Setengah dari masalah yang tersisa adalah karena memori buruk, dengan setengahnya lagi bug di SQL Server.

Kemungkinan itu adalah masalah penyimpanan.

Jika itu terjadi lagi jalankan DBCC CHECKDB terhadap database dan ini akan memberi Anda lebih banyak informasi tentang korupsi, dan jika masalah dapat diperbaiki tanpa melakukan pemulihan. Anda mungkin perlu membawa database online dalam mode darurat untuk menjalankan checkdb terhadap database.

Penggunaan memori pada 87% tidak ada hubungannya dengan masalah. SQL Server akan menjalankan memori sampai 100% (atau mendekati itu) dengan desain.

mrdenny
sumber
Terima kasih atas sarannya. Saya benar-benar mencoba melakukan CHECKDB DBCC, tetapi mendapat banyak kesalahan, termasuk kesalahan mengatakan itu tidak dapat menemukan file log. Tapi saya tidak mencoba membawa DB online dalam mode darurat.
Scott Mitchell
Biasanya jika log transaksi rusak itu adalah hal yang sangat buruk. CHECKDB mungkin bisa memperbaikinya, atau mungkin juga tidak, tergantung seberapa buruk korupsi itu. Jika Anda memiliki cadangan log transaksi (penyedia Anda mungkin tidak mengizinkan ini) maka Anda bisa kehilangan hampir tidak ada data. Pada akhir output checkdb akan menjadi tingkat perbaikan yang diperlukan untuk memperbaiki masalah dengan file database.
mrdenny
Benar. Penggunaan Memori tidak akan ada hubungannya dengan ini - kecuali jika memori rusak dan hanya ditransfer ke disk. Either way, Anda harus melihat beberapa indikasi lain masalah IO di log peristiwa Anda. Di suatu tempat.
Michael K Campbell
Anda dapat mencoba menjalankan checkdisk (chkdsk) terhadap disk untuk melihat apakah Windows melihat ada masalah dengan disk. Kemungkinan Anda harus mengganti disk. Namun itu bisa saja berupa bug di dalam kode pengontrol disk atau kode di dalam disk BIOS. Dalam kedua kasus saya akan melihat ke mengganti disk, dan / atau pengontrol.
mrdenny
8

Saya dapat menyelesaikan ini dengan mengambil database offline di Management Studio kemudian segera membawanya kembali online. dbcc checkdbtelah melempar kesalahan yang diselesaikan setelah melakukan ini. Saya tidak bisa mengatakan mengapa ini bekerja hanya itu melakukan pekerjaan.

Faktor Mystic
sumber
5

Saya memiliki masalah ini baru-baru ini juga dan setelah banyak penelitian tampaknya umum ketika database diatur ke TUTUP OTOMATIS. Saya mengatur semua basis data ke AUTO CLOSE = FALSE. Ini dimulai dengan satu basis data kemudian pergi ke dua dan selanjutnya adalah pada mereka semua. Saya hanya memulai kembali SQL Server Instance Service alih-alih mengembalikan database. Cara lain untuk memperbaiki gejala adalah dengan mengambil basis data yang bermasalah secara offline dan membawanya kembali online.

Clarice Bouwer
sumber
1

MS SQL akan membuat log dari database yang terpengaruh offline untuk menghindari korupsi database. Itu sebabnya Anda mendapatkan kesalahan 9001.

Ketika Anda mengambil database yang terpengaruh offline / online MS SQL akan mengaktifkan log database yang terpengaruh hingga kesalahan terjadi kembali.

Cara lain untuk menyelesaikan ini adalah mengubah opsi Auto_Close ke OFF

http://sqlmag.com/blog/worst-practice-allowing-autoclose-sql-server-databases

Saul A. Greco V.
sumber
0

Saya akan menebak / berharap bahwa Anda mendapat serangan untuk disk untuk server sql Anda. jika Anda mencurigai masalah perangkat keras, hal pertama yang akan saya lakukan adalah menjalankan raid maintenance / alat diagnostik Anda.

hal kedua (mungkin bersamaan jika Anda bisa) adalah menjalankan dbcc checkdb pada basis data (mungkin juga membuat database sistem Anda).

Thirster42
sumber
0

Oke, langkah pertama, buat cadangan log dan file mdf Anda ke drive yang sama sekali berbeda. SEGERA! (salinan file)

Juga, coba lakukan pencadangan basis data lengkap.

Selanjutnya, coba yang berikut ini. Menggunakan database Anda saat ini, lepaskan, jika Anda dapat dan kemudian menghapus file log, atau memindahkannya ke lokasi yang sama sekali berbeda pada disk. Kemudian pasang kembali database, dan itu akan muncul di gui dengan file log, klik hapus (atau hapus) untuk file log sehingga tidak muncul, dan kemudian klik ok. Pada dasarnya melampirkannya tanpa log, akan memaksanya untuk membuat file log untuk database di lokasi default.

Biarkan aku tahu.

Ryk
sumber
0

Ya, saya juga mendapatkan masalah yang sama, itu berkaitan dengan kesalahan tempDb 9001 yaitu log tidak tersedia. Kami memulai kembali layanan dan semuanya baik-baik saja.

Masalah di balik ini adalah masalah SAN atau penyimpanan, sementara operasi penulisan I / O, itu tidak dapat menulis selama lebih dari 15 detik.

Kelinci
sumber
0

Kemarin, saya menerima kesalahan yang sama "log untuk basis data '%' tidak tersedia. Kesalahan fatal 9001, msg 21. Silakan hubungi administrator Anda" -

Penanganan masalah - Saya memeriksa 'TempDB' tetapi tidak dapat diakses dengan cara yang sama dari basis data sistem. Maka sebelum pergi untuk opsi perbaikan, saya cukup me-restart layanan SQL untuk contoh itu dan masalah terselesaikan :) :)

Poonam Choudhary
sumber
-2

Saya telah melihat ini terjadi ketika tidak ada ruang disk yang tersedia untuk ekspansi log; dapatkah Anda memverifikasi ada cukup ruang pada C: \, dan bahwa log Anda dikelola, yaitu didukung jika Anda berada dalam mode pemulihan penuh.

Saya akan memindahkan ldf Anda (dan mdf) dari volume boot jika Anda memiliki opsi.

SqlACID
sumber
Kehabisan ruang hard drive tidak akan pernah menyebabkan kerusakan database, kecuali jika Anda menggunakan penyimpanan yang disediakan tipis dan penyimpanan dasar kehabisan ruang. Tapi itu mimpi buruk yang sangat berbeda.
mrdenny
Saya akan ulangi .. mungkin bukan korupsi dari database, tetapi tentu saja penyebab file log tidak tersedia seperti yang dinyatakan oleh op.
SqlACID
1
Ada lebih dari 25 GB ruang kosong pada drive, dan database yang dimaksud berukuran di bawah 25 MB.
Scott Mitchell
Satu-satunya kesalahan yang akan Anda lihat dari kehabisan ruang adalah kesalahan penuh file ketika mencoba untuk memodifikasi baris dalam database karena transaksi tidak dapat ditulis ke log (bukan apa yang dinyatakan OP). Kehabisan ruang tidak akan menyebabkan database menjadi tidak tersedia (apa yang dinyatakan OP).
mrdenny
Tidak setuju. Kehabisan ruang pada drive tempat file log itu dan kemudian saya mulai melihat masalah yang sama persis.
ADNow