OceanBaseデータベースのOracleモードにおけるデータディクショナリは、読み取り専用のテーブルの集合であり、データベースの管理メタデータを提供します。
ディクショナリビューの概要
OceanBaseデータベースのOracleモードにおけるデータディクショナリは、システムテーブルとディクショナリビューで構成されており、データベースの重要な部分です。
システムテーブルはデータベースに関する情報を格納しており、OceanBaseデータベースのみがこれらのテーブルへの書き込みと読み取りを行えます。ユーザーが直接システムテーブルにアクセスすることはほとんどありません。これは、それらが内部実装メカニズム向けであり、読みにくい上に、バージョン間で外部互換性が保証されていないためです。
ディクショナリビューは、システムテーブルのデータをユーザーフレンドリーな情報に解読し、例えばユーザー名やテーブル名を結合キーまたはWHERE句のフィルタ条件として使用することで、システムテーブルの情報を簡略化します。ビューにはデータディクショナリ内のすべてのオブジェクトの名前と説明が含まれます。一部のビューはすべてのデータベースユーザーがアクセスできますが、他のビューは管理者のみが使用できます。
データディクショナリには、以下の情報が含まれますが、これらに限定されません:
データベース内の各スキーマオブジェクトの定義。列のデフォルト値や整合性制約情報が含まれます。
スキーマオブジェクトに割り当てられたストレージ容量と現在の使用状況。
データベースユーザーの名前、ユーザーに付与された権限とロール、およびユーザーに関連する監査情報。
ディクショナリビューの構成
ディクショナリビューは、一般的に以下の表に示す情報で構成されます。
プレフィックス |
権限 |
内容 |
その他の情報 |
|---|---|---|---|
| DBA_ | データベース管理者 | すべてのオブジェクト | 一部のDBA_ビューには、管理者にとって有用な情報を含む追加の列があります。 |
| ALL_ | すべてのユーザー | ユーザーが持つ権限のあるオブジェクト | ユーザーが所有するオブジェクトを含みます。 |
| USER_ | すべてのユーザー | ユーザーが所有するオブジェクト | USER_プレフィックスを持つビューには通常、OWNER列が含まれません。 |
ALL_ プレフィックスを持つビュー
ALL_プレフィックスを持つビューは、ユーザーがデータベース全体を概観するために使用されます。ユーザーが所有するスキーマオブジェクトに加えて、これらのビューは公開または明示的にユーザーに付与されたスキーマオブジェクトも返します。
DBA_ プレフィックスを持つビュー
DBA_プレフィックスを持つビューは、データベース全体のすべての関連情報を表示します。DBA_ビューには管理者権限でのアクセスが必要です。
USER_ プレフィックスを持つビュー
一般のデータベースユーザーが最も頻繁に使用するビューは、USER_プレフィックスを持つビューです。
この種のビューには、以下の特徴があります:
データベース内でユーザーのプライベート環境を参照し、ユーザーが作成したスキーマオブジェクトやユーザーが付与した権限などのメタデータを含みます。
ユーザー関連の行のみを表示し、
ALL_ビューの情報のサブセットを返します。他のビューと同じ列を持ちますが、列
OWNERは暗黙的に含まれます。便宜上、
PUBLICシノニムを略記できます。
ディクショナリビューの動作原理
Oracleモードでは、ユーザーのSYSユーザーがデータディクショナリのすべてのベーステーブルとユーザーがアクセス可能なビューを所有しています。各Oracleテナントは作成時に、デフォルトでSYSユーザーを持ちます。
データベース操作の過程で、データベースシステムはデータディクショナリを読み取り、スキーマオブジェクトが存在するかどうか、およびユーザーが適切なアクセス権限を持っているかどうかを確認します。Oracleモードでは、データ構造、監査、権限付与、データの変更を反映させるために、データディクショナリを継続的に更新します。
例えば、ユーザー hr が「インターン」という名前のテーブルを作成した場合、データベースはデータディクショナリに新しい行を追加し、新しいテーブル、列、セグメント、データブロック、および hr がそのテーブルに対して持つ権限を反映させます。次回ディクショナリビューをクエリする際、この新しい情報は依然として表示されます。
データディクショナリのベーステーブルに含まれるデータは、Oracleモードでの正常な運用に不可欠です。データディクショナリ情報を書き込んだり変更したりすべきは、データベース本体のみです。Oracleモードのいかなるユーザーも、SYSユーザーのスキーマに含まれる行やスキーマオブジェクトを変更してはなりません。そのような操作はデータの整合性を損なう可能性があるため、セキュリティ管理者はこれを厳しく制御する必要があります。
ディクショナリビューの格納
OceanBaseデータベースでは、各テナントのメタデータを一つの全体として格納するデータディクショナリは、各テナントのディクショナリ情報内にのみ保存されます。
特定のテナントのメタデータを格納するデータディクショナリは、そのテナント専用のディクショナリテーブルに保存されるため、各データディクショナリは自身のテナント専用のディクショナリテーブルに格納されます。