リモート・サーバに関連するトランザクションを管理する方法として、2 フェーズ・コミット・プロトコルが使用されます。SQL Anywhere は、ほとんどの場合においてトランザクションの整合性を保証します。しかし、1 つのトランザクションで 2 つ以上のリモート・サーバが呼び出されるときには、分散した作業単位が未定の状態で残る可能性があります。2 フェーズ・コミット・プロトコルを使用する場合でも、リカバリ処理は含まれません。
ユーザのトランザクションを管理する通常の論理は、次のようになっています。
SQL Anywhere は、BEGIN TRANSACTION 通知でリモート・サーバの作業を開始します。
トランザクションのコミットの準備が整うと、SQL Anywhere は、トランザクションの一部であったリモート・サーバのそれぞれに PREPARE TRANSACTION 通知を送信します。これによって、リモート・サーバがトランザクションをコミットする準備が整っていることを確実にします。
PREPARE TRANSACTION 要求が失敗すると、すべてのリモート・サーバは現在のトランザクションをロールバックするよう指示されます。
PREPARE TRANSACTION 要求がすべて成功すると、サーバはトランザクションに関わるリモート・サーバのそれぞれに、COMMIT TRANSACTION 要求を送信します。
BEGIN TRANSACTION によって開始すればどのようば文でも、トランザクションを開始できます。BEGIN TRANSACTION を明示しない場合は、SQL 文はリモート・サーバに送信されて、1 つのリモートの作業単位として実行されます。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |