エラー 3313、3314、3414、または 3456 のトラブルシューティング (SQL Server)

SQL Server データベースでの再実行操作、元に戻す操作、または復旧操作中に発生したエラーによって、データベースが SUSPECT 状態になります。このようなエラーには、3313 (ログの再実行エラー)、3314 (ログを元に戻すときのエラー)、3414 (データベースを再起動できなくなる復旧エラー)、および 3456 (ログに記録されたトランザクションでの再実行エラー) があります。

説明

再実行時、元に戻すとき、または復旧時のエラーによって、データベースが SUSPECT 状態になります。これは、プライマリ ファイル グループと場合によっては他のファイル グループに問題があり、破損している可能性があるためです。この場合、データベースは使用できなくなります。この問題を解決するには、ユーザーの操作が必要です。

注意注意

このエラーが tempdb で発生した場合、SQL Server インスタンスがシャットダウンします。

ユーザーの操作

再実行時、元に戻すとき、または復旧時のエラーは、一時的な状態が原因である場合と、データベースを起動しようとするたびに発生する永続的なエラーが原因である場合があります。

注意注意

これらのエラー状態のいずれかが発生した場合、SQL Server では、通常、SQL ServerLOG フォルダーに 3 つのファイルが生成されます。SQLDumpnnnn.txt ファイルには、問題が発生したトランザクションやページの詳細など、エラーに関する詳しい診断情報が含まれています。通常、この情報は、製品サポート チームがエラーの原因を分析するために使用します。

エラー 3313、3314、3414、または 3456 が発生した原因については、Windows イベント ログで具体的な障害を示している以前のエラーを調べてください。Windows イベント ログに示されている SQL Server エラーの原因が一時的な状態と永続的なエラーのどちらであるかによって、ユーザーの操作が異なります。

一時的な状態の場合 :

  1. 次の ALTER DATABASETransact-SQL ステートメントを実行して、データベースをオンライン状態にします。

    ALTER DATABASE <database name> SET ONLINE;
    
  2. 復旧が正常に完了し、データベースがオンライン状態になったかどうかを確認するには、SQL Server エラー ログsys.databases カタログ ビューを調べます。

  3. データベースがオンライン状態であれば、DBCC CHECKDBTransact-SQL ステートメントを実行して、データベースの整合性が保たれているかどうかを確認します。

永続的なエラーの場合 :

トラブルシューティングの対象となるエラー (3313、3314、3414、または 3356) の SQL Server エラー ログを調べ、そのエラーの前にあるメッセージを確認して、それらのエラーを手動で修正できるかどうかを判断します。前のエラーを修正できる場合は、次の手順のいずれかを実行します。

  • 次のように、データベースを復元して検証します (推奨手順)。

    1. ログ末尾のバックアップを行います。

    2. RESTORE ... WITH NORECOVERY Transact-SQL ステートメントを使用して、データベースの完全バックアップからデータベースを復元し、その後、必要に応じてデータベースの差分バックアップを復元します。

    3. データベースで完全復旧モデルを使用している場合は、RESTORE LOG ... WITH NORECOVERY を使用して、復元の完全バックアップまたは差分バックアップ以降、エラー発生時点までに行われたトランザクション ログ バックアップをすべて適用します。

    4. エラー発生時点にできる限り近づくようにデータベースを復元したら、RESTORE DATABASE <database_name> WITH RECOVERY を使用して、データベースを復旧します。

    5. データベースがオンライン状態になった後、DBCC CHECKDBTransact-SQL ステートメントを実行して、データベースの整合性が保たれているかどうかを確認します。

  • 一時的なエラーの場合として説明した前の手順を使用して、データベースをオンライン状態にします。

  • 次のように、緊急モードを使用します。

    1. 次の ALTER DATABASETransact-SQL ステートメントを実行して、データベースを EMERGENCY 状態に移行します。

      ALTER DATABASE <database_name> SET EMERGENCY; 
      
    2. ALTER DATABASE ステートメントおよび SQL Server エラー ログの出力を確認します。

    3. sys.databases カタログ ビューでデータベースの状態を調べます。

    4. DBCC CHECKDB ステートメントを使用してデータベースに対して整合性確認を実行し、破損の性質と程度を把握します。

    5. DBCC CHECKDB の出力を評価した後、REPAIR_ALLOW_DATA_LOSS オプションを指定して DBCC CHECKDB を実行することもできます。

      注記注意

      このオプションを使用する前に、SQL Server オンライン ブックの「DBCC CHECKDB (Transact-SQL)」で、データベース緊急モードでのエラーの解決方法を十分に確認してください。

注意注意

エラー 3313、3314、3414、または 3356 に関連するハードウェアの問題への対応については、「MSSQLSERVER_824」を参照してください。

このエラーを回避する手順

今後このような状況にならないようにするには、次の操作を行います。

  1. SQL Server エラー ログと Windows イベント ログで、このエラーの原因となる可能性があるシステム全体の問題について確認します。

  2. この状況につながる製品の既知の問題をすべて排除するために、使用しているバージョンの SQL Server 向けの最新の累積更新プログラムを適用します。