この章では、データ・ディクショナリと呼ばれる、各Oracle Databaseの読取り専用の参照表とビューの中核的なセットについて説明します。また、この章では、データベースがオープンされ、使用されている間に継続的に更新される特別な動的パフォーマンス・ビューについても説明します。
この章の内容は、次のとおりです。
データ・ディクショナリはOracle Databaseの重要な部分であり、データベースに関する管理メタデータを提供する読取り専用の表の集合です。データ・ディクショナリには次のような情報が含まれています。
列のデフォルト値、整合性制約情報など、データベース内の各スキーマ・オブジェクトの定義
スキーマ・オブジェクトに割り当てられている領域、およびスキーマ・オブジェクトによって現在使用されている領域の容量
Oracle Databaseユーザーの名前、ユーザーに付与された権限とロール、およびユーザーに関連する監査情報(「ユーザー・アカウント」を参照)
データ・ディクショナリは、すべてのOracle Databaseでデータ管理の中心的な部分となります。たとえば、データベースでは次のアクションを実行します。
ユーザー、スキーマ・オブジェクトおよび記憶域構造に関する情報を検索するために、データ・ディクショナリにアクセスします。
DDL文が発行されるたびに、データ・ディクショナリを変更します(「データ定義言語(DDL)文」を参照)。
Oracle Databaseでは、データ・ディクショナリのデータは、他のデータと同様に表に格納されるため、ユーザーはSQLを使用してデータの問合せを実行できます。たとえば、ユーザーは自分の権限、自分のスキーマに存在する表、自分の表に存在する列、これらの列に対して索引が構築されているかどうかなどを判断するために、SELECT文を実行できます。
データ・ディクショナリは、次のタイプのオブジェクトで構成されています。
実表
データベースに関する情報を格納する、基礎となる表です。これらの表に読取り/書込みできるのはOracle Databaseのみです。これらの表は正規化され、データのほとんどは、暗号形式で格納されているため、ユーザーが直接アクセスすることはほとんどありません。
ビュー
これらのビューは、実表にあるデータを、ユーザー名や表の名前などの実用的な情報にデコードし、結合とWHERE
句を使用して情報を簡略化します。これらのビューには、データ・ディクショナリ内のすべてのオブジェクトの名前と説明が含まれています。すべてのユーザーがアクセスできるビューもいくつかありますが、その他のビューは管理者のみが使用するように設計されています。
一般的に、データ・ディクショナリはセットとしてグループ化されています。多くの場合、表6-1で示すように、そのセットは、類似した情報が格納されている3つのビューで構成され、それぞれが接頭辞によって区別されます。適切なビューに問合せを発行すると、自分に関係のある情報にのみアクセスできます。
表6-1 データ・ディクショナリ・ビューのセット
接頭辞 | ユーザー・アクセス | 内容 | 注意 |
---|---|---|---|
|
データベース管理者 |
すべてのオブジェクト |
一部の |
|
すべてのユーザー |
ユーザーが権限を持つオブジェクト |
ユーザーが所有するオブジェクトが含まれています。これらのビューは有効化されている現在の一連のロールに従います。 |
|
すべてのユーザー |
ユーザーによって所有されているオブジェクト |
接頭辞が |
ビュー・セットには必ずしも3つのメンバーが含まれるわけではありません。たとえば、データ・ディクショナリにはDBA_LOCK
ビューはありますが、ALL_LOCK
ビューはありません。
システムによって提供されているDICTIONARY
ビューには、すべてのデータ・ディクショナリ・ビューの名前と短い説明が含まれています。次に、このビューに対する問合せと出力サンプルの一部を示します。
SQL> SELECT * FROM DICTIONARY 2 ORDER BY TABLE_NAME; TABLE_NAME COMMENTS ------------------------------ ---------------------------------------- ALL_ALL_TABLES Description of all object and relational tables accessible to the user ALL_APPLY Details about each apply process that dequeues from the queue visible to the current user . . .
接頭辞がDBA_
のビューには、データベース全体の関連情報がすべて表示されます。DBA_
ビューは、管理者のみが使用するように設計されています。
たとえば、次の問合せは、データベース内のすべてのオブジェクトに関する情報を表示します。
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE
FROM DBA_OBJECTS
ORDER BY OWNER, OBJECT_NAME;
関連項目: 管理権限の詳細は、『Oracle Database管理者ガイド』を参照してください。 |
接頭辞がALL_
のビューは、ユーザーのデータベース全体の概要を参照します。これらのビューは、ユーザーが所有しているスキーマ・オブジェクトに加えて、権限とロールのPUBLICへの付与や明示的な付与によってそのユーザーがアクセスできるようになったスキーマ・オブジェクトに関する情報を戻します。
たとえば次の問合せは、アクセス権を持っているすべてのオブジェクトに関する情報を戻します。
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM ALL_OBJECTS ORDER BY OWNER, OBJECT_NAME;
ALL_
ビューは有効化されているロールの現在のセットに従うため、問合せの結果は、次に示す例のように、どのロールが有効化されているかによって異なります。
SQL> SET ROLE ALL; Role set. SQL> SELECT COUNT(*) FROM ALL_OBJECTS; COUNT(*) ---------- 68295 SQL> SET ROLE NONE; Role set. SQL> SELECT COUNT(*) FROM ALL_OBJECTS; COUNT(*) ---------- 53771
ストアド・プロシージャはロールがデフォルトで有効化されていないため、ここでALL_ビューを使用する場合、アプリケーション開発者はロールが及ぼす影響について認識しておく必要があります。
通常のデータベース・ユーザーが最も頻繁に使用するのは、接頭辞がUSER_
のビューです。これらのビューには、次のような特長があります。
ユーザーが作成したスキーマ・オブジェクトやユーザーによる権限付与に関するメタデータなど、ユーザーのプライベートなデータベース環境を参照します。
ユーザーに関係する行のみを表示し、ALL_
ビューにある情報のサブセットを戻します。
列OWNER
が暗黙的に想定されることを除いて、他のビューと同一の列を持っています。
たとえば、次の問合せは、自分のスキーマに入っているすべてのオブジェクトを戻します。
SELECT OBJECT_NAME, OBJECT_TYPE FROM USER_OBJECTS ORDER BY OBJECT_NAME;
DUAL
表は、既知の結果を保証するために、Oracle Databaseとユーザー作成のプログラムによって参照されるデータ・ディクショナリ内の小さな表です。DUAL表は、現在の日時など、値を1回のみ戻す必要がある場合に役立ちます。DUAL
にはすべてのデータベース・ユーザーがアクセスできます。
DUAL
表にはDUMMY
という1つの列と、値X
を格納する1つの行があります。次の例では、算術演算を行うためにDUAL
表に対する問合せを発行しています。
SQL> SELECT ((3*4)+5)/3 FROM DUAL; ((3*4)+5)/3 ----------- 5.66666667
関連項目: DUAL表の詳細は、『Oracle Database SQL言語リファレンス』 を参照してください。 |
データ・ディクショナリの実表は、あらゆるOracle Databaseで最初に作成されるオブジェクトです。データベースのデータ・ディクショナリ表およびビューは、すべてSYSTEM表領域に格納されます。
SYSTEM
表領域は、データベースのオープン中、常にオンラインであるため、データベースのオープン中、データ・ディクショナリは常に使用可能です。
データ・ディクショナリのすべての実表とユーザー・アクセス可能ビューは、Oracle DatabaseユーザーSYS
が所有しています。データ・ディクショナリの実表内のデータは、Oracle Databaseを機能させるために必要です。このため、データ・ディクショナリの情報はOracle Databaseによってのみ書込みまたは変更される必要があります。したがって、データ整合性が損われることがあるため、Oracle DatabaseのユーザーはSYSスキーマに含まれている行またはスキーマ・オブジェクトを変更できません。セキュリティ管理者は、この重要なアカウントを厳しく管理し続ける必要があります。
注意: データ・ディクショナリ表のデータを変更したり操作すると、データベースの操作に永続的な悪影響を与えるおそれがあります。 |
データベースの操作時に、Oracle Databaseはデータ・ディクショナリを読み取って、スキーマ・オブジェクトが存在すること、およびユーザーのアクセス権が適切に付与されていることを確認します。また、Oracle Databaseは、データベース構造、監査、権限付与およびデータの変更を反映するために、継続的にデータ・ディクショナリを更新します。
たとえば、ユーザーhr
がinterns
という表を作成すると、新しい表、列、セグメント、エクステントおよびhr
がその表に対して持っている権限を反映するために、新しい行がデータ・ディクショナリに追加されます。この新しい情報は、次回ディクショナリ・ビューを問い合せるときに表示されます。
多くのデータ・ディクショナリ・ビューにユーザーが簡単にアクセスできるようにするため、Oracle Databaseはパブリック・シノニムを作成します。セキュリティ管理者は、システム全体で使用するスキーマ・オブジェクトのパブリック・シノニムを作成して追加することもできます。ユーザーは、パブリック・シノニムに使用されているのと同じ名前を、自分のスキーマ・オブジェクトに付けないようにする必要があります。
データ・ディクショナリの情報の多くは、データ・ディクショナリ・キャッシュに含まれており、これは、ユーザーのアクセスの妥当性のチェックや、スキーマ・オブジェクトの状態検証のため、データベースで常にこれらの情報が必要とされるためです。通常、キャッシュに保持されるのは、解析情報です。表とそれらの列について記述しているCOMMENTS
列は、ディクショナリ・キャッシュには保持されませんが、データベース・バッファ・キャッシュに保持されることがあります。
Oracle Databaseは、操作中ずっと、カレント・データベース・アクティビティを記録する一連の仮想表を保持しています。これらのビューは、データベースがオープンされ、使用中である間、継続的に更新されるため、動的パフォーマンス・ビューと呼ばれます。これらのビュー(場合によってはV$ビューとも呼ばれます)には、次のような情報が含まれています。
Oracle Enterprise Managerでは、データベースに関する情報を取得するためにこのビューを使用します(「Oracle Enterprise Manager」を参照)。
管理者はこのビューを使用して、パフォーマンスを監視し、デバッグを実行できます。
関連項目: 動的パフォーマンス・ビューの完全なリストは、『Oracle Databaseリファレンス』を参照してください。 |
動的パフォーマンス・ビューは、データベース管理者が変更または削除できないため、固定ビューと呼ばれることもあります。しかし、データベース管理者は、これらの表のビューに問合せを発行したり、ビューを作成したり、それらのビューにアクセスする権限を他のユーザーに付与できます。
動的パフォーマンス表はSYS
が所有し、その名前はV_$
で始まります。これらの表に対してビューが作成され、V$
という接頭辞を持つパブリック・シノニムが作成されます。たとえば、V$DATAFILE
ビューにはデータファイルに関する情報が格納されます。V$FIXED_TABLE
ビューにはすべての動的パフォーマンス表およびビューに関する情報が格納されます。
ほとんどのV$
ビューに対して、対応するGV$
ビューが存在します。Oracle Real Application Clusters(Oracle RAC)では、GV$
ビューに対して問合せを発行すると、すべての修飾データベース・インスタンスからのV$
ビュー情報が戻されます(「データベース・サーバー・グリッド」を参照)。
Database Configuration Assistant(DBCA)を使用してデータベースを作成する場合は、データ・ディクショナリがOracleによって自動的に作成されます。Oracle Databaseでは、自動的にcatalog.sql
スクリプトが実行され、このスクリプトには、その動的パフォーマンス・ビューの、ビューおよびパブリック・シノニムの定義が含まれます。これらのビューとシノニムを作成するには、catalog.sql
を実行する必要があります。
関連項目:
|
動的パフォーマンス・ビューは、データベースのメモリー構造から構築された仮想表に基づいています。このため、これらのビューはデータベース内に格納される従来型の表ではありません。これらのビューではデータが動的に更新されるため、読取り一貫性は保証されません。
動的パフォーマンス・ビューは実際の表ではないため、データはデータベースおよびインスタンスの状態によって異なります。たとえば、データベースが起動されており、マウントされていないとき、V$INSTANCE
およびV$BGPROCESS
に対する問合せを発行できます。ただし、データベースがマウントされるまでは、V$DATAFILE
に対する問合せは発行できません。
DBMS_METADATA
パッケージには、データベース・オブジェクトの完全な定義を抽出するためのインタフェースが用意されています。これらの定義は、XMLまたはSQL DDLのいずれかで表現されます。柔軟で洗練された、プログラム制御用のインタフェースと、単純化された、非定型問合せ用のインタフェースの2つのスタイルのインタフェースがあります。
関連項目: DBMS_METADATAの詳細は、『Oracle Database PL/SQLパッケージ・プロシージャおよびタイプ・リファレンス』 を参照してください。 |