DB2 for i のカタログ・ビュー
この付録では、DB2® for i のカタログに入っているビューについて説明します。
データベース・マネージャーは、それぞれのリレーショナル・データベース 中のデータに関する情報が入っている一組の表を維持管理しています。 これらの表をまとめてカタログ と呼びます。 カタログ表 には、DB2 for i でサポートされる表、ユーザー定義関数、特殊タイプ、パラメーター、プロシージャー、パッケージ、ビュー、索引、別名、シーケンス、変数、制約、トリガー、XSR オブジェクト、および言語に関する情報が含まれています。カタログには、このシステムからアクセス可能なすべての リレーショナル・データベースに関する情報も含まれています。
カタログ・ビューには次の 3 つのクラスがあります。
- IBM® i のカタログ表およびビュー
IBM i のカタログ表およびビューは、ANS および ISO のカタログ・ビューをモデルにしていますが、ANS および ISO のカタログ・ビューとまったく同じというわけではありません。iSeries のカタログ表およびビューは、DB2 for i の旧リリースと互換性があります。
これらの表およびビューは、スキーマ QSYS および QSYS2 の中に入っています。
カタログ表およびビューには、リレーショナル・データベース全体にわたるすべての表、パラメーター、プロシージャー、関数、特殊タイプ、パッケージ、XSR オブジェクト、ビュー、索引、別名、シーケンス、変数、トリガー、および制約に関する情報が含まれています。SQL スキーマの作成時に、そのスキーマにある表、パッケージ、ビュー、索引、および制約に関する情報のみが含まれているビューのサブセットが追加作成され、スキーマに組み込まれます。
- ODBC および JDBC のカタログ・ビュー
ODBC および JDBC のカタログ・ビューは、ODBC および JDBC の メタデータ API 要求を満たすように設計されています (例えば、SQLCOLUMNS)。 これらのビューは、DB2 LUW バージョン 8 のビューと互換性があります。ODBC または JDBC がそのメタデータ API を拡張または変更すると、それに応じてこれらのビューも変更されます。
これらのビューはスキーマ SYSIBM の中に入っています。
- ANS および ISO のカタログ・ビュー
ANS および ISO のカタログ・ビューは、ANS および ISO の SQL 標準 (情報 スキーマ (Information Schema) カタログ・ビュー) に準拠するよう 設計されています。 これらのビューは、ANS および ISO 標準が拡張または変更されると、それに応じて変更されます。
ビューには、将来、標準が拡張された場合に備えて予約されている 列がいくつか含まれています。
これらのビューには、次の 2 つのバージョンがあります。
-
これらのビューの最初のバージョンは、スキーマ INFORMATION_SCHEMA1の中に入っています。ユーザーが特定の特権を持っているオブジェクトに関連した行のみがビューに含まれます。
このバージョンは、ANS および ISO SQL 標準と互換性があります。
このカタログ・ビューのセットを使用して、 ユーザーが特権を持っていないオブジェクトに関する情報を参照できないようにするには、 他のカタログ・ビューに対する特権をユーザーおよび PUBLIC から取り消す必要があります。
- これらのビューの 2 番目のバージョンはスキーマ SYSIBM の中に入っています。 ユーザーがビュー内の行に関連したオブジェクトに対する特権を持っているかどうかにかかわらず、 すべての行がこれらのビューに含まれます。 これらのビューは DB2 LUW バージョン 8 と互換性があり、一般に QSYS2 内の ANS および ISO ビューよりパフォーマンスが良好です。
例えば、ユーザーが QSYS2.TABLES および SYSIBM.TABLES カタログ・ビューに対する SELECT 特権を持っており、WORK.EMPLOYEE という表に対する特権は持っていないものと想定します。 以下の SQL ステートメントは結果行を戻しません。
SELECT * FROM QSYS2.TABLES WHERE TABLE_SCHEMA = 'WORK' AND TABLE_NAME = 'EMPLOYEE'
ただし、以下の SQL ステートメントは結果行を戻します。
SELECT * FROM SYSIBM.TABLES WHERE TABLE_SCHEMA = 'WORK' AND TABLE_NAME = 'EMPLOYEE'
-
これらのビューの最初のバージョンは、スキーマ INFORMATION_SCHEMA1の中に入っています。ユーザーが特定の特権を持っているオブジェクトに関連した行のみがビューに含まれます。
このバージョンは、ANS および ISO SQL 標準と互換性があります。
注意
カタログ内の名前: 一般に、カタログ表の 列に格納されるすべての名前は、区切り文字なしで、大文字小文字の区別が あります。 例えば、次の表が作成されたとします。
CREATE TABLE "colname"/"long_table_name"
("long_column_name" CHAR(10),
INTCOL INTEGER)
SQL 名とシステム名の間のマッピングに関する情報を戻すには、次の 選択ステートメントを使用できます。
SELECT TABLE_NAME, SYSTEM_TABLE_NAME, COLUMN_NAME, SYSTEM_COLUMN_NAME
FROM QSYS2/SYSCOLUMNS
WHERE TABLE_NAME = 'long_table_name' AND
TABLE_SCHEMA = 'colname'
次の行が戻されます。
TABLE_NAME | SYSTEM_TABLE_NAME | COLUMN_NAME | SYSTEM_COLUMN_NAME |
---|---|---|---|
long_table_name | "long0001" | long_column_name | LONG_00001 |
long_table_name | "long0001" | INTCOL | INTCOL |
カタログ内のシステム名: 通常は、短い システム列名より、長い SQL 列名を使用してください。 IBM i のカタログ表およびビュー用の短いシステム列名は、旧リリースおよび他の DB2 プロダクトとの互換性を確保するために明示指定できるように維持されているものです。ODBC と JDBC のカタログ・ビュー、および ANS と ISO の カタログ・ビュー用の短いシステム列名は、明示的には維持さ れず、リリース間で変わる可能性があります。
カタログ内の NULL 値: 列の情報が適用されな い場合は、NULL 値が戻されます。 上記で作成された表を使用すると、次の選択ステートメント で NUMERIC_SCALE および CHARACTER_MAXIMUM_LENGTH を照会し、データが 列のデータ・タイプに適用されなかった場合は、NULL 値が戻されます。
SELECT COLUMN_NAME, NUMERIC_SCALE, CHARACTER_MAXIMUM_LENGTH
FROM QSYS2/SYSCOLUMNS
WHERE TABLE_NAME = 'long_table_name' AND
TABLE_SCHEMA = 'colname'
次の行が戻されます。
COLUMN_NAME | NUMERIC_SCALE | CHARACTER_MAXIMUM_LENGTH |
---|---|---|
long_column_name | ? | 10 |
INTCOL | 0 | ? |
数値の位取りは文字の列では無効であるため、"long_column_name" の列の NUMERIC_SCALE には NULL 値が戻されます。 文字長は数値の列では無効であるため、INTCOL の列の CHARACTER_MAXIMUM_LENGTH には NULL 値が戻されます。
インストールとバックアップに関する考慮事項: ある種のカタログ表、およびカタログ表とビューに関して作成された ビューは、定期的に保管してください。
- カタログ表 QSYS.QADBXRDBD には、リレーショナル・データベース 情報が入っています。 この表は定期的に保管する必要があります。
- ILE の外部関数またはプロシージャー、または SQL の関数またはプロシージャーを復元すると、これらの カタログ表に情報が自動的に挿入されます。 ただし、非 ILE 外部関数およびプロシージャーの場合には、情報の 自動挿入は行われません。 非 ILE 外部関数またはプロシージャーの定義をバックアップするには、カタログ表 SYSROUTINES および SYSPARMS を確実に保管するか、または これらの関数およびプロシージャーを作成するために使用した SQL ソース・ ステートメントのバックアップを必ずとっておくようにしてください。
- スキーマ QSYS2 または SYSIBM 内のカタログ・ビューは、すべて システム・オブジェクトです。 つまり、これらのカタログ・ビューに関して作成されたユーザー・ビュー は、オペレーティング・システムのインストール時にすべて削除されます。 従属オブジェクトも、すべて削除されます。 この削除要件を避けるために、インストールの前にビューを保管しておき、後で復元することができます。
- QSYS ライブラリー内のカタログ表もシステム・オブジェクトです。 しかし、QSYS ライブラリー内のカタログ表は、インストール時には削除 されません。 したがって、これらの表に関して作成されたビューはすべて、インストール ・プロセスの終了後も保存されています。
カタログ・ビューへの特権の認可: カタログ の表およびビューは、他のデータベース表およびデータベース・ビューと類 似しています。 権限を持っているユーザーであれば、他 の表からデータを検索するときと同じように、SQL ステートメントを使用し てカタログ・ビューのデータを見ることができます。カタログの表 およびビューでは、出荷時に、PUBLIC に SELECT 特権が認可されています。 この特権を取り消して、個々のユーザーに SELECT 特権を認可すること ができます。
QSYS カタログ表: ほとんどのカタログ・ビュー は、QSYS ライブラリー (データベース相互参照ファイルとも言う) の中の 次の表に基づいています。 これらの表は、出荷時に SELECT 特権は PUBLIC には認可されていませ ん。また、これらの表を直接使用してはなりません。
QADBCCST | QADBPKG | QADBXSFLD |
QADBFDEP | QADBXCTLS | QADBXTRIGB |
QADBFCST | QADBXCTLSD | QADBXTRIGC |
QADBIFLD | QADBXRDBD | QADBXTRIGD |
QADBKFLD | QADBXREF |
SELECT * の使用: 新規の機能がインプリメントされ、 ISO/ANSI 標準が変化するにつれて、新しい列がカタログ内の表およびビューに追加されます。 そのため、ご使用のアプリケーションがこれらの新規の列を許容できる場合を除いて、 カタログ表およびカタログ・ビューにアクセスする際に SELECT * を使用しないことをお勧めします。