第14章 トランザクション
Data Virtualization は、クライアントパースペクティブから 3 種類のトランザクションを提供します。
- グローバル
- ローカル
- リクエストレベル
すべては、XA トランザクションとして Data Virtualization によって論理的に実装されます。XA トランザクションの詳細は、「 JTA 仕様 」を参照してください。
14.1. ローカルトランザクション
クライアントパースペクティブからのローカルトランザクションは単一リソースにのみ影響しますが、複数のステートメントを調整できます。
14.1.1. JDBC Specific
Connection
クラスは autoCommit
フラグを使用して、ローカルトランザクションを明示的に制御します。デフォルトでは、autoCommit は、リクエストレベルまたは暗黙的なトランザクション制御を示す true
に設定されます。
autoCommit フラグを false に設定して、ローカルトランザクションの使用例。
自動コミットを使用したローカルトランザクションの制御
// Set auto commit to false and start a transaction connection.setAutoCommit(false); try { // Execute multiple updates Statement statement = connection.createStatement(); statement.executeUpdate("INSERT INTO Accounts (ID, Name) VALUES (10, 'Mike')"); statement.executeUpdate("INSERT INTO Accounts (ID, Name) VALUES (15, 'John')"); statement.close(); // Commit the transaction connection.commit(); } catch(SQLException e) { // If an error occurs, rollback the transaction connection.rollback(); }
// Set auto commit to false and start a transaction
connection.setAutoCommit(false);
try {
// Execute multiple updates
Statement statement = connection.createStatement();
statement.executeUpdate("INSERT INTO Accounts (ID, Name) VALUES (10, 'Mike')");
statement.executeUpdate("INSERT INTO Accounts (ID, Name) VALUES (15, 'John')");
statement.close();
// Commit the transaction
connection.commit();
} catch(SQLException e) {
// If an error occurs, rollback the transaction
connection.rollback();
}
以下の例では、いくつかのことを紹介します。
- autoCommit フラグを false に設定します。これにより、接続にバインドされるトランザクションが開始されます。
- トランザクションのコンテキスト内で複数の更新を実行します。
- ステートメントが完了すると、commit()を呼び出すことでトランザクションがコミットされます。
- エラーが発生した場合は、rollback()メソッドを使用してトランザクションをロールバックします。
以下の操作のいずれかがローカルトランザクションを終了します。
- connection.setAutoCommit(true)- 以前に false に設定されていた場合
- Connection.commit()
- Connection.rollback()
- トランザクションはタイムアウトになると自動的にロールバックされます。
14.1.1.1. JDBC ローカルトランザクション制御の無効化
すべてのアクセスが読み取り専用で、トランザクションが必要ない場合でも、Data Virtualization 上のツールまたはフレームワークが setAutoCommit(false)、commit()、および rollback()を呼び出すことがあります。ローカルトランザクションデータ仮想化のスコープで XA トランザクションが開始され、コミットしようとすると、設定が複雑化したり、パフォーマンスが低下する可能性があります。
このような場合は、デフォルトの JDBC 動作を上書きし、実行されているコマンドに関係なくこれらのメソッドがアクションを実行しないことを示すことができます。ローカルトランザクションの使用を無効にするには、このプロパティーを JDBC 接続 URL に追加します。
disableLocalTxn=true
disableLocalTxn=true
ローカルトランザクションをオフにすると危険にさらされる可能性があり、データの読み取り時に(データの読み取り時)または一貫性のないデータにデータを書き込む可能性があります(データを書き込む場合)。安全性を確保するには、呼び出したアプリケーションがローカルトランザクションを必要としないことを確かめる場合にのみこのモードを使用する必要があります。
14.1.2. トランザクションステートメント
ODBC クライアントにも適用されるトランザクション制御ステートメントが、ローカルトランザクション境界を明示的に制御します。関連するステートメントは以下のとおりです。
-
start TRANSACTION:
connection.setAutoCommit(false)
の同義語 -
COMMIT- synonym for
connection.setAutoCommit(true)
-
ROLLBACK:
connection.rollback()
の同義語で、自動コミットモードに戻ります。