リモートサーバーに関連するトランザクションを管理する方法として、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 つのリモートの作業単位として実行されます。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |