Db2 ODBC でのコミットおよびロールバック

Db2 ODBC は、自動コミットと手動コミットの 2 つのコミット・モードをサポートします。 トランザクション とは、リカバリー可能な 1 作業単位、 すなわち、1 つのアトミック操作として取り扱い可能な SQL ステートメントのグループです。 このことは、グループ内の全操作は、それらがあたかも単一操作のように完了する (コミットする) または取り消す (ロールバックする) ことが保証されているということです。

トランザクションは、作業単位または作業論理単位とも呼ばれるこ とがあります。 トランザクションが複数の接続にまたがっている場合、分散作業単位と呼ばれます。

自動コミット・モードでは、すべての SQL ステートメントは完全な トランザクションであり、自動的にコミットされます。 照会以外のステートメントの場合、ステートメント実行の終了時にコミットが出されます。 照会ステートメントの場合は、カーソルのクローズ後にコミットが出されます。 単一ステートメント・ハンドルの場合、アプリケーションは、 最初の照会のカーソルをクローズする前に、2 番目の照会を 開始してはなりません。

手動コミット・モードでは、SQLPrepare()SQLExecDirect()SQLGetTypeInfo()、 または結果セットを返す関数 を使用してデータ・ソースに最初にアクセスしたときに、トランザクションは暗黙的に開始されます。 たとえ呼び出しが失敗しても、この時点でトランザクションは開始されます。 トランザクションは、SQLEndTran() を使用してその トランザクションをロールバックまたはコミットした時点で終了します。 このことは、上記の開始から終了の間に (同じ接続で) 実行されたステートメント は、いずれも 1 つのトランザクションとして扱われることを意味します。

デフォルトのコミット・モードは自動コミットです (ただし、整合トランザクションに関与 している場合を除きます)。 アプリケーションは SQLSetConnectAttr() を呼び出すことにより、手動コミットと自動コミットのモードを切り替えることができます。 一般的には、照会専用のアプリケーションは、自動コミット・モードのままの方がよいでしょう。 データ・ソースの更新を行う必要があるアプリケーションでは、 データ・ソース接続が確立されたならば直ちに、自動コミットをオフにする必要があります。

複数の接続が存在する場合は、CONNECT (タイプ 2) が指定されていない限り、 それぞれの接続にはそれ独自のトランザクションがあります。 意図された接続と関連トランザクションのみが影響を受けるように、正しい接続ハンドルを使用して SQLEndTran() を呼び出す際には特に注意する必要があります。 分散作業単位接続とは異なり、それぞれの接続でのトランザクションは調整されません。