データディクショナリの概要
データディクショナリはOracleデータベースで最も重要な部分の1つであり、データベースに関する情報を提供する読取り専用の表の集合です。データディクショナリには次のものが含まれます。
データベース内のすべてのスキーマオブジェクト(表、ビュー、索引、クラスタ、シノニム、順序、プロシージャ、ファンクション、パッケージ、トリガーなど)の定義
スキーマオブジェクトに割り当てられている領域と、現在使用されている領域の容量
各種スキーマオブジェクトにアクセスまたは更新したユーザーなどの監査情報
データディクショナリは、他のデータベースデータと同様に、表とビューによって構成されています。特定のデータベースのデータディクショナリ表とビューは、すべてそのデータベースのSYSTEM
表領域に格納されます。
データディクショナリは、あらゆるOracleデータベースにとって中核的な存在であるだけでなく、エンドユーザーからアプリケーション設計者やデータベース管理者まで、すべてのユーザーにとって重要なツールです。データディクショナリにアクセスするには、SQL文を使用します。データディクショナリは読取り専用のため、ユーザーはデータディクショナリの表とビューに対して問合せ(SELECT
文)のみを発行できます。
関連項目
|
データディクショナリの構造
データディクショナリは、次の要素で構成されています。
実表
対応するデータベースについての情報を格納する基礎になる表。これらの表に読取り/書込みできるのはOracleだけです。これらの表は正規化され、データのほとんどは、暗号形式で格納されているため、ユーザーが直接アクセスすることはほとんどありません。
ユーザーアクセス可能ビュー
データディクショナリの実表に格納されている情報を要約して表示するビュー。これらのビューは、実表にあるデータを、ユーザー名や表の名前などの実用的な情報にデコードし、結合とWHERE
句を使用して情報を簡略化します。ほとんどのユーザーには、実表ではなく、これらのビューへのアクセス権が与えられています。
SYS(データディクショナリの所有者)
データディクショナリのすべての実表とユーザーアクセス可能ビューは、OracleユーザーSYS
が所有しています。したがって、Oracleユーザーは、SYS
スキーマに含まれている行またはスキーマオブジェクトを決して変更(UPDATE
、DELETE
またはINSERT
)しないでください。そのような操作により、データ整合性が損なわれることがあります。セキュリティ管理者は、このアカウントを厳しく管理する必要があります。
注意 データディクショナリ表のデータを変更したり操作すると、データベースの操作に永続的な悪影響を与えるおそれがあります。 |
データディクショナリの使用方法
データディクショナリの主な使用方法は次の3つです。
Oracleは、ユーザー、スキーマオブジェクトおよび記憶域構造に関する情報を検索するためにデータディクショナリにアクセスします。
Oracleは、データ定義言語(DDL)文が発行されるたびにデータディクショナリを変更します。
Oracleユーザーは、データベースについての情報の読取り専用リファレンスとしてデータディクショナリを使用できます。
Oracleによるデータディクショナリの使用方法
データディクショナリの実表内のデータは、Oracleを機能させるために必要です。したがって、データディクショナリ情報を書き込んだり変更するのは、Oracleのみにする必要があります。データベースがアップグレードまたはダウングレードされたときは、Oracleにより、データディクショナリ表を変更するスクリプトが提供されます。
注意 データディクショナリ表内のデータの変更や削除はユーザーに実行させないでください。 |
データベースの操作時に、Oracleはデータディクショナリを読み込んで、スキーマオブジェクトが存在しており、ユーザーにはアクセス権が正しく付与されていることを確認します。またOracleは、データベース構造、監査、権限付与およびデータの変更を反映するように、継続的にデータディクショナリを更新します。
たとえば、ユーザーKathyがparts
という表を作成すると、新しい表、列、セグメント、エクステントおよびKathyがその表に対して持っている権限を反映するために、新しい行がデータディクショナリに追加されます。この新しい情報は、次回ディクショナリビューを問い合せるときに表示されます。
データディクショナリビューのパブリックシノニム
多くのデータディクショナリビューにユーザーが簡単にアクセスできるようにするため、Oracleはパブリックシノニムを作成します。セキュリティ管理者は、システム全体で使用するスキーマオブジェクトのパブリックシノニムを作成して追加することもできます。ユーザーは、パブリックシノニムに使用されているのと同じ名前を、自分のスキーマオブジェクトに付けないようにする必要があります。
高速アクセスのためのデータディクショナリのキャッシュ
ユーザーアクセスの妥当性チェックやスキーマオブジェクト状態の検証のために、Oracleはデータベース操作中に絶えずデータディクショナリにアクセスするため、データディクショナリ情報の大部分はディクショナリキャッシュ内のSGAキャッシュに格納されます。すべての情報は、最低使用頻度(LRU)アルゴリズムを使用してメモリーに格納されます。
通常、キャッシュに保持されるのは、解析情報です。表とそれらの列について記述しているCOMMENTS
列は、頻繁にアクセスされないかぎりキャッシュには保持されません。
他のプログラムとデータディクショナリ
他のOracle製品は、既存のビューを参照したり、独自のデータディクショナリ表またはビューを追加できます。データディクショナリを参照するプログラムを記述するアプリケーション開発者は、基礎となる表ではなくパブリックシノニムを参照する必要があります。これは、シノニムのほうがソフトウェアリリース間での変更が少ないためです。
データディクショナリの使用方法
データディクショナリのビューは、すべてのデータベースユーザーのためのリファレンスとしての役目を果たします。データディクショナリビューには、SQL文を介してアクセスします。すべてのOracleユーザーがアクセスできるビューもいくつかありますが、その他のビューはデータベース管理者のみが使用するように設計されています。
データディクショナリは、データベースがオープンしていれば常に使用可能です。データディクショナリは、常にオンライン状態にあるSYSTEM
表領域にあります。
データディクショナリは、ビューのセットによって構成されています。多くの場合、そのセットは、類似した情報が格納されている3つのビューで構成され、それぞれが接頭辞によって区別されます。
表 7-1 データディクショナリビューの接頭辞
接頭辞 | 有効範囲 |
---|---|
| ユーザーのビュー(ユーザーのスキーマにある) |
| 広義のユーザーのビュー(ユーザーがアクセスできる) |
| データベース管理者のビュー(ユーザー全員のスキーマの内容) |
列の集合は、次の例外を除き、ビュー全体で同一です。
接頭辞が
USER
のビューには、通常、列OWNER
は含まれません。USER
ビューでは、この列には、問合せを発行するユーザーが暗黙的に想定されます。一部の
DBA
ビューには、管理者にとって有用な情報を含む列が追加されています。関連項目 データディクショナリビューとその列の完全なリストは、『Oracle Databaseリファレンス』を参照してください。
接頭辞がUSERのビュー
通常のデータベースユーザーが最も頻繁に使用するのは、接頭辞がUSER
のビューです。これらのビューには、次のような特長があります。
ユーザーが作成したスキーマオブジェクトやユーザーによる権限付与に関する情報など、ユーザー独自のプライベートなデータベース環境を参照します。
列
OWNER
が暗黙的に想定されることを除いて、他のビューと同一の列を持っています。使用しやすいように短縮した
パブリック
シノニムを持つことができます。
たとえば、次の問合せは、自分のスキーマに入っているすべてのオブジェクトを戻します。
SELECT object_name, object_type FROM USER_OBJECTS;
接頭辞がALLのビュー
接頭辞がALL
のビューは、ユーザーのデータベース全体の概要を参照します。これらのビューは、ユーザーが所有しているスキーマオブジェクトに加えて、権限とロールのPUBLICへの付与や明示的な付与によってそのユーザーがアクセスできるようになったスキーマオブジェクトに関する情報を戻します。たとえば次の問合せは、アクセス権を持っているすべてのオブジェクトに関する情報を戻します。
SELECT owner, object_name, object_type FROM ALL_OBJECTS;
接頭辞がDBAのビュー
接頭辞がDBA
のビューには、データベース全体のグローバルビューが示されます。DBA
ビューへの問合せを発行するのは管理者のみであるため、これらのビューのシノニムは作成されません。このため、DBA
ビューに問合せを発行するには、管理者は、次のようにして所有者SYS
をビューの名前の接頭辞として指定する必要があります。
SELECT owner, object_name, object_type FROM SYS.DBA_OBJECTS;
ANY
システム権限を持つユーザーがその権限をデータディクショナリに対して使用しないように、データディクショナリ保護を実装することをお薦めします。データ保護を使用可能に(O7_DICTIONARY_ACCESSIBILITY
をfalse
に設定)すると、SYS
スキーマ内のオブジェクト(ディクショナリオブジェクト)へのアクセスは、SYS
スキーマを持つユーザーに限定されます。これらのユーザーはSYS
であり、SYSDBA
として接続するユーザーです。
関連項目 システム権限の制限の詳細は、『Oracle Database 管理者ガイド』を参照してください。 |
DUAL表
DUAL
表は、既知の結果を保証するために、Oracleとユーザー作成のプログラムによって参照されるデータディクショナリ内の小さな表です。この表にはDUMMY
という1つの列と、値X
を格納する1つの行があります。
関連項目
|
動的パフォーマンス表
Oracleは、操作中ずっと、カレントデータベースアクティビティを記録する一連の仮想表を保持しています。これらの表のことを動的パフォーマンス表と呼びます。
動的パフォーマンス表は実際の表ではないため、ほとんどのユーザーはこれにアクセスすることはありません。しかし、データベース管理者は、これらの表のビューに問合せを発行したり、ビューを作成したり、それらのビューにアクセスする権限を他のユーザーに付与できます。これらのビューは、データベース管理者が変更または削除できないため、固定ビューと呼ばれることもあります。
動的パフォーマンス表はSYS
が所有しており、その名前はすべてV_$
で始まります。これらの表のビューが作成され、そのビューのパブリックシノニムが作成されます。これらのシノニム名は、V$
で始まります。たとえば、V$DATAFILE
ビューにはデータベースのデータファイルに関する情報が格納され、V$FIXED_TABLE
ビューにはデータベース内のすべての動的パフォーマンス表とビューに関する情報が格納されます。
関連項目 動的パフォーマンスビューのシノニムおよび列の完全なリストは、『Oracle Databaseリファレンス』を参照してください。 |
データベースオブジェクトメタデータ
DBMS_METADATA
パッケージには、データベースオブジェクトの完全な定義を抽出するためのインタフェースが用意されています。これらの定義は、XMLまたはDDL文のいずれかで表現されます。2つのインタフェーススタイルには次の特長があります。