この節では、アプリケーションがどのようにしてリモート・データベースを作動させるか、またそれがどのようにして一度に複数のデータベースを作動させるかを説明します。主な点を次に示します。
DB2 では、BACKUP、RESTORE、DROP DATABASE、CREATE DATABASE などのリモート・サーバー関数を、ローカル・アプリケーションであるかのように実行することができます。これらの関数をリモートに使用することの詳細については、 管理の手引き を参照してください。
作業単位とは、単一の論理トランザクションのことです。これは、すべての処理の実行が成功するか、または全体としては不成功と考えられる一連の SQL ステートメントから成り立っています。
リモート作業単位により、ユーザーまたはアプリケーション・プログラムは、作業単位あたり 1 つのロケーションでデータの読み取りまたは更新が行えます。これは、作業単位内での 1 つのデータベースへのアクセスをサポートします。アプリケーション・プログラムは複数のリモート・データベースにアクセスできますが、作業単位内では 1 つのデータベースにしかアクセスできません。
リモート作業単位には次の特徴があります。
複数サイト更新は、分散作業単位 (DUOW) および 2 フェーズ・コミットとしても知られています。これは、アプリケーションが、複数のリモート・データベース・サーバーにあるデータを、保全性を確実にしながら更新できるようにする関数です。複数サイト更新のよい例として、銀行でのトランザクションを挙げることができます。このトランザクションでは、ある口座の預金が別のデータベース・サーバーの口座に移されます。このようなトランザクションでは、1 つの口座での借り方の更新のコミットが、別の口座への貸し方の更新の処理がコミットされる時点で実行されることが重要です。複数サイト更新の考慮事項は、これらの口座によって表されるデータが 2 つの異なるデータベース・サーバーによって管理される状況に適用されます。
複数サイト更新を使用すれば、 1 つの作業単位内で複数の DB2 ユニバーサル・データベースのデータベースの読み取りおよび更新を行えます。 DB2 コネクトをインストールしているか、 DB2 ユニバーサル・データベース エンタープライズ・エディションで提供されている DB2 コネクト機能を使用している場合、ホストまたは AS/400 データベース・サーバー (DB2 ユニバーサル・データベース (OS/390 版) および DB2 ユニバーサル・データベース (AS/400 版) など) とともに、複数サイト更新を使用することもできます。複数サイト更新を他のデータベース・サーバーとともに使用する場合は、 DB2 コネクトでの複数サイト更新で説明しているように特定の制限があります。
トランザクション・マネージャーは、複数のデータベース間でのコミットを調整します。 TxSeries CICS のようなトランザクション処理 (TP) モニター環境では、 TP モニターは独自のトランザクション・マネージャーを使用します。そうでない場合は、DB2 とともに供給されるトランザクション・マネージャーが使用されます。 DB2 ユニバーサル・データベース (OS/2 版)、UNIX、および Windows 32 ビット オペレーティング・システムは、 XA (拡張アーキテクチャー) 準拠の資源管理プログラムです。 DB2 コネクトを使ってアクセスするホストおよび AS/400 データベース・サーバーは、 XA 準拠の資源管理プログラムです。また、DB2 ユニバーサル・データベース・トランザクション・マネージャーは、 XA 準拠トランザクション・マネージャーではない こと、すなわちトランザクション・マネージャーが調整できるのは DB2 データベースだけであることに注意してください。
複数サイト更新の詳細については、管理の手引き を参照してください。
複数サイト更新は、複数のデータベースで処理を行い、データ保全を保持したい場合に最も有効です。たとえば、銀行の各支店がそれぞれのデータベースを持っていた場合、現金転送アプリケーションは、次のことを行います。
1 つの作業単位でこれを行うことにより、両方のデータベースが更新されているか、またはいずれも更新されないようにできます。
表 26 は、複数サイト更新の SQL ステートメントのコーディング方法を説明しています。左の列は、複数サイト更新を使用しない SQL ステートメントを示し、右の列は、複数サイト更新と類似したステートメントを示しています。
表 26. RUOW および複数サイト更新 SQL ステートメント
RUOW ステートメント | 複数サイト更新ステートメント |
---|---|
CONNECT TO D1 SELECT UPDATE COMMIT CONNECT TO D2 INSERT COMMIT CONNECT TO D1 SELECT COMMIT CONNECT RESET |
CONNECT TO D1 SELECT UPDATE CONNECT TO D2 INSERT RELEASE CURRENT SET CONNECTION D1 SELECT RELEASE D1 COMMIT |
左列の SQL ステートメントは、各作業単位あたり 1 つのデータベースのみにアクセスします。これがリモート作業単位 (RUOW) アプリケーションです。
右列の SQL ステートメントは、1 つの作業単位内で複数のデータベースにアクセスします。これは複数サイト更新アプリケーションです。
SQL ステートメントの中には、複数サイト更新アプリケーションにおいて異なったコーディングおよび解釈をされるものもあります。
休止データベースに CONNECT ステートメントを出すことによっても、同じことが行える。これは、SQLRULES を STD に設定した場合は行えません。プリコンパイラー・オプション、SET CLIENT コマンド、API のいずれかを使用することにより、SQLRULES の値を設定できます。 SQLRULES (DB2) の省略時値により、CONNECT ステートメントを使用する接続の切り替えが可能になります。
解放とマークされた接続は、次の COMMIT で除去されるまで使用できる。ロールバックは接続の除去を行わないため、すでに存在している接続への再試行が可能です。 DISCONNECT ステートメント (またはプリコンパイラー・オプション) を使用して、コミットまたはロールバック後に接続を除去します。
SQLERRD(3) フィールドは、接続されたデータベースが作業単位において現在更新可能かどうかについての情報を戻します。次に、戻される可能性のある値を示します。
SQLERRD(4) フィールドにより戻される、接続の現在の特性についての情報を次に示します。
ツールまたはユーティリティーを作成中、接続が読み取り専用の場合にユーザーにメッセージを出したい場合があるかもしれません。
複数サイト更新アプリケーションをプリコンパイルするときには、 CLP 接続をタイプ 1 接続に設定する必要があります。そのように設定しないと、アプリケーションのプリコンパイルを試行したときに、 SQLCODE 30090 (SQLSTATE 25000) を受け取ります。接続タイプの設定について詳しくは、 コマンド解説書 を参照してください。以下のプリコンパイラー・オプションは、複数サイト更新を使用するアプリケーションをプリコンパイルするときに使用します。
上記のプリコンパイラー・オプションの詳細については、 コマンド解説書 を参照してください。
複数サイト更新プリコンパイラー・オプションは、最初のデータベース接続時に有効になります。 SET CLIENT API を使用することにより、接続がない場合に (接続が確立される前、またはすべての接続切断後)、接続の設定を置き換えることができます。 QUERY CLIENT API を使用することにより、アプリケーション・プロセスの現行接続の設定を照会することができます。
バインド・プログラムは、アプリケーション・プログラムで参照されるオブジェクトが存在しないと失敗します。複数サイト更新アプリケーションに対処する方法は 3 つあります。
ホストまたは AS/400 データベースに接続した XA トランザクション・マネージャーが調整する複数サイト更新の実行について詳しくは、 DB2 コネクト 使用者の手引き を参照してください。
以下の構成パラメーターは、複数サイト更新を実行するアプリケーションに影響を与えます。構成パラメーターは、LOCKTIMEOUT 以外は、データベース・マネージャー構成パラメーターです。 LOCKTIMEOUT は、データベース構成パラメーターです。
注: | ホストまたは AS/400 データベース・サーバーを使った環境での複数サイト更新には、SPM が必要です。詳細については、DB2 コネクト 使用者の手引き を参照してください。 |
上記の構成パラメーターの詳細については、 管理の手引き を参照してください。
次の制限が DB2 の複数サイト更新に適用されます。
BACKUP DATABASE BIND EXPORT IMPORT LOAD MIGRATE DATABASE PRECOMPILE PROGRAM RESTART DATABASE RESTORE DATABASE REORGANIZE TABLE ROLLFORWARD DATABASE