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データベースでは、各テナントのメタデータを一つの全体として格納するデータディクショナリは、各テナントのディクショナリ情報内にのみ保存されます。
特定のテナントのメタデータを格納するデータディクショナリがそのテナント専用のディクショナリテーブルに保存されるため、各データディクショナリは自身のテナント専用のディクショナリテーブルに保存されます。