Microsoft SQL Serverエラー9001の診断:データベースのログは利用できません


20

週末に実行したWebサイトは機能を停止し、Webサイトへの要求が行われるたびに次のエラーをイベントビューアーに記録しました。

イベントID:9001

データベース ' database name ' のログは使用できません。関連するエラーメッセージについては、イベントログを確認してください。エラーを解決し、データベースを再起動します。

このWebサイトは専用サーバーでホストされているため、サーバーにRDPを実行して、いろいろなことをすることができます。LDFデータベースのファイルはC:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\DATAフォルダーに存在しますが、Management Studioからデータベースを操作しようとすると、ダイアログボックスで同じエラーが報告されます-9001:The log for the database is available ...

このエラーを受け取ったのはこれが初めてであり、このサイト(および他のサイト)をこの専用Webサーバーで2年以上ホストしています。

このエラーは破損したログファイルを示していることを理解しています。データベースをデタッチしてから数日前にバックアップを復元することでWebサイトをオンラインに戻すことができましたが、心配なのはこのエラーがより厄介な問題、つまりハードドライブの障害を示していることです。

私はウェブホスティング会社のサポートにメールを送りましたが、これは彼らの返信でした:

イベントログに他の原因の兆候がないように見えるため、ログが破損している可能性があります。現在、メモリのリソースは87%です。これも影響がある可能性がありますが、ほとんどありません。

ログは単に「破損する」ことがありますか?

私の質問:この問題を診断するためにとるべき次のステップは何ですか?これが実際にハードウェアの問題であるかどうかを確認するにはどうすればよいですか?もしそうなら、ディスクを交換する以外のオプションはありますか?

ありがとう

回答:


16

データベース破損の問題の99%以上は、ストレージシステムを使用することです。残りの問題の半分はメモリ不足によるもので、残りの半分はSQL Serverのバグです。

おそらく、ストレージの問題です。

再度発生する場合は、データベースに対してDBCC CHECKDBを実行すると、破損に関する詳細情報が得られます。また、復元を実行せずに問題を解決できる場合もあります。データベースに対してcheckdbを実行するには、おそらくデータベースを緊急モードでオンラインにする必要があります。

メモリ使用率が87%であっても、問題とは関係ありません。SQL Serverは、設計によりメモリを100%(またはそれに近い)まで実行します。


提案をありがとう。実際にDBCC CHECKDBを実行しようとしましたが、ログファイルが見つからないというエラーなど、多くのエラーが発生しました。しかし、私は緊急モードでDBをオンラインにしようとしませんでした。
スコットミッチェル

通常、トランザクションログが破損している場合、それはかなり悪いことです。CHECKDBは、破損の程度に応じて、修復できる場合とできない場合があります。トランザクションログのバックアップがある場合(プロバイダーがこれらを許可していない可能性があります)、データがほとんど失われない可能性があります。checkdbの出力の最後には、データベースファイルの問題を修正するために必要な修復レベルが表示されます。
mrdenny

正しい。メモリ使用量はこれとは何の関係もありません-メモリが破損してディスクに転送された場合を除きます。いずれにしても、イベントログにIOの問題の他の兆候が表示されるはずです。どこかに。
マイケル・K・キャンベル

ディスクに対してチェックディスク(chkdsk)を実行して、ディスクに問題があるかどうかを確認できます。オッズは、あなたがディスクを交換する必要がありますされています。ただし、ディスクコントローラのコードまたはディスクのBIOS内のコードのバグである可能性があります。いずれの場合も、私は、ディスク、および/またはコントローラを交換するに見えると思います。
mrdenny

8

Management Studioでデータベースをオフラインにしてからすぐにオンラインに戻すことで、これを解決できました。dbcc checkdbこれを実行した後に解決されたエラーがスローされました。私が言うことができない理由は、これが唯一働いたことがあることやった仕事を。


5

私も最近この問題を抱えており、多くの研究の後に、データベースがAUTO CLOSEに設定されている場合によくあるように見えます。すべてのデータベースをAUTO CLOSE = FALSEに設定します。これは1つのデータベースから始まり、2つのデータベースに移行し、次のデータベースはすべてのデータベースに適用されました。データベースを復元するのではなく、単にSQL Serverインスタンスサービスを再起動しました。症状を修正する別の方法は、問題のあるデータベースをオフラインにし、再びオンラインに戻すことです。


1

MS SQLは、データベースの破損を防ぐために、影響を受けるデータベースのログをオフラインにします。そのため、9001エラーが発生します。

影響を受けるデータベースをオフライン/オンラインにすると、MS SQLはエラーが再発するまで影響を受けるデータベースログを有効にします。

これを解決する別の方法は、Auto_CloseオプションをOFFに変更することです

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


0

私はあなたがあなたのSQLサーバーのディスクを襲撃していることを推測/期待しています。ハードウェアの問題が疑われる場合、最初に行うことは、RAIDメンテナンス/診断ツールを実行することです。

2番目の(おそらく可能であれば並行)は、データベース(おそらくシステムデータベースも)でdbcc checkdbを実行します。


0

まず、最初のステップとして、ログとmdfファイルのバックアップをまったく別のドライブに作成します。早く!(ファイルのコピー)

また、データベースの完全バックアップを実行してみてください。

次に、次を試してください。現在のデータベースを使用して、可能であればログファイルをデタッチし、ログファイルを削除するか、ディスク上の完全に異なる場所に移動します。次に、データベースを再接続すると、ログファイルとともにGUIに表示されます。ログファイルが表示されないように、削除(または削除)をクリックして、[OK]をクリックします。基本的にログなしでアタッチすると、デフォルトの場所にデータベースのログファイルが作成されます。

お知らせ下さい。


0

はい、私もこれと同じ問題を抱えていました。tempDbエラー9001に関するログです。つまり、ログは利用できません。サービスを再開しましたが、すべて順調でした。

この背後にある問題は、SANまたはストレージの問題でしたが、I / O書き込み操作では、15秒以上書き込みができませんでした。


0

昨日、「データベース '%'のログが使用できません。致命的なエラー9001、メッセージ21。管理者に連絡してください」という同じエラーを受け取りました。

回避策-「TempDB」をチェックしましたが、システムデータベースの他の部分と同様にアクセスできませんでした。次に、修復オプションに進む前に、そのインスタンスのSQLサービスを再起動し、問題が解決しました:) :)


-2

これは、ログの拡張に使用できるディスク領域がないときに発生します。C:\に十分なスペースがあり、ログが管理されていること、つまり、完全復旧モードの場合にバックアップされることを確認できますか。

オプションがある場合は、ブートボリュームからldf(およびmdf)を移動します。


シンプロビジョニングされたストレージを使用していて、ベースストレージのスペースが不足していない限り、ハードドライブのスペースが不足してもデータベースが破損することはありません。しかし、それはまったく異なる悪夢です。
mrdenny

言い換えると、データベースの破損ではないかもしれませんが、間違いなくopが述べたようにログファイルが利用できなくなる原因です。
SqlACID

1
ドライブに25 GBを超える空き領域があり、問題のデータベースのサイズが25 MB未満です。
スコットミッチェル

トランザクションがログに書き込めないため、データベース内の行を変更しようとしたときに表示されるエラーは、スペース不足で表示される唯一のエラーです(OPの記述ではありません)。スペースが不足しても、データベースが使用できなくなることはありません(OPの説明)。
mrdenny

同意しない。ログファイルがあるドライブの領域を使い果たしてから、まったく同じ問題が見られるようになりました。
ADNow
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.