データベース エンジン エラーの重大度

適用対象:SQL Server (サポートされているすべてのバージョン)

SQL Server データベース エンジンによってエラーが発生した場合、エラーの重大度は、SQL Serverで発生した問題の種類を示します。

重大度レベル

次の表に、SQL Server データベース エンジンによって発生したエラーの重大度レベルを示します。

重大度レベル 説明
0-9 ステータス情報を返すか、重大ではないエラーを報告する情報メッセージです。 データベース エンジンでは、重大度が 0 ~ 9 のシステム エラーは発生しません。
10 ステータス情報を返すか、重大ではないエラーを報告する情報メッセージです。 互換性上の理由から、データベース エンジンは、呼び出し元のアプリケーションにエラー情報を返す前に、重大度 10 を重大度 0 に変換します。
11-16 ユーザーが訂正できるエラーを示します。
11 指定したオブジェクトまたはエンティティが存在しないことを示します。
12 特別のクエリ ヒントのためロックを使用しないクエリに対する特別な重大度です。 一貫性を保証するロックが使用されないため、これらのステートメントによって実行される読み取り操作でデータの一貫性が損なわれる場合があります。
13 トランザクションのデッドロック エラーを示します。
14 権限の拒否などのセキュリティに関係するエラーを示します。
15 Transact-SQL コマンドの構文エラーを示します。
16 ユーザーが訂正できる一般的なエラーを示します。
17-19 ユーザーが訂正できないソフトウェアのエラーを示します。 システム管理者に問題を報告してください。
17 ステートメントによって、SQL Serverがリソース (データベースのメモリ、ロック、ディスク領域など) を使い果たしたり、システム管理者によって設定された制限を超えたりしたことを示します。
18 データベース エンジン ソフトウェアの問題を示しますが、ステートメントの実行が完了し、データベース エンジンのインスタンスへの接続が維持されます。 重大度レベル 18 のメッセージが発生した場合は、必ずシステム管理者に報告してください。
19 構成不可能なデータベース エンジンの制限を超え、現在のバッチ プロセスが終了したことを示します。 重大度レベル 19 以上のエラー メッセージは、現在のバッチの実行を停止します。 重大度レベル 19 のエラーの発生はまれですが、発生した場合はシステム管理者またはご購入先で修正する必要があります。 重大度レベル 19 のメッセージが発生した場合は、システム管理者に問い合わせてください。 重大度レベル 19 ~ 25 のエラー メッセージは、エラー ログに書き込まれます。
20-24 システムの問題を示し、致命的なエラーであることを示します。これは、ステートメントまたはバッチを実行しているデータベース エンジン タスクが実行されなくなったことを意味します。 タスクは何が起きたのかを記録し、その後終了します。 ほとんどの場合、データベース エンジンのインスタンスへのアプリケーション接続も終了する可能性があります。 この問題が発生すると、問題によっては、アプリケーションの再接続ができない場合があります。

この範囲のエラー メッセージは、同じデータベースのデータにアクセスするすべてのプロセスに影響し、データベースまたはオブジェクトに損傷があったことを示します。 重大度レベル 19 ~ 24 のエラー メッセージは、エラー ログに書き込まれます。
20 ステートメントに問題が発生したことを示します。 この問題は現在のタスクにのみ影響するので、データベース自体が損傷している可能性はありません。
21 現在のデータベース内のすべてのタスクに影響する問題が発生したことを示します。ただし、データベース自体が損傷している可能性はありません。
22 メッセージに示されたテーブルまたはインデックスが、ソフトウェアまたはハードウェアの問題によって損傷していることを示します。

重大度レベル 22 のエラーはまれにしか発生しません。 このエラーが発生した場合は、DBCC CHECKDB を実行して、データベース内の他のオブジェクトも損傷しているかどうかを判断します。 問題がバッファー キャッシュ内だけで発生し、ディスク自体には問題がないこともあります。 その場合は、データベース エンジンのインスタンスを再起動すると問題が修正されます。 作業を続行するには、データベース エンジンのインスタンスに再接続する必要があります。それ以外の場合は、DBCC を使用して問題を修復します。 場合によっては、データベースの復元が必要です。

データベース エンジンのインスタンスを再起動しても問題が解決しない場合、問題はディスク上にあります。 エラー メッセージで示されているオブジェクトを破棄することで、問題が解決する場合があります。 たとえば、データベース エンジンのインスタンスが非クラスター化インデックスの長さが 0 の行を検出したことをメッセージが報告する場合は、インデックスを削除して再構築します。
23 ハードウェアまたはソフトウェアの問題によって、データベース全体の整合性に疑いがあることを示します。

重大度レベル 23 のエラーはまれにしか発生しません。 このエラーが発生した場合は、DBCC CHECKDB を実行し、損傷の範囲を調べます。 問題がキャッシュ内でのみ発生し、ディスク自体には問題がないこともあります。 その場合は、データベース エンジンのインスタンスを再起動すると問題が修正されます。 作業を続行するには、データベース エンジンのインスタンスに再接続する必要があります。それ以外の場合は、DBCC を使用して問題を修復します。 場合によっては、データベースの復元が必要です。
24 メディアの障害を示します。 システム管理者がデータベースを復元する必要がある場合があります。 また、場合によっては、ハードウェア ベンダーに相談する必要もあります。

ユーザー定義のエラー メッセージの重大度

sp_addmessage を使用して、重大度 1 ~ 25 のユーザー定義のエラー メッセージを sys.messages カタログ ビューに追加することができます。 これらのユーザー定義のエラー メッセージは、RAISERROR で使用することができます。 詳細については、「 sp_addmessage (Transact-SQL)」を参照してください。

RAISERROR を使用して、重大度レベル 1 ~ 25 のユーザー定義のエラー メッセージを生成することができます。 RAISERROR は、 sys.messages カタログ ビューに格納されているユーザー定義のエラー メッセージを参照することも、メッセージを動的に作成することもできます。 エラーの発生中に、sys.messages にあるユーザー定義エラー メッセージを使用する場合、RAISERROR で指定された重大度は、sys.messages で指定された重大度をオーバーライドします。 詳しくは、「RAISERROR (Transact-SQL)」をご覧ください。

エラーの重大度と TRY...CATCH

TRY...CATCH コンストラクトでは、データベース接続を終了しない、重大度が 10 を超えるすべての実行エラーが検出されます。

重大度 0 から 10 のエラーは情報メッセージであるため、TRY...CATCH コンストラクトの CATCH ブロックからのジャンプは実行されません。

接続が終了すると実行は中断されるため、データベース接続を終了させるエラー (通常の場合、重大度 20 ~ 25 のエラー) は CATCH ブロックでは処理されません。

詳細については、「TRY...CATCH (Transact-SQL)」を参照してください。

エラーの重大度の取得

システム関数 ERROR_SEVERITY を使用して、TRY...CATCH コンストラクトの CATCH ブロックを実行したエラーの重大度を取得することができます。 CATCH ブロックの範囲外で呼び出された場合、ERROR_SEVERITY は NULL を返します。 詳細については、「 ERROR_SEVERITY (Transact-SQL)」を参照してください。

参照

データベース エンジン エラーについて
sys.messages (Transact-SQL)
システム関数 (Transact-SQL)
TRY...CATCH (Transact-SQL)