スケーラブルデータベースサーバ HiRDB Version 8 UAP開発ガイド

[目次][索引][前へ][次へ]

付録G.2 操作系SQLによるデータディクショナリ表の参照

HiRDBのデータディクショナリ表は,一般のHiRDBのデータベースと同様に,操作系のSQLで参照できます。なお,ディクショナリ表の認可識別子はMASTERとなります。

ここでは,検索時のSQLの記述例と,参照するために必要な定義情報について説明します。

参照するデータディクショナリ表の一覧を次の表に示します。

表G-1 データディクショナリ一覧

項番 表   名 内    容 情 報 量
(1行当たり)
1 SQL_PHYSICAL_FILES HiRDBファイルの情報(HiRDBファイルシステム名,RDエリア名との対応関係) 1HiRDBファイル分
2 SQL_RDAREAS RDエリア名称,定義情報,RDエリア種別,格納表数,インデクス数などの情報 1RDエリア分
3 SQL_TABLES データベース中の各表(ディクショナリ表を含む)の所有者名,表名 1表分
4 SQL_COLUMNS 列に関する列名,データ型などの定義情報 1列分
5 SQL_INDEXES データベース中の各インデクス(ディクショナリ表を含む)の所有者名,インデクス名 1インデクス分
6 SQL_USERS ユーザの実行権限,及びデータベースに対するアクセスを許可したユーザの認可識別子 1ユーザ分
7 SQL_RDAREA_PRIVILEGES RDエリア利用権限の許可状況 1認可識別子の1RDエリア分
8 SQL_TABLE_PRIVILEGES 表に対するアクセス権限の付与状況 1認可識別子の1表分
9 SQL_VIEW_TABLE_USAGE ビュー表の基の実表名 1ビュー表分
10 SQL_VIEWS ビュー定義情報 1ビュー表分
11 SQL_DIV_TABLE 表の分割情報(CREATE TABLE時に指定した分割条件,及び格納RDエリア名) n行で1表分
12 SQL_INDEX_COLINF インデクスが定義された列名 n行で1インデクス分
13 SQL_DIV_INDEX インデクスの分割情報(格納RDエリア名) n行で1インデクス分
14 SQL_DIV_COLUMN BLOB型列の分割情報(CREATE TABLE時に指定した格納RDエリア名) n行で1列分
15 SQL_ROUTINES ルーチン定義情報 1行で1ルーチン分
16 SQL_ROUTINE_RESOURCES ルーチン中の使用リソース情報 n行で1ルーチン分
17 SQL_ROUTINE_PARAMS ルーチン中のパラメタ定義情報 n行で1ルーチン分
18 SQL_ALIASES UNIX版の場合:
表の別名情報(CREATE ALIAS時に指定した表の別名,及び対象となる表の3部名)
Windows版の場合:
システムが使用する情報(内容は空となります)
UNIX版の場合:
1別名分
Windows版の場合:
なし
19 SQL_TABLE_STATISTICS 表の統計情報 1表分
20 SQL_COLUMN_STATISTICS 列の統計情報 1列分
21 SQL_INDEX_STATISTICS インデクスの統計情報 1インデクス分
22 SQL_DATATYPES ユーザ定義型の情報 1ユーザ定義型分
23 SQL_DATATYPE_DESCRIPTORS ユーザ定義型の構成属性の情報 1属性分
24 SQL_TABLE_RESOURCES 表で使用するリソース情報 1リソース分
25 SQL_PLUGINS プラグイン情報 1プラグイン分
26 SQL_PLUGIN_ROUTINES プラグインのルーチン情報 1プラグインのルーチン分
27 SQL_PLUGIN_ROUTINE_PARAMS プラグインのルーチンのパラメタ情報 1パラメタ情報
28 SQL_INDEX_TYPES インデクス型の情報 1インデクス型分
29 SQL_INDEX_RESOURCES インデクスで使用するリソース情報 1リソース情報分
30 SQL_INDEX_DATATYPE インデクスの対象項目情報 1対象項目情報分(1段分)
31 SQL_INDEX_FUNCTION インデクスで利用する抽象データ型関数の情報 一つの抽象データ型関数の情報分
32 SQL_TYPE_RESOURCES ユーザ定義型で使用するリソース情報 1リソース情報分
33 SQL_INDEX_TYPE_FUNCTION インデクス型を定義したインデクスで利用できる抽象データ型関数の情報 n行で1インデクス型分
34 SQL_EXCEPT インデクスの除外キー値の情報 n行で1インデクスの除外キー群
35 SQL_FOREIGN_SERVERS HiRDB External Data Access機能使用時にHiRDBがアクセスする外部サーバのDBMS情報 1行で1外部サーバ分
36 SQL_USER_MAPPINGS HiRDB External Data Access機能使用時に外部サーバをアクセスするときのマッピング情報 1行でHiRDB上の1ユーザに対する1マッピング情報
37 SQL_IOS_GENERATIONS UNIX版の場合:
インナレプリカ機能使用時のHiRDBファイルシステム領域の世代情報
Windows版の場合:
システムが使用する情報(内容は空となります)
UNIX版の場合:
1行で1HiRDBファイルシステム領域分
Windows版の場合:
なし
38 SQL_TRIGGERS スキーマ内にあるトリガの情報 1行で1トリガ分
39 SQL_TRIGGER_COLUMNS UPDATEトリガの契機列リスト情報 1行で1契機列情報
40 SQL_TRIGGER_DEF_SOURCE トリガ定義ソース情報 n行で1トリガ定義ソース情報
41 SQL_TRIGGER_USAGE トリガ動作条件中で参照している資源情報 1行で,トリガ動作条件中で参照している資源名称一つ
42 SQL_PARTKEY マトリクス分割表の分割キーの情報 1行で1分割キー情報
43 SQL_PARTKEY_DIVISION マトリクス分割表の分割条件値の情報 1行で1分割条件値情報
44 SQL_AUDITS 監査対象の情報 1行で1オブジェクト又は1ユーザに対する1イベント分の情報
45 SQL_REFERENTIAL_CONSTRAINTS 参照制約の対応状況 1行で1制約分の情報
46 SQL_KEYCOLUMN_USAGE 外部キーを構成する列情報 1行で1列分の情報
47 SQL_TABLE_CONSTRAINTS スキーマ内にある整合性制約の情報 1行で1整合性制約分の情報
48 SQL_CHECKS 検査制約の情報 1行で1検査制約分の情報
49 SQL_CHECK_COLUMNS 検査制約で使用している列の情報 1行で一つの検査制約で使用している1列分の情報
50 SQL_DIV_TYPE キーレンジ分割とハッシュ分割を組み合わせたマトリクス分割表の分割キーの情報 1行で1分割キー数分の情報
51 SQL_SYSPARAMS 連続認証失敗回数制限,及びパスワードの文字列制限の情報 1行で1設定項目数分,n行で一つの連続認証失敗回数制限分,又は一つのパスワードの文字列制限分の情報
52 SQL_INDEX_XMLINF 部分構造インデクスの構成部分構造パス情報 1行で1インデクスの情報
53 SQL_SEQUENCES 順序数生成子の情報 1行で1順序数生成子分の情報

検索時のSQLの記述例
データディクショナリ表を検索するSQL文の例を次に示します。SQLの詳細については,マニュアル「HiRDB Version 8 SQLリファレンス」を参照してください。
ディクショナリ表の参照権限の設定によっては,検索できる情報が限られます。データディクショナリ表の参照権限の設定については,マニュアル「HiRDB Version 8 システム運用ガイド」を参照してください。
なお,ディクショナリ表を検索した後は,すぐにCOMMIT文を発行するか,又は検索例のようにWITHOUT LOCK NOWAITを指定するかしてください。
<例1>
HiRDBのシステムにないRDエリアのサーバ名,HiRDBファイル名,及び所属するRDエリア名を知りたい場合
  
   SELECT X.SERVER_NAME, PHYSICAL_FILE_NAME, X.RDAREA_NAME
      FROM MASTER.SQL_PHYSICAL_FILES X, MASTER.SQL_RDAREAS Y
      WHERE X.RDAREA_NAME=Y.RDAREA_NAME
      ORDER BY X.SERVER_NAME
      WITHOUT LOCK NOWAIT
  
<例2>
自分の所有する表の列の定義情報の中から,列を含む表の名称,列名,データ型,及び列データ長を知りたい場合
  
   SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH
      FROM MASTER.SQL_COLUMNS
      WHERE TABLE_SCHEMA=USER
      ORDER BY TABLE_NAME
      WITHOUT LOCK NOWAIT
  
<例3>
自分の所有する表のインデクス定義情報の中から,インデクスを含む表の名称,インデクスの名称,及びページ内未使用領域の比率を知りたい場合
  
   SELECT TABLE_NAME, INDEX_NAME, FREE_AREA
      FROM MASTER.SQL_INDEXES
      WHERE TABLE_SCHEMA=USER
      ORDER BY TABLE_NAME
      WITHOUT LOCK NOWAIT
  
<例4>
自分がアクセスできる表と,その表に対するアクセス権限の種類(SELECT権限,INSERT権限,DELETE権限,及びUPDATE権限)の有無について知りたい場合
  
   SELECT TABLE_NAME, SELECT_PRIVILEGE, INSERT_PRIVILEGE,
      DELETE_PRIVILEGE, UPDATE_PRIVILEGE
      FROM MASTER.SQL_TABLE_PRIVILEGES
      WHERE GRANTEE=USER OR GRANTEE='PUBLIC'
      WITHOUT LOCK NOWAIT
  
<例5>
コマンドをグループ指定するとき,対象となるRDエリア(先行文字列がRD1のRDエリア)の数を知りたい場合
  
   SELECT COUNT(*) FROM MASTER.SQL_RDAREAS
      WHERE RDAREA_TYPE='U' AND
      RDAREA_NAME LIKE 'RD1%'
      WITHOUT LOCK NOWAIT
  
<例6>
コマンドをグループ指定するとき,対象となるRDエリア(先行文字列がRD1のRDエリア)の名称を知りたい場合
  
   SELECT RDAREA_NAME FROM MASTER.SQL_RDAREAS
      WHERE RDAREA_TYPE='U' AND
      RDAREA_NAME LIKE 'RD1%' ORDER BY RDAREA_NAME
      WITHOUT LOCK NOWAIT
  
<例7>
自分の所有する非分割表(名称がT1の表)が格納されているRDエリアのRDエリア名を知りたい場合
  
   SELECT X.RDAREA_NAME
      FROM MASTER.SQL_RDAREAS X, MASTER.SQL_TABLES Y
      WHERE Y.TABLE_SCHEMA=USER
        AND Y.TABLE_NAME='T1'
        AND X.RDAREA_NAME=Y.RDAREA_NAME
      WITHOUT LOCK NOWAIT
  
注※ USERは,実行ユーザの認可識別子を値に持つ変数です。認可識別子の詳細については,マニュアル「HiRDB Version 8 SQLリファレンス」を参照してください。
<例8>
データディクショナリLOB用RDエリアを再初期化するとき,実行時に使用するストアドプロシジャ及びストアドファンクションのオブジェクトを格納しているRDエリアの名称(オブジェクト格納用RDエリア名)を知りたい場合
  
   SELECT RDAREA_NAME FROM MASTER.SQL_DIV_COLUMN
      WHERE TABLE_SCHEMA='HiRDB'
        AND TABLE_NAME='SQL_ROUTINES'
        AND COLUMN_NAME='ROUTINE_OBJECT'
      WITHOUT LOCK NOWAIT
  
注 データディクショナリLOB用RDエリアを再初期化した場合,実行後にすべてのSQLオブジェクトを再作成する必要があります。
<例9>
無効となったSQLオブジェクト,又はインデクス無効状態のストアドプロシジャ及びストアドファンクションの名称を知りたい場合
  
   SELECT ROUTINE_SCHEMA,ROUTINE_NAME
      FROM MASTER.SQL_ROUTINES
      WHERE ROUTINE_VALID='N'
        OR INDEX_VALID='N'
      WITHOUT LOCK NOWAIT
  
<例10>
ユーザ定義関数FUNC1の引数に埋込み変数を利用する場合に,実際に使用するユーザ定義関数の引数のデータ型を知りたい場合
   
   SELECT PARAMETER_NAME,DATA_TYPE,UDT_OWNER,UDT_NAME,PARAMETER_NO
      FROM MASTER.SQL_ROUTINE_PARAMS
      WHERE ROUTINE_SCHEMA=USER AND ROUTINE_NAME='FUNC1'
        ORDER BY PARAMETER_NO
      WITHOUT LOCK NOWAIT
  
<例11>
ユーザ(USERA)が所有するすべての表を再編成する場合に,その表が格納されているRDエリアを知りたいとき(閉塞する必要があるRDエリアを知りたいとき)
 
非分割表の場合:
   SELECT DISTINCT(RDAREA_NAME) FROM MASTER.SQL_TABLES
      WHERE TABLE_SCHEMA=USERA AND RDAREA_NAME IS NOT NULL
      WITHOUT LOCK NOWAIT
  
分割表の場合:
   SELECT DISTINCT(RDAREA_NAME) FROM MASTER.SQL_DIV_TABLE
      WHERE TABLE_SCHEMA=USERA
      WITHOUT LOCK NOWAIT
  
求められたRDエリア名を重複排除した結果が,閉塞する必要があるRDエリア名となります。