Microsoft SQL Server hatası 9001'i tanılama: Veritabanı günlüğü kullanılamıyor


20

Hafta sonu boyunca çalıştırdığım bir web sitesinin çalışması durdu ve web sitesine her istek yapıldığında Olay Görüntüleyicisi'ne aşağıdaki hatayı kaydetti:

Olay Kimliği: 9001

' Veritabanı adı ' veritabanı günlüğü kullanılamıyor. Olay günlüğünde ilgili hata iletileri olup olmadığını kontrol edin. Hataları giderin ve veritabanını yeniden başlatın.

Web sitesi özel bir sunucuda barındırılıyor, bu yüzden sunucuya RDP ve poke yapabiliyoruz. LDFVeritabanı için dosya bulunmaktadır C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATAklasörde, ama aynı hatayı bildiren bir iletişim kutusunda Management Studio sonuçlarından veritabanı ile herhangi bir işi yapmak teşebbüs - 9001: veritabanı günlük kullanılamaz ...

Bu hatayı ilk kez aldım ve bu siteyi (ve diğerlerini) iki yıldan fazla bir süredir bu özel web sunucusunda barındırıyorum.

Anladığım kadarıyla bu hata bozuk bir günlük dosyasını gösteriyor. Ben veritabanı ayırma ve daha sonra bir kaç gün önce bir yedek geri yükleyerek web sitesi geri almak mümkün, ama benim endişem bu hatanın daha uğursuz bir sorun, yani bir sabit disk hatası göstergesi olmasıdır.

Ben web hosting şirketi destek e-posta ve bu onların cevap oldu:

Olay Günlüğü'nde nedene ilişkin başka bir gösterge yok gibi görünüyor, bu nedenle günlüğün bozulmuş olması mümkündür. Şu anda hafızanın kaynakları% 87'dir, bu da bir etkiye sahip olabilir, ancak olası değildir.

Günlük "bozulabilir mi?"

Sorum: Bu sorunu teşhis etmek için atmam gereken sonraki adımlar nelerdir? Bunun gerçekten bir donanım sorunu olup olmadığını nasıl belirleyebilirim? Ve eğer öyleyse, diski değiştirmenin ötesinde herhangi bir seçenek var mı?

Teşekkürler

Yanıtlar:


16

Veritabanı bozulma sorunlarının% 99'undan fazlası depolama sistemi yapmaktır. Geri kalan sorunların yarısı, diğer yarısı SQL Server'daki hatalar olmakla birlikte kötü hafızadan kaynaklanmaktadır.

Oran bir depolama problemidir.

Bu durumda tekrar veritabanına karşı DBCC CHECKDB çalıştırın ve bu size yolsuzluk hakkında daha fazla bilgi verecektir ve sorun bir geri yükleme yapmadan düzeltilebiliyorsa. Veritabanına karşı checkdb çalıştırmak için veritabanını acil duruma getirmeniz gerekebilir.

Bellek kullanımının% 87'de olması sorunla ilgisi yoktur. SQL Server, belleği tasarımla% 100'e (veya ona yakın) kadar çalıştıracaktır.


Önerileriniz için teşekkürler. Aslında DBCC CHECKDB yapmayı denedim, ancak günlük dosyasını bulamadığını söyleyen bir hata da dahil olmak üzere birçok hata var. Ancak acil durum modunda DB'yi çevrimiçi hale getirmeyi denemedim.
Scott Mitchell

Genellikle işlem günlüğü bozulursa oldukça kötü bir şeydir. CHECKDB, bozukluğun ne kadar kötü olduğuna bağlı olarak onarabilir veya çözemeyebilir. İşlem günlüğü yedeklemeleriniz varsa (sağlayıcınız buna izin vermeyebilir), neredeyse hiç veri kaybetmemiş olabilirsiniz. Checkdb çıkışının sonunda veritabanı dosyalarıyla ilgili sorunları düzeltmek için gereken onarım düzeyi olacaktır.
mrdenny

Doğru. Bellek Kullanımının bununla bir ilgisi yoktur - bellek bozulmuş ve diske aktarılmadığı sürece. Her iki durumda da, olay günlüklerinizdeki GÇ sorunlarının başka göstergelerini görüyor olmalısınız. Bir yerde.
Michael K Campbell

Windows'un diskle ilgili herhangi bir sorun görüp görmediğini görmek için diske karşı bir denetim diski (chkdsk) çalıştırmayı deneyebilirsiniz. Oranlar, diski değiştirmeniz gerekecek. Ancak, disk denetleyicisinin kodunda veya diskin BIOS'undaki kodda bir hata olabilirdi. Her iki durumda da diskleri ve / veya denetleyiciyi değiştirmeyi düşünürüm.
mrdenny

8

Management Studio'da veritabanını çevrimdışına alıp hemen tekrar çevrimiçi duruma getirerek bunu çözebildim. dbcc checkdbbunu yaptıktan sonra çözülen hatalar attı. Söyleyemem neden bu yalnızca o çalıştı yaptığı işi.


5

Son zamanlarda da bu sorunu yaşadım ve araştırma dağlarından sonra bir veritabanı OTOMATİK KAPAT olarak ayarlandığında yaygın gibi görünüyor. Tüm veritabanlarını AUTO CLOSE = FALSE olarak ayarladım. Bu, bir veritabanı ile başladı ve sonra ikiye geçti ve birincisi hepsinde oldu. Veritabanlarını geri yüklemek yerine SQL Server Örnek Hizmeti'ni yeniden başlattım. Belirtiyi düzeltmenin başka bir yolu da sorunlu veritabanını çevrimdışına almak ve tekrar çevrimiçi duruma getirmektir.


1

MS SQL, veritabanı bozulmasını önlemek için etkilenen bir veritabanının günlüklerini çevrimdışı duruma getirir. Bu nedenle 9001 hatasını alırsınız.

Etkilenen veritabanını çevrimdışı / çevrimiçi duruma getirdiğinizde MS SQL, hata yeniden oluşana kadar etkilenen veritabanı günlüklerini etkinleştirir.

Bunu çözmenin başka bir yolu da Auto_Close seçeneğini OFF olarak değiştirmek

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


0

Ben tahmin / sql sunucunuz için disk için bir baskın var umuyoruz. Donanım sorunlarından şüpheleniyorsanız, yapacağım ilk şey baskın bakım / teşhis araçlarınızı çalıştırmaktır.

ikinci şey (muhtemelen aynı anda mümkünse) veritabanında (belki de sistem veritabanları da) dbcc checkdb çalıştırmaktır.


0

Tamam, ilk adım, günlük ve mdf dosyalarınızı tamamen farklı bir sürücüye yedekleyin. HIZLI BİR ŞEKİLDE! (dosya kopyası)

Ayrıca, tam bir veritabanı yedeklemesi gerçekleştirmeyi deneyin.

Ardından, aşağıdakileri deneyin. Geçerli veritabanınızı kullanarak günlük dosyasını silip kaldırabilirseniz çıkarın veya diskte tamamen farklı bir konuma taşıyın. Daha sonra veritabanını yeniden ekleyin, böylece bir günlük dosyasıyla birlikte GUI'de görünecek, günlük dosyasının görünmesini engellemek için kaldır (veya sil) seçeneğini ve sonra da Tamam'ı tıklatın. Temel olarak bir günlük olmadan eklemek, varsayılan konumdaki veritabanı için bir günlük dosyası oluşturmaya zorlar.

Bilmeme izin ver.


0

Evet, ben de aynı sorunu var, tempDb 9001 yani günlük mevcut değil hatası ile ilgili idi. Biz hizmetleri yeniden ve tüm iyiydi.

Bunun arkasındaki sorun SAN veya depolama sorunuydu, G / Ç yazma işlemi 15 saniyeden uzun süre yazılamadı.


0

Dün aynı hatayı "% 'veritabanı günlüğü kullanılamıyor. Önemli hata 9001, msg 21. Lütfen yöneticinize başvurun" -

Geçici çözüm - 'TempDB' kontrol ettim ama sistem veritabanlarının benzer şekilde erişilebilir değildi. Sonra onarım seçeneği için gitmeden önce ben sadece bu örnek için SQL hizmetlerini yeniden başlattım ve sorun çözüldü :) :)


-2

Bu günlük genişletme için kullanılabilir disk alanı olmadığında gördüm; C: \ üzerinde geniş bir alan olduğunu ve günlüklerinizin yönetildiğini, yani tam kurtarma modundaysanız yedekleme yaptığınızı doğrulayabilir misiniz?

Eğer seçeneğiniz varsa ben ldf (ve mdf) önyükleme biriminden taşımak.


Sabit diskte yeterli depolama alanı kullanmıyorsanız ve temel depolama alanında yer kalmadıkça ASLA sabit disk alanınız tükenmez. Ama bu tamamen farklı bir kabus.
mrdenny

Ben rephrase .. belki veritabanında bozulma değil, ama op belirtilen günlük dosyaları kullanılamaz olması için bir neden.
SqlACID

1
Sürücüde 25 GB'den fazla boş alan var ve söz konusu veritabanı 25 MB'ın altında.
Scott Mitchell

Alanın tükenmesinden görebileceğiniz tek hata, işlem günlüğüne yazılamayacağından (OP'nin belirttiği gibi değil) veritabanı içindeki satırları değiştirmeye çalışırken bir dosya dolu hatasıdır. Alanın tükenmesi veritabanının kullanılamaz hale gelmesine neden olmaz (OP'nin belirttiği gibi).
mrdenny

Katılmıyorum. Günlük dosyasının bulunduğu sürücüde yer kalmadı ve sonra da aynı sorunu görmeye başladım.
AD 9Şimdi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.