アプリ開発者は「顧客テーブル」「注文テーブル」「商品テーブル」のような業務データ、いわゆるメタではないデータにアクセスすることがほとんどで、メタデータは未知の領域となっていた。
そこでOracleのメタデータの確認方法についてライトにまとめた。
1. メタデータを保持するテーブル・ビュー
DICTIONARYビューでメタデータを保持するテーブル・ビューの一覧を確認できる。
(…という記事を見たが、ここに載っていないビューもあるようだ。。。
全てが載っているビューはどれだろう。。。)
SELECT * FROM DICTIONARY;
1-1. 静的データ・ディクショナリ
データベースに関する管理メタデータ。
データ・ディクショナリが変更された場合(たとえば、新しく表が作成されたり、ユーザーに新しい権限が付与された場合など)のみ変更される。
所有者はSYSユーザー。
実表とビューがある。
-
実表(静的データ・ディクショナリ表)
Oracleだけが読み書き可。ほとんどが暗号化されておりユーザーが直接アクセスすることを目的としていない。 -
ビュー(静的データ・ディクショナリ・ビュー)
実表をユーザーが見ることを目的として加工したビュー。読み取り専用。
静的データ・ディクショナリ・ビュー
表示される情報の範囲に応じて以下3種類のビューに分類される。
また、SELECT文を実行したユーザーの権限によって閲覧できるビューやその内容が異なる。
-
USER_ビュー
"USER_"から始まる名前のビュー。
自己が所有するオブジェクトの情報。 -
ALL_ビュー
"ALL_"から始まる名前のビュー。
権限が付与されている範囲で閲覧可能な全ての情報。 -
DBA_ビュー
"DBA_"から始まる名前のビュー。
データベース全体の情報。
SELECT ANY TABLE権限を持つユーザーのみが閲覧可能。
CDBアーキテクチャの場合
CDBRootとPDBのそれぞれがデータ・ディクショナリを持つ。
-
CDBのデータ・ディクショナリ
CDB全体に関わるメタデータを保持している。
"CDB_"から始まる名前のビュー。 -
PDBのデータ・ディクショナリ
親であるCDBRootのデータディクショナリと、自分自身(各PDB固有)のデータディクショナリから成る。CDBRootのデータディクショナリについては、実データではなくポインタを保持している。
1-2. 動的パフォーマンス・ビュー(V$ビュー)
進行中のデータベース・アクティビティを監視するビュー。
データベースがオープンしている間、セッションやメモリ、ロックの獲得状況といった内部的な情報が継続的に更新される、参照専用の特別なビュー。
データファイルではなく内部ディスク構造およびメモリー構造のデータが表示されるので、一部のV\$ビューはオープン状態でなくても参照できる。(仮想ビュー)
実ビューの接頭辞は"V_\$"で、閲覧用のシノニムが接頭辞"V\$"。
所有者はSYSユーザー。
SYSユーザーまたはSYSDBA権限が付与されているユーザーのみがアクセス可能。
V$ビュー
"V$"から始まる動的パフォーマンス・ビュー。
動的パフォーマンス・ビューの別称でもある。
GV$ビュー
グローバルV\$ビュー。
"GV\$"から始まる名前の動的パフォーマンス・ビュー。
ほとんどすべてのV\$ビューに対応するGV\$ビューが存在する。
V\$ビューにはない、INST_ID
列が存在する。
使いどころはRAC環境。
RAC環境でGV\$ビューを参照すると、INST_ID
列からインスタンスを特定できる。
2. メタデータを返すOracleパッケージ関数
Oracleが提供するパッケージ関数にメタデータを取得できるものがある。
たとえばDBMS_ROWIDパッケージ。
参考文献