IBM i オペレーティング・システム上の分散リレーショナル・データベース・アプリケーションのプログ
ラミングに関する考慮事項は、次の 2 つのカテゴリーに分けられます。つまり、ローカル・システム上で サポートされる機能を扱うものと、他のシステムに接続しなければならないことに由来するものです。
関連資料:
43ページの『ヒント: 分散リレーショナル・データベース・アプリケーションの設計』
分散リレーショナル・データベース・アプリケーションと、ローカル・データベースだけに使用するために 開発されたアプリケーションとは、要件に大きな違いがあります。
分散リレーショナル・データベース・オブジェクトの命名:
SQL オブジェクトは、IBM i オブジェクトとして作成され、保守されます。DB2 for i プログラミングで は、次の命名方式のいずれかを使用することができます。すなわち、システムと (*SYS) と SQL (*SQL) のいずれかです。
使用する命名規則によって、ファイル名およびテーブル名を修飾する方法に影響が生じます。また、セキュ リティーおよび対話式 SQL 画面で使用される用語にも影響があります。分散リレーショナル・データベー ス・アプリケーションが別の IBM i プラットフォーム上のオブジェクトにアクセスするのであれば、命名 規則は、2 つのうちどちらを使用することもできます。ただし、プログラムが DB2 for i でないシステム にアクセスする場合は、SQL 名だけしか使用できません。名前は、SQL の開始 (STRSQL) コマンドの NAMING パラメーター、CRTSQLxxx コマンドのいずれかの OPTION パラメーター、または呼び出しレ ベル・インターフェース (CLI) および Java Database Connectivity (JDBC) の命名接続プロパティーを使用 して指定できます。
関連資料:
命名規則
システム (*SYS) 命名規則:
システム命名規則を使用するときは、ファイルは、ライブラリー/ファイル という形式によってライブラリ ー名で修飾されます。
テーブルがこの命名規則を使用して作成される場合には、テーブルが作成されるライブラリーの共通権限が 前提となります。テーブル名が明示的に修飾されず、デフォルトのコレクション名が CRTSQLxxx コマン ドまたは CRTSQLPKG コマンドの DFTRDBCOL パラメーターで使用される場合には、デフォルトのコレ クション名が静的 SQL ステートメントで使用されます。ファイル名が明示的に修飾されず、デフォルトの コレクション名が指定されない場合には、以下の規則が適用されます。
v 特定の CREATE ステートメント以外のすべての SQL ステートメントで、 SQL は、修飾されていない ファイルを見つけるために、ライブラリー・リスト (*LIBL) を検索します。
v CREATE ステートメントでは、修飾されていないオブジェクトについて、以下のように解決します。
– CREATE TABLE: テーブル名は明示的に修飾されなければなりません。
– CREATE VIEW: ビューは、副選択で参照された最初のライブラリーの中に作成されます。
– CREATE INDEX: 索引は、その索引が作成されるテーブルが入っているコレクションまたはライブラ リーの中に作成されます。
SQL (*SQL) 命名規則:
SQL 命名規則を使用するときは、テーブルは、コレクション.テーブル という形式によってコレクション 名で修飾されます。
テーブル名が明示的に修飾されず、デフォルトのコレクション名が CRTSQLxxx コマンドまたは構造化照 会言語パッケージの作成 (CRTSQLPKG) コマンドのデフォルトのリレーショナル・データベース・コレクシ
ョン (DFTRDBCOL) パラメーターで指定される場合には、デフォルトのコレクション名が使用されます。
テーブル名が明示的に修飾されず、デフォルトのコレクション名が指定されない場合には、以下の規則が適 用されます。
v 静的 SQL では、デフォルトの修飾名はプログラム所有者のユーザー・プロファイルです。
v 動的 SQL または対話式 SQL では、デフォルトの修飾名はステートメントを実行するジョブのユーザ ー・プロファイルです。
関連資料:
構造化照会言語パッケージの作成 (CRTSQLPKG) コマンド デフォルトのコレクション名:
プログラムのプリコンパイル時に、 CRTSQLxxx コマンドの DFTRDBCOL パラメーターにデフォルトの コレクション名を指定することによって、デフォルトのコレクション名が SQL プログラムで使用されるよ うに指定することができます。
DFTRDBCOL パラメーターは、 *SYS 命名規則が使用される場合、修飾されていないファイルのライブラ リーとして、あるいは、*SQL 命名規則が使用される場合、修飾されていないテーブルのコレクションとし て、コレクション名をプログラムに提供します。プログラムのプリコンパイル時にデフォルトのコレクショ ン名を指定しなかった場合には、それぞれの命名規則に応じて、修飾されていない名前に関する規則が適用 されます。コレクション名が適用されるのは、静的 SQL ステートメントの場合だけです。
構造化照会言語パッケージの作成 (CRTSQLPKG) コマンドで DFTRDBCOL パラメーターを使用して、パッ ケージのデフォルトのコレクションを変更することもできます。また、SQL プログラムがコンパイルされ た後で、新規 SQL パッケージを作成して、デフォルトのコレクションを変更することができます。
関連タスク:
150ページの『SQL パッケージの作成 (CRTSQLPKG) コマンドの使用』
SQL パッケージの作成 (CRTSQLPKG) コマンドを入力して、コンパイル済みの分散リレーショナル・デー タベース・プログラムから SQL パッケージを作成することができます。また、このコマンドを使用すれ ば、前に作成されていた SQL パッケージを置き換えることもできます。
関連資料:
構造化照会言語パッケージの作成 (CRTSQLPKG) コマンド 分散リレーショナル・データベースへの接続:
分散リレーショナル・データベース・アプリケーションが分散される のは、それが別のシステム上のリレ ーショナル・データベースへの接続可能性を備えているからです。
CONNECT ステートメントには、同じ構文でしかも働きの異なる 2 つのタイプがあります。
v CONNECT (タイプ 1) は、リモート作業単位用に使用されます。
v CONNECT (タイプ 2) は、分散作業単位用に使用されます。
組み込み SQL アプリケーションの場合、 CRTSQLxxx コマンドの RDBCNNMTH パラメーターは CONNECT のタイプを判別します。 CLI および Java アプリケーションは、言語の性質から、常に分散作 業単位を使用します。
関連資料:
134ページの『分散リレーショナル・データベースのステートメント』
SQL 言語を使用して組み込まれるステートメントは、特に分散リレーショナル・データベースをサポート するためのものです。
リモート作業単位:
リモート作業単位 機能は、 SQL ステートメントのリモートでの準備および処理のために提供されていま す。
システム A の活動化グループは、システム B のサーバーに接続できます。その後、その活動化グループ は、1 つ以上の作業単位の中で、 B のオブジェクトを参照する静的または動的 SQL ステートメントを何 回でも処理できます。B での 1 つの作業単位の終了後、活動化グループは、システム C などのサーバー に接続できます。
ほとんどの SQL ステートメントは、以下の制約付きでリモートで準備し、処理できます。
v 1 つの SQL ステートメントで参照するオブジェクトは、すべて、同じサーバーで管理しなければなりま せん。
v 1 つの作業単位の中の SQL ステートメントは、すべて、同じサーバーで実行しなければなりません。
活動化グループの状態:
活動化グループは、いつも 3 つの状態のいずれかになっています。
3 つの状態は次のとおりです。
v 接続可能で接続済み v 接続不能で接続済み v 接続可能で未接続
次の図は、状態遷移を示しています。
活動化グループの初期の状態は、接続可能 で接続済み です。活動化グループが接続されるサーバーは、
CRTSQLxxx コマンドと STRSQL コマンドの RDB パラメーターによって判別され、暗黙の CONNECT 操作を含むことができます。暗黙の CONNECT 操作は、暗黙または明示の CONNECT 操作が、正常であ ったかどうかは別として、すでに行われている場合には行われません。したがって、活動化グループは、 2 度以上サーバーに暗黙に接続されることはありません。
接続可能で接続済み状態:
活動化グループはサーバーに接続され、 CONNECT ステートメントを実行することができます。活動化グ ループがこの状態に入るのは、ロールバックまたは正常なコミットを接続不能で接続済みの状態から完了し たとき、または接続可能で未接続の状態から CONNECT ステートメントが正常に実行されたときです。
接続不能で接続済みの状態:
活動化グループはサーバーに接続されていますが、サーバーを変更するための CONNECT ステートメント は正常に実行されませんでした。活動化グループが接続可能で接続済み状態からこの状態に入るのは、
CONNECT、COMMIT、または ROLLBACK 以外の SQL ステートメントを実行したときです。
接続可能で未接続状態:
活動化グループがサーバーに接続していません。実行できる唯一の SQL ステートメントは、CONNECT です。
活動化グループがこの状態になるのは、以下の場合です。
v 接続は前に解放されており、COMMIT が正常に実行された。
v 接続が SQL DISCONNECT ステートメントを使用して切断されている。
v 接続は接続可能状態だったが、CONNECT ステートメントは正常に行われなかった。
活動化グループは、CONNECT によって接続可能状態でなくなることはないので、 CONNECT ステートメ ントを連続して正常に実行することができます。活動化グループが現在接続されているサーバーに
CONNECT を行うと、その他の場合の CONNECT ステートメントと同様に実行されます。
図23. リモート作業単位の活動化グループの接続状態遷移