トランザクションの管理
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.