データディクショナリの概要

データディクショナリはOracleデータベースで最も重要な部分の1つであり、データベースに関する情報を提供する読取り専用の表の集合です。データディクショナリには次のものが含まれます。

  • データベース内のすべてのスキーマオブジェクト(表、ビュー、索引、クラスタ、シノニム、順序、プロシージャ、ファンクション、パッケージ、トリガーなど)の定義


  • スキーマオブジェクトに割り当てられている領域と、現在使用されている領域の容量 


  • 列のデフォルト値


  • 整合性制約に関する情報


  • Oracleユーザーの名前


  • それぞれのユーザーに付与されている権限とロール


  • 各種スキーマオブジェクトにアクセスまたは更新したユーザーなどの監査情報


  • その他の一般的なデータベース情報


データディクショナリは、他のデータベースデータと同様に、表とビューによって構成されています。特定のデータベースのデータディクショナリ表とビューは、すべてそのデータベースのSYSTEM表領域に格納されます。

データディクショナリは、あらゆるOracleデータベースにとって中核的な存在であるだけでなく、エンドユーザーからアプリケーション設計者やデータベース管理者まで、すべてのユーザーにとって重要なツールです。データディクショナリにアクセスするには、SQL文を使用します。データディクショナリは読取り専用のため、ユーザーはデータディクショナリの表とビューに対して問合せ(SELECT文)のみを発行できます。


関連項目

SYSTEM表領域の詳細は、「大型ファイル表領域」を参照してください。 



データディクショナリの構造

データディクショナリは、次の要素で構成されています。

実表

対応するデータベースについての情報を格納する基礎になる表。これらの表に読取り/書込みできるのはOracleだけです。これらの表は正規化され、データのほとんどは、暗号形式で格納されているため、ユーザーが直接アクセスすることはほとんどありません。

ユーザーアクセス可能ビュー

データディクショナリの実表に格納されている情報を要約して表示するビュー。これらのビューは、実表にあるデータを、ユーザー名や表の名前などの実用的な情報にデコードし、結合とWHERE句を使用して情報を簡略化します。ほとんどのユーザーには、実表ではなく、これらのビューへのアクセス権が与えられています。

SYS(データディクショナリの所有者)

データディクショナリのすべての実表とユーザーアクセス可能ビューは、OracleユーザーSYSが所有しています。したがって、Oracleユーザーは、SYSスキーマに含まれている行またはスキーマオブジェクトを決して変更(UPDATEDELETEまたは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 

ユーザーのビュー(ユーザーのスキーマにある) 

ALL 

広義のユーザーのビュー(ユーザーがアクセスできる) 

DBA 

データベース管理者のビュー(ユーザー全員のスキーマの内容) 


列の集合は、次の例外を除き、ビュー全体で同一です。

  • 接頭辞がUSERのビューには、通常、列OWNERは含まれません。USERビューでは、この列には、問合せを発行するユーザーが暗黙的に想定されます。


  • 一部のDBAビューには、管理者にとって有用な情報を含む列が追加されています。


    関連項目

    データディクショナリビューとその列の完全なリストは、『Oracle Databaseリファレンス』を参照してください。 



接頭辞がUSERのビュー

通常のデータベースユーザーが最も頻繁に使用するのは、接頭辞がUSERのビューです。これらのビューには、次のような特長があります。

  • ユーザーが作成したスキーマオブジェクトやユーザーによる権限付与に関する情報など、ユーザー独自のプライベートなデータベース環境を参照します。


  • ユーザーに関係する行のみを表示します。


  • OWNERが暗黙的に想定されることを除いて、他のビューと同一の列を持っています。


  • ALLビューにある情報のサブセットを戻します。


  • 使用しやすいように短縮したパブリックシノニムを持つことができます。


たとえば、次の問合せは、自分のスキーマに入っているすべてのオブジェクトを戻します。

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_ACCESSIBILITYfalseに設定)すると、SYSスキーマ内のオブジェクト(ディクショナリオブジェクト)へのアクセスは、SYSスキーマを持つユーザーに限定されます。これらのユーザーはSYSであり、SYSDBAとして接続するユーザーです。


関連項目

システム権限の制限の詳細は、『Oracle Database 管理者ガイド』を参照してください。 



DUAL表

DUAL表は、既知の結果を保証するために、Oracleとユーザー作成のプログラムによって参照されるデータディクショナリ内の小さな表です。この表にはDUMMYという1つの列と、値Xを格納する1つの行があります。


関連項目

DUAL表の詳細は、『Oracle Database SQLリファレンス』を参照してください。 



動的パフォーマンス表

Oracleは、操作中ずっと、カレントデータベースアクティビティを記録する一連の仮想表を保持しています。これらの表のことを動的パフォーマンス表と呼びます。

動的パフォーマンス表は実際の表ではないため、ほとんどのユーザーはこれにアクセスすることはありません。しかし、データベース管理者は、これらの表のビューに問合せを発行したり、ビューを作成したり、それらのビューにアクセスする権限を他のユーザーに付与できます。これらのビューは、データベース管理者が変更または削除できないため、固定ビューと呼ばれることもあります。

動的パフォーマンス表はSYSが所有しており、その名前はすべてV_$で始まります。これらの表のビューが作成され、そのビューのパブリックシノニムが作成されます。これらのシノニム名は、V$で始まります。たとえば、V$DATAFILEビューにはデータベースのデータファイルに関する情報が格納され、V$FIXED_TABLEビューにはデータベース内のすべての動的パフォーマンス表とビューに関する情報が格納されます。


関連項目

動的パフォーマンスビューのシノニムおよび列の完全なリストは、『Oracle Databaseリファレンス』を参照してください。 



データベースオブジェクトメタデータ

DBMS_METADATAパッケージには、データベースオブジェクトの完全な定義を抽出するためのインタフェースが用意されています。これらの定義は、XMLまたはDDL文のいずれかで表現されます。2つのインタフェーススタイルには次の特長があります。

  • 柔軟で洗練された、プログラム制御用のインタフェース


  • 単純化された、非定型問合せ用のインタフェース


    関連項目

    DBMS_METADATAの詳細は、『Oracle Database PL/SQLパッケージプロシージャおよびタイプリファレンス』を参照してください。