![]() |
![]() |
![]() |
![]() |
![]() |
注意: Oracle Tuxedo CORBA環境でトランザクションを使用する方法の詳細は、『CORBAトランザクションの使用』を参照してください。トランザクションとは、関連するアクションの集まりです。グローバル・トランザクションとは、複数のプログラムおよび複数のリソース・マネージャにまたがる関連アクションの集まりです。この章で使用する「トランザクション」は、グローバル・トランザクションを意味します。
トランザクションを構成する操作がすべて成功するかまたは失敗するというルールを順守するトランザクションは、原子性という特性を持ちます。Oracle Tuxedoシステムでは、すべてのトランザクションは、原子性に加えて、一貫性、独立性、耐久性という3つの関連する特性を持つことが求められます。Oracle Tuxedoシステムで実行されるトランザクションのこうした4つの属性をACIDプロパティと呼びます。表4-1に、Oracle TuxedoトランザクションのACIDを示します。
• トランザクションは中断します(つまり、突然終了します)。
• トランザクションはロールバックします。つまり、このトランザクションで実行した処理を元に戻し、状態をトランザクションの実行前に戻します。たとえば、銀行口座からの金額の引出しに失敗し、処理がロールバックされると、口座には、トランザクションの実行前と同じ金額が保持され、残高としてトランザクションの実行前と同じ金額が表示されます。 クライアントは、トランザクションをコミットします。つまり、トランザクションを終了できる状態になり、結果を保存する必要があることを正式に通知します。たとえば、発注データベースの更新が永続化されると、出荷部門に送られた注文は、その部門のキューに永続的なレコードとして登録されます。小売店側では、CUST_ORDERサービスを原子性の原則に従って実行する必要があります。つまり、CUST_ORDERが実行された場合、データベースの更新と、出荷部門のキューへの顧客リクエストの登録の両方が成功する必要があります。CUST_ORDERサービスが常に原子性に基づいて処理されるようにするため、CUST_ORDERを呼び出すクライアントは、リクエストをグローバル・トランザクションに関連付けます。グローバル・トランザクションの一部として、操作は1つの作業単位として実行されます。CUST_ORDERサービスが呼び出されると、サーバーにクライアントのトランザクションが伝播されます。その結果、発注データベースへのアクセスと、出荷用キューへの注文の登録は、クライアントのトランザクションの一部となります。なんらかの原因でどちらかの操作が失敗すると、システム・エラーまたはアプリケーション・エラーが発生し、トランザクションの処理は元に戻され(ロールバックされ)ます。つまり、トランザクションは初期状態に戻ります。一方、2つの操作が両方とも成功すると、クライアントはトランザクションをコミットします。つまり、トランザクションの結果を確定することを正式に通知します。これで、発注データベースへの更新は永続的となり、出荷部門に送信された注文は、その部門のキューに登録されます。リソース・マネージャ(RM)は、データベース管理システムやApplication Queuing Managerのようなデータ・リポジトリであり、データにアクセスするためのツールを備えています。Oracle Tuxedoシステムは、1つまたは複数のRMを使用してアプリケーションの状態を管理します。たとえば、銀行の預金残高のレコードは、RMに保存されています。預金引出しサービスによってアプリケーションの状態が変わると、変更後の預金残高が、適切なRMに記録されます。表4-2は、個々のトランザクションのかわりにトランザクション・マネージャが行うアクションをまとめたものです。
グローバル・トランザクション識別子(GTRID)をトランザクションに割り当てます。 RMに適切なGTRIDを渡します。この結果、RMは、トランザクション処理でアクセスされるデータベース・レコードをモニターできます。 Oracle Tuxedoのトランザクションは、分散型のアーキテクチャで使用できます。たとえば、トランザクションに関与するローカル・マシンがリモート・マシンと通信し、このリモート・マシンが、さらに別のリモート・マシンと通信できます。この種類の配置で実行されるトランザクションの処理は、分散トランザクション処理と呼ばれます。システムでは、いつでもトランザクションをロールバック(初期状態に戻す)できるように、トランザクション情報を保持しておく必要があるため、分散トランザクション処理(DTP)の追跡は複雑になります。タスクを正常に実行するために、Oracle Tuxedoシステムは、トランザクションのすべての参加リソースに関する追跡情報を、トランザクション・ログ(TLOG)という専用のファイルに格納します。図4-1に、2つのトランザクション・マネージャ(TM)が使用されるアプリケーションを示します。2つのTMはどちらも同じTLOGに追跡データを記録します。図4-1 トランザクション管理Oracle Tuxedoシステムは、分散システムで実行されているすべてのトランザクションのフローを追跡します。これには、同時に実行されているものも含まれます。トランザクションをコミットする段階になると、コーディネータは、トランザクションに参加していたため他のトランザクションと区別できる必要のあるRMを把握することが必要になります。このため、Oracle Tuxedoシステムは、各トランザクションにグローバル・トランザクション識別子(GTRID)を割り当てます。グローバル・トランザクションは、コミットされるプロセスに含まれる場合にのみ、トランザクション・ログ(TLOG)に記録されます。TLOGには、2フェーズ・コミット・プロトコルの第1フェーズの最後に、グローバル・トランザクションの参加リソースからの応答が記録されます。アプリケーションでDomainsコンポーネントを使用している場合は、DomainsゲートウェイがDomainsグループのTMSの機能を果します。ただし、Domainsでは、Domains固有の情報のほか、TLOGの内容に似た情報を含む独自のトランザクション・ログを使用します。OracleデータベースにTLOGを書き込むには、次の手順を実行する必要があります。
1. Oracle Database 10gクライアント(以降)をインストールし、libclntsh.so.x.x (たとえば、libclntsh.so.10.1)のリンクlibclntsh.soを作成して、Linuxプラットフォームでリンクlibclntsh.soにLD_LIBRARY_PATHを設定します。
4.
• OracleデータベースにのみTLOGを書き込むことができます。サードパーティのデータベースはサポートされていません。
• TLOGDEVICE/DMTLOGDEVはOracleデータベース・スキーマを指し、Tuxedoでデータベース・ストレージ・デバイスとして処理されます。
• UBBCONFIGのTLOGNAMEは空にできません。複数のTLOGファイルがデータベースの同一スキーマに格納されている場合、DBAはTLOGNAMEが各TLOGについて一意であるようにする必要があります。そうすると、TuxedoでTLOGに対してTLOGNAMEで指定されたデータベース表に排他的にアクセスされます。
• アプリケーション・モジュールが別のモジュールから呼び出され、トランザクションに参加することを、トランザクションの影響を受けると表現します。アプリケーション・モジュールが影響を受けると、Oracle Tuxedoシステムはすべての参加リソースを追跡して、2フェーズ・コミットに関連付ける参加リソースを決定します。図4-2に、システムが参加リソースを追跡する方法を示します。図4-2 トランザクション上の影響前述の図では、クライアント1がトランザクションを開始し、A、BおよびCの3つのサービスを呼び出します。サービスA、B、Cは、トランザクションの開始後に呼び出されたため、トランザクションの影響を受けています。サーバーA、BおよびCによって実行されるすべての処理は、クライアント1によって開始されたトランザクションの一部です。すべての処理が1つの単位として実行されます。したがって、すべて一緒に実行されて成功するか、または失敗してtpabortを呼び出してロールバックされるかのいずれかです。トランザクションが失敗すると、初期状態に戻り、リソース・マネージャ上のトランザクションの結果は元に戻されます。(トランザクション内で認識されていないリソース・マネージャや、トランザクション外からアクセスされたリソース・マネージャは、ロールバックできません。)
1. Client_1は、tpbegin()を使用してトランザクションを開始します。
2. Client_1は、tpcall()を使用してService_Aを呼び出します。Service_Aの特徴は、次のとおりです。
a. トランザクションの影響を受けます
b.
3. Client_1は、tpcall()を使用してService_Bを呼び出します。Service_Bの特徴は、次のとおりです。
a. トランザクションの影響を受けます
b.
4. Client_1は、tpcall()を使用してService_Cを呼び出します。Service_Cの特徴は、次のとおりです。
a. トランザクションの影響を受けます
b.
5. Client_1は、tpcommit()を使用して、コミットのプロセスを開始します。
• 『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』のグローバル・トランザクションのコーディングに関する項
• 『Oracle Tuxedo ATMIの紹介』のATMIの使用に関する項
• Oracle Tuxedo CORBA環境でトランザクションを使用する方法の詳細は、『CORBAトランザクションの使用』を参照してください