TimesTenでは、ユーザーが定義したレベルの独立性、原子性および永続性が維持されます。トランザクションでデータ・ストアのデータが変更される場合、ロック、バージョニングおよびロギングによってACID特性が保証されます。
次の表に、TimesTenでのロックおよびログの使用方法を示します。
条件
|
結果
|
---|---|
トランザクションが正常に終了した(コミット済)。 | |
トランザクションがロールバックされた。 | |
システムで障害が発生した(データは未コミット)。 |
|
アプリケーションでエラーが発生した。 |
TimesTenでは、チェックポイントが基本的に含まれていない一時データ・ストアがサポートされています。このようなデータ・ストアに対してリカバリは実行されません。一時データ・ストアは、データ・ストアまたはアプリケーションがシャットダウンまたは失敗すると破棄されます。
TimesTenでは、ロギングを実行しないデータ・ストアがサポートされています。このようなデータ・ストアに対してロールバックは実行できません。また、リカバリには最新のチェックポイントのみが使用されます。このモードは、データ・ストアのバルク・ロードなどの特殊な処理のみに適しています。
トランザクションは、必要に応じてアプリケーションのために自動的に開始されます。データ・ストアに対するほとんどすべての処理では、アプリケーション・データへの変更やアクセスが行われない場合でも、トランザクションによるアクセスが必要です。たとえば、圧縮処理やチェックポイント処理の実行時にトランザクションが開始されていない場合は、トランザクションが開始されます。トランザクションは、ODBC SQLTransact(henv, hdbc, SQL_COMMIT)関数またはJDBC Connection.commitメソッドをコールして、アプリケーションでコミットできます。また、ODBC SQLTransact(henv、hdbc、SQL_ROLLBACK)関数またはConnection.rollbackメソッドをコールして強制終了できます。その後のデータ・ストア処理では、新しいトランザクションが自動的に開始されます。
ODBC標準に準拠して、デフォルトのAUTOCOMMIT設定はONになっています。コミットを暗黙的に行うと、パフォーマンス・コストが高くなり、煩わしくなる可能性があります。コミットを明示的に行うように、AUTOCOMMITをOFFにすることをお薦めします。TimesTenアプリケーションでODBC SQLSetConnectOption関数またはJDBC Connection.setAutoCommit(false)メソッドを使用してSQL_AUTOCOMMIT_OFFを設定します。
AUTOCOMMITが有効になっている場合に、ODBCまたはJDBCのバッチ処理を使用して1回のコールで複数行に対して、INSERT、UPDATEまたはCREATE VIEWを実行すると、コミットはバッチ処理全体が終了してから実行されます。バッチ処理中にエラーが発生した場合は、正常に変更された行がコミットされます。特定の行の問題が原因でエラーが発生した場合は、その行の前の行までがコミットされます。ODBC SQLParamOptions関数のpirowパラメータには、バッチで問題が発生した行の番号が含まれます。
永続コミットおよび自動コミットが有効でも、障害が発生した場合またはカーソルをクローズする前にアプリケーションが終了した場合は、作業内容が失われることがあります。AUTOCOMMITが有効になっているオープン・カーソルは、実際にはAUTOCOMMITが無効になっているにもかかわらず、ロールバックを実行できない状態で処理が実行されていることを意味します。DDLまたはDMLによる書込みロックは、すべてのカーソルがクローズされるまで保持されます。
注意: | 自動コミットは、ODBCアプリケーションのデフォルトのモードです。自動コミットが実行されないようにするには、アプリケーションで明示的に自動コミットを無効にする必要があります。 |