Sun GlassFish Enterprise Server v3 管理ガイド

第 21 章 トランザクションの管理

この章では、asadmin コマンド行ユーティリティーを使用して、Sun GlassFishTM Enterprise Server 環境でトランザクションサービスを管理する方法について説明します。トランザクションを手動で回復する手順についても説明します。

ここでは、次のテーマを取り上げます。

本章で説明するタスクを 管理コンソール から実行する手順については、管理コンソール オンラインヘルプを参照してください。トランザクションサービス、トランザクションログ、および分散トランザクションの回復の設定については、『Sun GlassFish Enterprise Server v3 Application Development Guide』の第 15 章「Using the Transaction Service」を参照してください。

トランザクションについて

「トランザクション」は、アプリケーション内の独立したアクションをひと続きにまとめたもので、一連のアクションのすべてが正常に完了する必要があります。トランザクションでは、1 つ以上のアクションをそれ以上分割不可能な作業単位にまとめることで、データの完全性と整合性を保証しています。すべてのアクションが完了しなかった場合、変更はロールバックされます。

たとえば、当座預金口座から普通預金口座に資金を移動する場合は、一般的に次のような手順が発生します。

  1. 当座預金口座にその移動をカバーするだけの金額があるかどうかを確認します。

  2. その金額を当座預金口座の借方に記帳します。

  3. その金額を普通預金口座の貸方に記帳します。

  4. その移動を当座預金口座ログに記録します。

  5. その移動を普通預金口座ログに記録します。

これらの手順をまとめて、1 つのトランザクションと見なします。

すべての手順が正常に完了すれば、トランザクションは「コミット」されます。いずれかの手順が失敗した場合は、それ以前の手順で行われた変更がすべてロールバックされ、当座預金口座と普通預金口座はトランザクションが開始される前の状態に戻されます。この種類のイベントは「ロールバック」と呼ばれます。通常のトランザクションは、コミットされた状態かロールバックされた状態で終了します。

次の要素は、さまざまな API と機能を実装することで、信頼性の高いトランザクション処理に貢献します。

トランザクションサービスの管理

この節で説明する asadmin サブコマンドを使用して、単一のトランザクションをロールバックできます。ロールバックを行うには、アクティブなトランザクションを表示して、ロールバックが必要なトランザクションを正しく識別できるように、トランザクションサービスを停止する必要があります。また、これらの操作のあと、トランザクションサービスを再開する必要があります。

トランザクションサービスの設定と自動回復の設定の手順については、『Sun GlassFish Enterprise Server v3 Application Development Guide』の第 15 章「Using the Transaction Service」を参照してください。

ここでは、次のテーマを取り上げます。

Procedureトランザクションサービスを停止する

トランザクションサービスを停止するには、リモートモードで freeze-transaction-service サブコマンドを使用します。トランザクションサービスを停止すると、実行中のすべてのトランザクションがただちに中断されます。実行中のトランザクションをロールバックする前に、トランザクションサービスを停止する必要があります。

停止されたトランザクションサブシステムでこのサブコマンドを実行しても、影響はありません。トランザクションサービスは、unfreeze-transaction-service サブコマンドを使用して再開するまで、中断されたままになります。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. freeze-transaction-service(1) サブコマンドを使用して、トランザクションサービスを停止します。


例 21–1 トランザクションサービスの停止

この例では、トランザクションサービスを停止します。


asadmin> freeze-transaction-service
Command freeze-transaction-service executed successfully

参照

コマンド行に asadmin help freeze-transaction-service と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedureトランザクションをロールバックする

状況に応じて、特定のトランザクションをロールバックできます。トランザクションをロールバックする前に、トランザクション処理を中断するためにトランザクションサービスを停止する必要があります。特定のトランザクションをロールバックするには、リモートモードで rollback-transaction サブコマンドを使用します。

始める前に

実行中のトランザクションをロールバックする前に、トランザクションサービスを停止します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. ロールバックするトランザクションの ID を確認します。

    アクティブなトランザクションの ID を一覧表示するには、get サブコマンドを使用して activeids 統計の監視データを取得します。「トランザクションサービスの統計」を参照してください。

  3. rollback-transaction(1) サブコマンドを使用して、トランザクションをロールバックします。


例 21–2 トランザクションのロールバック

この例では、トランザクション ID が 0000000000000001_00 のトランザクションをロールバックします。


asadmin> rollback-transaction 0000000000000001_00
Command rollback-transaction executed successfully

参照

コマンド行に asadmin help rollback-transaction と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

Procedureトランザクションサービスを再開する

中断されている実行中のトランザクションをすべて再開するには、リモートモードで unfreeze-transaction-service サブコマンドを使用します。トランザクションサービスを凍結したあとは、このサブコマンドを実行してサービスを再開します。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. unfreeze-transaction-service(1) サブコマンドを使用して、中断されているトランザクションサービスを再開します。


例 21–3 トランザクションサービスの再開

この例では、凍結されているトランザクションサービスを再開します。


asadmin> unfreeze-transaction-service
Command unfreeze-transaction-service executed successfully

参照

コマンド行に asadmin help unfreeze-transaction-service と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。

トランザクションの回復

一般的にサーバーまたはリソースマネージャーのクラッシュが原因で、コミットまたはロールバックの処理が中断される場合があります。クラッシュが発生すると、一部のトランザクションがステップの間に取り残される可能性があります。Enterprise Server は、これらの障害を回復し、サーバーの起動時にそのトランザクションを完了するように設計されています。失敗したトランザクションが複数のサーバーにわたっている場合は、トランザクションを開始したサーバーがトランザクションの結果を取得しようとしてほかのサーバーに問い合わせる場合があります。ほかのサーバーにアクセスできない場合、トランザクションは特殊な結果判別の情報を使用して、その結果を判別します。トランザクションはサーバーの起動時に解決されます。

クラッシュ以外の障害が発生している場合は、次の手順で手動回復を実行することができます。

Procedureトランザクションを手動で回復する

サーバー上のリソースで障害が発生したときに保留中になったトランザクションを手動で回復するには、リモートモードで recover-transactions サブコマンドを使用します。サーバーがクラッシュしたあとに、手動のトランザクション回復を使用してトランザクションを回復することはできません。手動による操作は、リソースで予期しない障害が発生しても、まだサーバーが動作している状況での回復を目的としています。サーバーがクラッシュした場合、不確かなトランザクションを回復できるのは、完全な起動による回復処理だけです。

  1. サーバーが実行されていることを確認します。

    リモートサブコマンドには、実行中のサーバーが必要です。

  2. recover-transactions(1) サブコマンドを使用して、トランザクションを手動で回復します。


例 21–4 手動によるトランザクションの回復

この例では、sampleserver でトランザクションの手動回復を実行します。


asadmin recover-transactions sampleserver
Transaction recovered.

参照

コマンド行に asadmin help recover-transactions と入力して、このサブコマンドの完全な構文とオプションを確認することもできます。