分散データベースとは、異なるノード上の複数の物理データベースで構成される単一の論理データベースです。分散型の文とは、データベース・リンクによってリモート・ノードにアクセスする任意のSQL文です。分散トランザクションには、分散データベースの複数のノードでデータを更新するための分散型の文が、1つ以上設定されています。その更新が1つのノードのみに影響するときは、そのトランザクションは分散型ではありません。
コミットを発行すると、分散トランザクションによる影響を受ける各データベースの変更が確定されます。コミットのかわりにロールバックを発行すると、すべての変更が取り消されます。ただし、コミットまたはロールバック中にネットワークやコンピュータで障害が発生すると、分散トランザクションの状態は不明またはインダウトになることがあります。そのような場合、FORCE TRANSACTION
システム権限があれば、FORCE
句を使用して、ローカル・データベースでトランザクションを手動でコミットまたはロールバックできます。このトランザクションは、データ・ディクショナリ・ビューDBA_2PC_PENDING
にあるトランザクションIDを引用符で囲んだリテラルで指定する必要があります。次に、いくつかの例を示します。
EXEC SQL COMMIT FORCE '22.31.83'; ... EXEC SQL ROLLBACK FORCE '25.33.86';
FORCE
では、指定したトランザクションのみがコミットまたはロールバックされるため、現行のトランザクションには影響がありません。インダウトのトランザクションは、手動ではセーブポイントにロールバックできないことに注意してください。
COMMIT
文中でCOMMENT
句を使用すると、分散トランザクションに関連付けるコメントを指定できます。トランザクションがインダウトになると、COMMENT
で指定したテキストがトランザクションIDとともに、データ・ディクショナリ・ビューDBA_2PC_PENDING
に格納されます。テキストには、長さ50文字以内の引用符付きリテラルを指定する必要があります。次に例を示します。
EXEC SQL COMMIT COMMENT 'In-doubt trans; notify Order Entry';
分散トランザクションの詳細は、『Oracle Database概要』を参照してください。