Hitachi

ノンストップデータベース HiRDB Version 10 UAP開発ガイド


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

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

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

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

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

表   名

内    容

情 報 量

(1行当たり)

SQL_PHYSICAL_FILES

HiRDBファイルの情報(HiRDBファイルシステム名,RDエリア名との対応関係)

1HiRDBファイル分

SQL_RDAREAS

RDエリア名称,定義情報,RDエリア種別,格納表数,インデクス数などの情報

1RDエリア分

SQL_TABLES

データベース中の各表(ディクショナリ表を含む)の所有者名,表名

1表分

SQL_COLUMNS

列に関する列名,データ型などの定義情報

1列分

SQL_INDEXES

データベース中の各インデクス(ディクショナリ表を含む)の所有者名,インデクス名

1インデクス分

SQL_USERS

ユーザの実行権限,及びデータベースに対するアクセスを許可したユーザの認可識別子

1ユーザ分

SQL_RDAREA_PRIVILEGES

RDエリア利用権限の許可状況

1認可識別子の1RDエリア分

SQL_TABLE_PRIVILEGES

表に対するアクセス権限の付与状況

1認可識別子の1表分

SQL_VIEW_TABLE_USAGE

ビュー表の基の実表名

1ビュー表分

SQL_VIEWS

ビュー定義情報

1ビュー表分

SQL_DIV_TABLE

表の分割情報(CREATE TABLE時に指定した分割条件,及び格納RDエリア名)

n行で1表分

SQL_INDEX_COLINF

インデクスが定義された列名

n行で1インデクス分

SQL_DIV_INDEX

インデクスの分割情報(格納RDエリア名)

n行で1インデクス分

SQL_DIV_COLUMN

BLOB型列の分割情報(CREATE TABLE時に指定した格納RDエリア名)

n行で1列分

SQL_ROUTINES

ルーチン定義情報

1行で1ルーチン分

SQL_ROUTINE_RESOURCES

ルーチン中の使用リソース情報

n行で1ルーチン分

SQL_ROUTINE_PARAMS

ルーチン中のパラメタ定義情報

n行で1ルーチン分

SQL_TABLE_STATISTICS

表の統計情報

1表分

SQL_COLUMN_STATISTICS

列の統計情報

1列分

SQL_INDEX_STATISTICS

インデクスの統計情報

1インデクス分

SQL_DATATYPES

ユーザ定義型の情報

1ユーザ定義型分

SQL_DATATYPE_DESCRIPTORS

ユーザ定義型の構成属性の情報

1属性分

SQL_TABLE_RESOURCES

表で使用するリソース情報

1リソース分

SQL_PLUGINS

プラグイン情報

1プラグイン分

SQL_PLUGIN_ROUTINES

プラグインのルーチン情報

1プラグインのルーチン分

SQL_PLUGIN_ROUTINE_PARAMS

プラグインのルーチンのパラメタ情報

1パラメタ情報

SQL_INDEX_TYPES

インデクス型の情報

1インデクス型分

SQL_INDEX_RESOURCES

インデクスで使用するリソース情報

1リソース情報分

SQL_INDEX_DATATYPE

インデクスの対象項目情報

1対象項目情報分(1段分)

SQL_INDEX_FUNCTION

インデクスで利用する抽象データ型関数の情報

一つの抽象データ型関数の情報分

SQL_TYPE_RESOURCES

ユーザ定義型で使用するリソース情報

1リソース情報分

SQL_INDEX_TYPE_FUNCTION

インデクス型を定義したインデクスで利用できる抽象データ型関数の情報

n行で1インデクス型分

SQL_EXCEPT

インデクスの除外キー値の情報

n行で1インデクスの除外キー群

SQL_IOS_GENERATIONS

UNIX版の場合:

インナレプリカ機能使用時のHiRDBファイルシステム領域の世代情報

Windows版の場合:

システムが使用する情報(内容は空となります)

UNIX版の場合:

1行で1HiRDBファイルシステム領域分

Windows版の場合:

なし

SQL_TRIGGERS

スキーマ内にあるトリガの情報

1行で1トリガ分

SQL_TRIGGER_COLUMNS

UPDATEトリガの契機列リスト情報

1行で1契機列情報

SQL_TRIGGER_DEF_SOURCE

トリガ定義ソース情報

n行で1トリガ定義ソース情報

SQL_TRIGGER_USAGE

トリガ動作条件中で参照している資源情報

1行で,トリガ動作条件中で参照している資源名称一つ

SQL_PARTKEY

マトリクス分割表の分割キーの情報

1行で1分割キー情報

SQL_PARTKEY_DIVISION

マトリクス分割表の分割条件値の情報

1行で1分割条件値情報

SQL_AUDITS

監査対象の情報

1行で1オブジェクト又は1ユーザに対する1イベント分の情報

SQL_REFERENTIAL_CONSTRAINTS

参照制約の対応状況

1行で1制約分の情報

SQL_KEYCOLUMN_USAGE

外部キーを構成する列情報

1行で1列分の情報

SQL_TABLE_CONSTRAINTS

スキーマ内にある整合性制約の情報

1行で1整合性制約分の情報

SQL_CHECKS

検査制約の情報

1行で1検査制約分の情報

SQL_CHECK_COLUMNS

検査制約で使用している列の情報

1行で一つの検査制約で使用している1列分の情報

SQL_DIV_TYPE

キーレンジ分割とハッシュ分割を組み合わせたマトリクス分割表の分割キーの情報

1行で1分割キー数分の情報

SQL_SYSPARAMS

連続認証失敗回数制限,及びパスワードの文字列制限の情報

1行で1設定項目数分,n行で一つの連続認証失敗回数制限分,又は一つのパスワードの文字列制限分の情報

SQL_INDEX_XMLINF

部分構造インデクスの構成部分構造パス情報

1行で1インデクスの情報

SQL_SEQUENCES

順序数生成子の情報

1行で1順序数生成子分の情報

SQL_ACCESS_SECURITY

IPアドレスによる接続制限の情報

1行で1接続制約分の情報

検索時のSQLの記述例

データディクショナリ表を検索するSQL文の例を次に示します。SQLの詳細については,マニュアル「HiRDB SQLリファレンス」を参照してください。

ディクショナリ表の参照権限の設定によっては,検索できる情報が限られます。データディクショナリ表の参照権限の設定については,マニュアル「HiRDB システム運用ガイド」を参照してください。

なお,ディクショナリ表を検索した後は,すぐに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 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エリア名となります。