6.2 エラー処理の流れ

ここでは,エラーが発生した場合の処理の流れについて説明します。次の図に,エラーが発生した場合の処理の流れを示します。

図6-1 エラーが発生した場合の処理

[図データ]

エラーが発生した場合の処理手順について,図6-1の流れに沿って説明します。

  1. エラーが発生したら,GetLastErrorメソッドによって,エラーの種類を判断します。
    major_codeが「ERR_DB」の場合はデータベースでエラーが発生していますので,操作2以降に従って,対処します。
    それ以外の場合は,major_codeおよびminor_codeの内容に従って,エラーに対処します。
    詳細なメッセージを取得する場合は,CdbrSession::GetLastDetailErrorメソッドをコールして取得してください。
  2. データベースのエラーの場合(major_codeが「ERR_DB」の場合)は,トランザクションをロールバックして終了させます。
    minor_codeによって,操作3または操作4に進みます。
  3. minor_codeが「ERR_DB_LOCKED(ロックエラー)」または「ERR_DB_DEADLOCK_OCCURED(デッドロックエラー)」の場合は,リトライします。
    minor_codeが「ERR_DB_LOCKED(ロックエラー)」または「ERR_DB_DEADLOCK_OCCURED(デッドロックエラー)」の場合は,ロックエラーまたはデッドロックエラーが発生しています。このエラーの場合は,リトライできます。トランザクション内にユーザプログラムで実行した処理を元に戻してから,リトライします。
  4. minor_codeが「ERR_DB_FAILED」の場合は,CdbrCore::GetDBErrorメソッドをコールします。
    データベースが起動していない場合などに,このエラーは発生します。
    出力されたSQLCODEおよびSQLSTATEを参照して,原因を確認,対処します。
    また,GetDBErrorメソッドで取得する詳細なエラー情報は,システムのメッセージとしても出力されます。必要に応じて参照してください。
    なお,DocumentBrokerのデフォルトの動作として,ロックを取得時にほかのトランザクションでロックが取得されている場合,そのロックが解放されるのをウエイトします。この場合は,タイムアウトしたときにだけ,ロックエラーが出力されますので,必要に応じてリトライしてください。
    なお,ロック取得時のウエイトは,CdbrDMA::ConnectObjectメソッドの引数の設定によって,ウエイトしないように選択することもできます。