適用対象: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」 を参照してください。
RAISERROR を使用して、重大度レベル 1 ~ 25 のユーザー定義のエラー メッセージを生成することができます。
RAISERROR では、sys.messages カタログ ビューに格納されているユーザー定義のメッセージを参照することも、メッセージを動的に作成することもできます。
RAISERRORがエラーを生成するときに、sys.messagesでユーザー定義エラー メッセージを使用すると、RAISERRORで指定された重大度によって、sys.messagesで指定された重大度がオーバーライドされます。 詳細については、 RAISERROR を参照してください。
エラーの重大度と TRY...CATCH
TRY...CATCH コンストラクトは、データベース接続を終了しない重大度が 10 を超えるすべての実行エラーをキャッチします。
重大度が 0 ~ 10 のエラーは情報メッセージであり、CATCHコンストラクトのTRY...CATCH ブロックから実行がジャンプすることはありません。
データベース接続を終了するエラー (通常は重大度が 20 から 25) は、接続の終了時に実行が中止されるため、 CATCH ブロックでは処理されません。
詳細については、「TRY...CATCH」を参照してください。
エラーの重大度の取得
ERROR_SEVERITY システム関数を使用して、CATCH コンストラクトのTRY...CATCH ブロックを実行する原因となったエラーの重大度を取得できます。
ERROR_SEVERITYは、NULL ブロックのスコープ外で呼び出された場合にCATCHを返します。 詳細については、「ERROR_SEVERITY」 を参照してください。