次の方法で共有


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

SQL Server データベースに対し、やり直し、元に戻す、復旧のいずれかの操作を実行しているときにエラーが発生すると、データベースが SUSPECT 状態になります。たとえば、3313 (ログのやり直し操作のエラー)、3314 (ログを元に戻す操作のエラー)、3414 (データベースの再起動を妨げる復旧エラー)、3456 (ログに記録されたトランザクションに対するやり直しエラー) などが該当します。

説明

やり直し、元に戻す、復旧のいずれかの操作でエラーが発生すると、データベースが SUSPECT 状態になります。プライマリ ファイル グループと場合によってはその他のファイル グループに問題が生じ、破損している可能性が考えられるためです。データベースは利用できなくなり、問題を解決するにはユーザーの対処が必要です。

注意

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

ユーザーの操作

やり直し操作、元に戻す操作、または復旧操作のエラーが発生する原因としては、一時的な状態によるものと、データベースを起動しようとするたびに発生する永続的なエラーによるものとが考えられます。

エラー 3313、3314、3414、3456 の発生に関する個別の原因については、Windows イベント ログをさかのぼって、具体的な問題点を示すエラーを調べてください。ユーザーに求められる適切な対処は、Windows イベント ログが示している情報、つまり、その SQL Server エラーが一時的な状態によって引き起こされたのか、永続的なエラーが原因で引き起こされたのかによって異なります。

注意

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

一時的な状態の場合:

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

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

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

永続的なエラーの場合:

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

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

    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; 
      
      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 向けの最新の Cumulative Update を適用します。