トランザクションの管理
ttIsql
ユーティリティには、トランザクションを管理するためのいくつかの組込みコマンドが用意されています。
次に、これらのコマンドの概要を示します。
-
autocommit
: 自動コミット機能を有効または無効にします。これは、set
コマンドの属性としても設定できます。 -
commit
: 現行のトランザクションをコミットします。 -
commitdurable
: データベース障害が発生した場合に、コミットされた作業がディスク上のトランザクション・ログに永続的にコミットされるようにします。 -
isolation
- トランザクションの分離レベルを変更します。これは、set
コマンドの属性としても設定できます。 -
rollback
: 現行のトランザクションをロールバックします。 -
sqlquerytimeout
: アプリケーションに戻されるまでのSQL文の実行待機時間(秒)を指定します。これは、set
コマンドの属性としても設定できます。
デフォルトでは、ttIsql
を起動すると、SQLスクリプト内でも自動コミット機能が有効になります。このモードでは、データベースに対するすべてのSQL操作が自動的にコミットされます。
自動コミット機能を無効にするには、引数0
を指定してautocommit
コマンドを実行します。自動コミットが無効になっている場合は、commit
コマンド、commitdurable
コマンドまたはrollback
コマンドを実行して、トランザクションを手動でコミットまたはロールバックする必要があります。commitdurable
コマンドを実行すると、データベース障害が発生した場合でも、トランザクションの結果がディスクに保持されます。自動コミットが無効な場合、ttIsql
が終了しても、ロールバックされるコミットされていない文は報告されません。
isolation
コマンドを使用すると、現行の接続のトランザクション分離レベルを変更できます。分離レベルは、トランザクションの開始時にのみ変更できます。isolation
コマンドには、READ_COMMITTED
またはSERIALIZABLE
のいずれかを定数として指定できます。引数を指定しないでisolation
コマンドを変更すると、現在の分離レベルがレポートされます。
sqlquerytimeout
コマンドでは、SQL文のタイムアウト間隔を設定します。SQL文の実行時間がsqlquerytimeout
コマンドで設定した秒数を超えると、SQL文は実行されず、6111エラーが生成されます。Java開発者ガイドのSQL文のタイムアウト期間の設定、およびC開発者ガイドのSQL文のタイムアウト期間の設定を参照してください。
ノート:
TimesTenのロールバック機能および問合せタイムアウト機能を使用しても、Oracleデータベースで処理中のキャッシュ操作が停止されることはありません。このような操作には、PassThrough文、フラッシング、手動ロード、手動リフレッシュ、SYNCHRONOUS WRITETHROUGH、伝播および動的ロードが含まれます。
次に、ttIsql
の組込みトランザクション管理コマンドの一般的な使用例を示します。
$ ttIsql Copyright (c) Oracle. All rights reserved. Type ? or "help" for help, type "exit" to quit ttIsql. Command> connect "DSN=database1"; Connection successful: DSN=database1;DataStore=/disk1/databases/database1;DatabaseCharacterSet=AL32UTF8; ConnectionCharacterSet=AL32UTF8;PermSize=128; (Default setting AutoCommit=1) Command> autocommit 0; Command> CREATE TABLE LOOKUP (KEY NUMBER NOT NULL PRIMARY KEY, VALUE CHAR (64)); Command> commit; Command> INSERT INTO LOOKUP VALUES (1, 'ABC'); 1 row inserted. Command> SELECT * FROM LOOKUP; < 1, ABC > 1 row found. Command> rollback; Command> SELECT * FROM LOOKUP; 0 rows found. Command> isolation; isolation = READ_COMMITTED Command> commitdurable; Command> Set sqlquerytimeout 5; Command> select count (*) from tables, views, columns, all_source; 6111: SQL statement has reached its timeout limit [timeout msec = 5000, elapsed msec = 5120] and has been terminated The command failed. Command> sqlquerytimeout; Query timeout = 10 seconds Command> disconnect; Disconnecting... Command> exit; Done.