この付録では、Oracle Rdbのシステム表について説明します。
Oracle Rdbでは、データベースに関する情報が一連の特殊なシステム表として格納されます。システム表は、Oracle Rdbメタデータの最も信頼のおけるソースです。メタデータによってデータベースの構造が定義されます。たとえば、特定の表を構成するフィールドやその表の索引付けを行うフィールドがメタデータによって定義されます。
大部分のシステム表の定義は標準仕様であり、Oracle Rdbの将来のバージョンでも保持される見込みです。
特定のシステム表の各記述において、BLRはバイナリ言語表現を意味します。これは、Oracle Rdbのデータ操作を表すために内部的に使用される低レベルの構文です。
以降の項では、Oracle Rdbの特定のバージョンにおけるシステム表の使用方法、または他のデータベースの構成メンバーや操作、製品に関連したシステム表の使用方法について説明します。
I.1 データ・ディクショナリの使用
データ・ディクショナリにデータ定義を格納できますが、データベース・システムは、データ定義に関してそのデータベース・ファイルのシステム表のみを参照します。システム表は、データベースにおける内部のデータ・ディクショナリとみなすこともできます。この方法によってパフォーマンスが向上します。実行時にOracle Rdbがデータ・ディクショナリにアクセスする必要がないからです。
I.2 システム表の変更
データベースの作成時、Oracle Rdbではシステム表の定義、移入および操作が行われます。ユーザーがデータベースでデータ定義操作を実行すると、Oracle Rdbはシステム表を読み取って変更し、ユーザーの操作を反映させます。Oracle Rdbのシステム表は、データ操作言語を使用して変更できません。システム表のフィールドに基づくドメインも定義できません。ただし、Oracle Rdbの正規のデータ操作文を使用してシステム表の内容を取得することは可能です。つまり、システム表のフィールドを取得し、プログラムによりデータベースの構造と特性を判断できます。
I.3 メタデータの更新
SQL SET TRANSACTION...RESERVING文を使用して一連の表をOracle Rdb操作のためにロックすると、通常、RESERVING句でリストされていない表はトランザクションからすべて除外されます。ただし、Oracle Rdbは必要に応じてシステム表にアクセスして更新します。その際、SQL SET TRANSACTION文で表がロックされているかどうかは問われません。
トランザクションでデータベースのメタデータを更新する際、Oracle Rdbは、更新に関連するシステム表をEXCLUSIVE共有モードで予約します。トランザクションが完了するまで、他のユーザーはこれらの表でデータ定義操作を実行できません。次に例を示します。
Oracle Rdbは、ユーザー定義データとして複数セグメントのLIST OF BYTE VARYINGデータ型をサポートしています。ただし、Oracle Rdbの以前のバージョンでは、LIST OF BYTE VARYINGメタデータ列が単一セグメントとして保持されていました。これにより、長さが約65530バイトに制限されていました。この制限が原因でSQL CREATE TRIGGER文やCREATE MODULE文が失敗する場合がありました。
Oracle Rdbの各メタデータの格納方法を変更することにより、この制限は解除されました。
(RMU Convertコマンド、RMU RestoreコマンドまたはSQL EXPORT/IMPORT文を使用して)データベースを以前のバージョンから変換する際、LIST OF BYTE VARYING列値は変更されません。
Oracle RdbシステムのLIST OF BYTE VARYING列値を読み取るアプリケーションは、複数セグメントを認識できるように変更する必要があります。これらのシステムの列値の読取りを実行しないアプリケーションでは、以前の動作への変更は認識されません。RMU ExtractコマンドやSQL SHOW文、EXPORT文などのツールでは、新旧の両方の形式によるシステム・メタデータが処理されます。
I.5 読取り専用アクセス
読取り専用アクセスに設定されている、様々なシステム表のフィールドのリストを次に示します。
Oracle Rdbのシステム表は次のとおりです。
RDB$CATALOG_SCHEMA | 各SQLカタログおよびスキーマの名前と定義を含む。この表は、SQLマルチスキーマ機能が有効化されているデータベースにのみ存在する。 |
RDB$COLLATIONS | このデータベースで使用される照合順番。 |
RDB$CONSTRAINTS | 各制約の名前と定義。 |
RDB$CONSTRAINT_RELATIONS | 特定の制約に関与している各表の名前。 |
RDB$DATABASE | データベース固有の情報。 |
RDB$FIELD_VERSIONS | データベースの各列定義のバージョンごとに1行。 |
RDB$FIELDS | データベースの各ドメインの特性。 |
RDB$GRANTED_PROFILES | ユーザーに付与されているロールおよびプロファイルとその他のロールの記述。 |
RDB$INDEX_SEGMENTS | 索引を構成する列。 |
RDB$INDICES | 各表の索引の特性。 |
RDB$INTERRELATIONS | データベースで使用されているエンティティの相互依存性。 |
RDB$MODULES | ヘッダーや宣言部など、ユーザーによって定義されたモジュール定義。 |
RDB$OBJECT_SYNONYMS | シノニムが有効な場合、このシステム表は、シノニム名、タイプおよびターゲットを記述するために作成される。 |
RDB$PARAMETERS | RDB$ROUTINESに格納されている各ルーチンのインタフェース定義。ルーチン(プロシージャまたはファンクション)への各パラメータは、RDB$PARAMETERSの行で記述される。 |
RDB$PRIVILEGES | データベース・オブジェクトの保護。 |
RDB$PROFILES | データベースのプロファイル、ロールまたはユーザーの記述。 |
RDB$QUERY_OUTLINES | 最適化の前に既知の問合せアウトラインを取得するためにオプティマイザで使用される問合せアウトラインの定義。 |
RDB$RELATION_CONSTRAINTS | 表固有のすべての制約をリストする。 |
RDB$RELATION_CONSTRAINT_FLDS | 表固有の制約の一意キー、主キーまたは外部キーの宣言に関与している列をリストする。 |
RDB$RELATION_FIELDS | 各表に対して定義された列。 |
RDB$RELATIONS | データベースの表およびビュー。 |
RDB$ROUTINES | データベースの各ファンクションおよびプロシージャの記述。ルーチンは、スタンドアロンまたはモジュールに含まれる。 |
RDB$SEQUENCES | データベースで定義されている順序の特性。 |
RDB$STORAGE_MAPS | 各記憶域マップの特性。 |
RDB$STORAGE_MAP_AREAS | 記憶域マップの各パーティションの特性。 |
RDB$SYNONYMS | ユーザー指定のオブジェクト名がその内部データベース名に関連付けられる。この表は、SQLマルチスキーマ機能が有効化されているデータベースにのみ存在する。 |
RDB$TRIGGERS | トリガーの定義。 |
RDB$VIEW_RELATIONS | ビューで使用されている表の相互依存性。 |
RDB$WORKLOAD | ワークロード情報を収集する。 |
RDB$CATALOG_SCHEMAシステム表には、各SQLカタログおよびスキーマの名前と定義が含まれます。この表は、SQLマルチスキーマ機能が有効化されているデータベースにのみ存在します。次の表は、RDB$CATALOG_SCHEMAシステム表の列に関する情報を示しています。
列名 | データ型 | 概要説明 |
---|---|---|
RDB$PARENT_ID | integer | スキーマの場合、この列は、このスキーマが属するカタログのRDB$CATALOG_SCHEMA_IDである。カタログの場合、この列は常に0。 |
RDB$CATALOG_SCHEMA_NAME | char(31) | カタログまたはスキーマの名前。 |
RDB$CATALOG_SCHEMA_ID | integer | これがカタログまたはスキーマのいずれであるかを示す一意の識別子。
スキーマ・オブジェクトは、1から始まって増加していく正の識別子を備える。カタログ・オブジェクトは、-1から始まって減少していく負の識別子を備える。0は予約されている。 |
RDB$DESCRIPTION | list of byte varying | カタログまたはスキーマに関するユーザー指定の説明。 |
RDB$SCHEMA_AUTH_ID | char(31) | スキーマの作成者の認可識別子。 |
RDB$SECURITY_CLASS | char(20) | 今後の使用のため予約。 |
RDB$CREATED | date vms | スキーマまたはカタログの作成時に設定。 |
RDB$LAST_ALTERED | date vms | SQL ALTER CATALOG文またはALTER SCHEMA文の使用時(今後)に設定。 |
RDB$CATALOG_SCHEMA_CREATOR | char(31) | このスキーマまたはカタログの作成者。 |
RDB$COLLATIONSシステム表では、データベースで使用する照合順番が記述されます。次の表は、RDB$COLLATIONSシステム表の列に関する情報を示しています。
列名 | データ型 | 概要説明 |
---|---|---|
RDB$COLLATION_NAME | char(31) | データベースの照合順番をデータベース内で認識させるために使用する名前を指定。 |
RDB$COLLATION_SEQUENCE | byte varying | 照合順番の内部表現。 |
RDB$DESCRIPTION | byte varying | 照合順番に関するユーザー指定の説明。 |
RDB$FLAGS | integer | 次のビットが設定されているビット・マスク。
|
RDB$SECURITY_CLASS | char(20) | 今後の使用のため予約。 |
RDB$CREATED | date vms | 照合順番の作成時に設定。 |
RDB$LAST_ALTERED | date vms | 今後の使用のため予約。 |
RDB$COLLATION_CREATOR | char(31) | この照合順番の作成者。 |
RDB$CONSTRAINTSシステム表には、各制約の名前と定義が含まれます。次の表は、RDB$CONSTRAINTSシステム表の列に関する情報を示しています。
列名 | データ型 | 概要説明 |
---|---|---|
RDB$CONSTRAINT_NAME | char(31) | システム全体における制約の一意の名前。 |
RDB$CONSTRAINT_BLR | byte varying | 制約を定義するBLR。 |
RDB$CONSTRAINT_SOURCE | byte varying | 制約のユーザーのソース。 |
RDB$DESCRIPTION | byte varying | この制約に関するユーザー指定の説明。 |
RDB$EVALUATION_TIME | integer | 制約をいつ評価するかを示す次のような値:
|
RDB$EXTENSION_PARAMETERS | byte varying | 今後の使用のため予約。 |
RDB$SECURITY_CLASS | char(20) | 今後の使用のため予約。 |
RDB$CREATED | date vms | 制約の作成時に設定。 |
RDB$LAST_ALTERED | date vms | 今後の使用のため予約。 |
RDB$CONSTRAINT_CREATOR | char(31) | この制約の作成者。 |
RDB$FLAGS | integer | フラグ。 |
RDB$FLAGSは、RDB$CONSTRAINTSシステム表のフラグを示します。
ビット位置 | 説明 |
---|---|
0 | 現在無効。 |
1 | 現在有効(検証なし)。 |
I.6.4 RDB$CONSTRAINT_RELATIONS
RDB$CONSTRAINT_RELATIONSシステム表では、特定の制約に関与しているすべての表をリストします。次の表は、RDB$CONSTRAINT_RELATIONSシステム表の列に関する情報を示しています。
列名 | データ型 | 概要説明 |
---|---|---|
RDB$CONSTRAINT_NAME | char(31) | システム全体における制約の一意の名前。 |
RDB$RELATION_NAME | char(31) | 制約に関与している表の名前。 |
RDB$FLAGS | integer | フラグ。 |
RDB$CONSTRAINT_CONTEXT | integer | 制約に関与している表のコンテキスト変数。 |
RDB$SECURITY_CLASS | char(20) | 今後の使用のため予約。 |
RDB$FLAGSは、RDB$CONSTRAINT_RELATIONSシステム表のフラグを示します。
ビット位置 | 説明 |
---|---|
0 | 今後の使用のため予約。 |
1 | 今後の使用のため予約。 |
2 | 指定された表に制約が存在する場合。 |
3 | 制約がdbkey検索による最適化で評価を行う場合。 |
4 | 制約で存在の有無をチェックする場合。 |
5 | 制約で一意性をチェックする場合。 |
6 | 指定された表の行の格納を制約で評価する必要がある場合。 |
7 | 指定された表の行の格納を制約で評価する必要がない場合。 |
8 | 指定された表の行の消去を制約で評価する必要がある場合。 |
9 | 指定された表の行の消去を制約で評価する必要がない場合。 |
RDB$DATABASEシステム表には、データベース全体に関する情報が格納されます。この表には、1つの行のみを含むことができます。次の表は、RDB$DATABASEシステム表の列に関する情報を示しています。
列名 | データ型 | 概要説明 |
---|---|---|
RDB$CDD_PATH | char 256 | データベースのディクショナリのパス名。 |
RDB$FILE_NAME | char 255 | Oracle Rdbにより、データベース・ルート・ファイルのファイル仕様が返される。1 |
RDB$MAJ_VER | integer | データベースのメジャー・バージョンから導出。 |
RDB$MIN_VER | integer | データベースのリリース番号から導出。 |
RDB$MAX_RELATION_ID | integer | 割り当てられている最大の表識別子。この次の表には、MAX_RELATION_IDに1を加えたIDが割り当てられる。 |
RDB$RELATION_ID | integer | RDB$RELATIONS表の一意の識別子。表を削除した場合、その識別子は他の表に割り当てられない。 |
RDB$RELATION_ID_ROOT_DBK | char(8) | RDB$RELATION_ID列のRDB$REL_REL_ID_NDX索引のベースへのポインタ(データベース・キーまたはdbkey)。 |
RDB$RELATION_NAME_ROOT_DBK | char(8) | RDB$RELATION_NAME列のRDB$REL_REL_NAME_NDX索引のベースへのポインタ(dbkey)。 |
RDB$FIELD_ID | integer | RDB$FIELD_VERSIONS表の識別子。 |
RDB$FIELD_REL_FLD_ROOT_DBK | char(8) | RDB$RELATION_ID列および RDB$VERSION列のRDB$VER_REL_ID_VER_NDX索引のベースへのポインタ(dbkey)。 |
RDB$INDEX_ID | integer | RDB$INDICES表の識別子。 |
RDB$INDEX_NDX_ROOT_DBK | char(8) | RDB$INDEX_NAME列のRDB$NDX_NDX_NAME_NDX索引のベースへのポインタ(dbkey)。 |
RDB$INDEX_REL_ROOT_DBK | char(8) | RDB$RELATION_ID列のRDB$NDX_REL_NAM_NDX索引のベースへのポインタ(dbkey)。 |
RDB$INDEX_SEG_ID | integer | RDB$INDEX_SEGMENTS表の識別子。 |
RDB$INDEX_SEG_FLD_ROOT_DBK | char(8) | RDB$INDEX_NAME列およびRDB$FIELD_POSITION列のRDB$NDX_SEG_NAM_FLD_POS_NDX索引のベースへのポインタ(dbkey)。 |
RDB$SEGMENTED_STRING_ID | integer | セグメント化された文字列を含む論理領域ID。 |
RDB$ACCESS_CONTROL | byte varying | データベースのアクセス制御ポリシー。 |
RDB$DESCRIPTION | byte varying | データベースに関するユーザー指定の説明。 |
RDB$DATABASE_PARAMETERS | byte varying | 今後の使用のため予約。 |
RDB$EXTENSION_PARAMETERS | byte varying | 今後の使用のため予約。 |
RDB$FLAGS | integer | フラグ。 |
RDBVMS$MAX_VIEW_ID | integer | RDB$RELATIONSシステム表のRDB$RELATION_ID列に割り当てられた最大のビュー識別子。この次のビューには、MAX_VIEW_IDに1を加えたIDが割り当てられる。 |
RDBVMS$SECURITY_AUDIT | integer | RMU Set Auditコマンドで指定されている、データベースに対して監査される権限を示すビット・マスク。 |
RDBVMS$SECURITY_ALARM | integer | RMU Set Auditコマンドで指定されている、データベースに対して警告を生成する権限を示すビット・マスク。 |
RDBVMS$SECURITY_USERS | byte varying | 特定のデータベース・オブジェクトに対してDACCESS(任意アクセス)監査が有効な場合に、DAC(任意アクセス制御)イベントに対して監査されるユーザーまたは警告を生成するユーザーを識別するアクセス制御リスト。 |
RDB$SECURITY_CLASS | char(20) | 今後の使用のため予約。 |
RDBVMS$SECURITY_AUDIT2 | integer | 今後の使用のため予約。 |
RDBVMS$SECURITY_ALARM2 | integer | 今後の使用のため予約。 |
RDBVMS$CHARACTER_SET_ID | integer | 値は、識別子キャラクタ・セットに使用されるキャラクタ・セットID。 |
RDBVMS$CHARACTER_SET_NATIONAL | integer | 値は、すべてのNCHAR(NATIONAL CHARまたはNATIONAL CHARACTERとも呼ばれる)データ型およびリテラルに使用されるキャラクタ・セットID。 |
RDBVMS$CHARACTER_SET_DEFAULT | integer | 値は、デフォルト・キャラクタ・セットに使用されるキャラクタ・セットID。 |
RDB$MAX_ROUTINE_ID | integer | データベースに追加されたモジュールとルーチンの数を保持。データベースにルーチンやモジュールが追加されていない場合の値は0。 |
RDB$CREATED | date vms | データベースの作成時に設定。 |
RDB$LAST_ALTERED | date vms | SQL ALTER DATABASE文の使用時に設定。 |
RDB$DATABASE_CREATOR | char(31) | このデータベースの作成者。 |
RDB$DEFAULT_STORAGE_AREA_ID | integer | マップされていない永続的な表および索引に使用されるデフォルトの記憶領域。 |
RDB$DEFAULT_TEMPLATE_AREA_ID | integer | 今後の使用のため予約。 |