ヘッダーをスキップ
Oracle TimesTen In-Memory Databaseオペレーション・ガイド
リリース7.0
E05167-03
  目次へ
目次
索引へ
索引

前へ
前へ
次へ
次へ
 

トランザクション・セマンティクス

TimesTenでは、ユーザーが定義したレベルの独立性、原子性および永続性が維持されます。トランザクションでデータ・ストアのデータが変更される場合、ロック、バージョニングおよびロギングによってACID特性が保証されます。

次の表に、TimesTenでのロックおよびログの使用方法を示します。

条件
結果
トランザクションが正常に終了した(コミット済)。
  • ログがディスクに書き込まれます(DurableCommits属性が有効になっている場合)。
  • 新しく変更されたデータ値に対して、他のトランザクションで読取りおよび変更を行うことができるようになります。
  • トランザクションのために設定されていたロックが解除され、対応するデータが他のトランザクションで使用できるようになります。
トランザクションがロールバックされた。
  • ログを使用して、トランザクションの結果が元に戻され、データ項目がトランザクション処理を開始する前の状態にリストアされます。
  • トランザクションのために設定されていたロックが解除され、対応するデータが他のトランザクションで使用できるようになります。
システムで障害が発生した(データは未コミット)。
  • 最初の接続で、TimesTenは、データ・ストアのリカバリを自動的に実行します。このリカバリでは、最新のチェックポイント・イメージを読み取り、ログを適用してトランザクションに一貫性がある最新の状態にデータ・ストアをリストアします。「チェックポイント」を参照してください。
アプリケーションでエラーが発生した。
  • 可能な場合、トランザクションがロールバックされます。
  • ロールバックが不可能な場合は、データ・ストアへの他の接続が無効になることがあります。
  • リカバリは、次の接続で行われます(『Oracle TimesTen In-Memory Database C開発者およびリファレンス・ガイド』の致命的なエラーが発生した後のリカバリに関する説明を参照)。

TimesTenでは、チェックポイントが基本的に含まれていない一時データ・ストアがサポートされています。このようなデータ・ストアに対してリカバリは実行されません。一時データ・ストアは、データ・ストアまたはアプリケーションがシャットダウンまたは失敗すると破棄されます。

TimesTenでは、ロギングを実行しないデータ・ストアがサポートされています。このようなデータ・ストアに対してロールバックは実行できません。また、リカバリには最新のチェックポイントのみが使用されます。このモードは、データ・ストアのバルク・ロードなどの特殊な処理のみに適しています。

トランザクションは、必要に応じてアプリケーションのために自動的に開始されます。データ・ストアに対するほとんどすべての処理では、アプリケーション・データへの変更やアクセスが行われない場合でも、トランザクションによるアクセスが必要です。たとえば、圧縮処理やチェックポイント処理の実行時にトランザクションが開始されていない場合は、トランザクションが開始されます。トランザクションは、ODBC SQLTransacthenv, hdbc, SQL_COMMIT)関数またはJDBC Connection.commitメソッドをコールして、アプリケーションでコミットできます。また、ODBC SQLTransacthenvhdbc、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アプリケーションのデフォルトのモードです。自動コミットが実行されないようにするには、アプリケーションで明示的に自動コミットを無効にする必要があります。