OceanBaseデータベースのシステムビューは、データ・ディクショナリ・ビューとパフォーマンスビューに分かれます。本記事では、主にデータ・ディクショナリ・ビューとパフォーマンスビューの関連内容および表示方法について説明します。
データ・ディクショナリ・ビューとは、データベース内の仮想テーブルであり、テーブル、列、インデックス、ユーザー、ロール、権限などを含むデータベースのメタデータ情報やシステム状態情報を表示するために使用されます。データ・ディクショナリ・ビューは通常、システムテーブルスペースに格納され、読み取り専用であり、変更や削除はできません。
パフォーマンスビューは、データベースのメモリ構造に基づいて構築された仮想テーブルであり、データベースのパフォーマンス統計情報や監視情報を表示するために使用されます。主にパフォーマンスに関連しており、動的パフォーマンスビューと呼ばれます。パフォーマンスビューは内部ディスク構造やメモリ構造に関するデータを提供できますが、それが主な目的ではありません。パフォーマンスビューも通常、システムテーブルスペースに格納され、読み取り専用であり、変更や削除はできません。
データ・ディクショナリ・ビューとパフォーマンスビューは、データベースにおける非常に重要なメタデータ情報およびシステム状態情報のソースであり、データベースの構造、状態、パフォーマンスを理解し、パフォーマンスチューニングや最適化を行うために役立ちます。
sysテナントのビューの概要
OceanBaseデータベースのメタデータ情報やシステム状態情報を照会する必要がある場合、sys テナントのビューを照会することで取得できます。sys テナントはOceanBaseデータベース内の特別なテナントであり、テーブルスペース、ユーザー、ロール、権限など、すべてのシステムレベルのオブジェクトとメタデータ情報を含んでいます。sys テナントには、データベース構造および状態情報を表示するための仮想テーブル、いわゆるビューが多数存在します。以下では、OceanBaseデータベースの sys テナントにおけるビューの概要を説明します。
データ・ディクショナリ・ビュー
sys テナントのデータ・ディクショナリ・ビューは、データベース内のメタデータ情報およびシステム状態情報を表示するための仮想テーブルであり、これらのビューを照会することでデータベースの構造と状態情報を取得できます。 sys テナントのデータ・ディクショナリ・ビューには、oceanbase.CDB_* ビューと oceanbase.DBA_* ビューが含まれます。
oceanbase.CDB_*ビュー:この種のビューは、システムテナントからすべてのテナントのデータベースオブジェクト情報にアクセスするために使用されます。一般的に、テナントレベルのデータデータ・ディクショナリ・ビューはDBA_OB_*に対応します。oceanbase.DBA_*ビュー:この種のビューは、現在のテナント内のすべてのデータベースオブジェクト情報を取得するために使用されます。すべてのテナントから可視可能なビューであり、この種のビューにアクセスするには管理者権限が必要です。以下のビューは
sysテナントでのみ可視可能です:- oceanbase.DBA_OB_RESOURCE_POOLS
- oceanbase.DBA_OB_ROOTSERVICE_EVENT_HISTORY
- oceanbase.DBA_OB_SERVERS
- oceanbase.DBA_OB_SERVER_EVENT_HISTORY
- oceanbase.DBA_OB_SERVER_JOBS
- oceanbase.DBA_OB_TENANT_JOBS
- oceanbase.DBA_OB_UNITS
- oceanbase.DBA_OB_UNIT_CONFIGS
- oceanbase.DBA_OB_UNIT_JOBS
- oceanbase.DBA_OB_ZONES
パフォーマンスビュー
sys テナントのパフォーマンスビューは、データベースのパフォーマンス統計情報および監視情報を表示するための仮想テーブルであり、これらのビューを照会することでデータベースのパフォーマンス状態および監視情報を取得できます。 パフォーマンスビューの名前は GV$* または V$* で始まります。GV$ ビューを照会すると、条件に一致するすべての V$ ビュー情報が返されます。
GV$*: クラスタ全体の稼働状態およびパフォーマンス指標情報を表示するために使用されます。この種のビューはクラスタ全体でアクセス可能であり、グローバルな状態情報を提供します。 アクセス権限によって以下のように区別されます:sysテナントからアクセスする場合、すべてのテナントの情報が表示されます。- 通常のテナントからアクセスする場合、そのテナント自身の情報が表示されます。
V$*: クライアントが接続したノードの稼働状態およびパフォーマンス指標情報を表示するために使用されます。この種のビューは、クライアントが接続したノードの状態情報の提供にのみ使用できます。他のノードの状態情報にアクセスする必要がある場合は、GV$*ビューを使用してください。
ビューの照会
sys テナントにログインし、SHOW ステートメントを使用して対応するタイプのビューを確認できます。
oceanbase.CDB_*ビュー、oceanbase.DBA_*ビュー、およびパフォーマンスビューを確認する例は以下のとおりです:obclient> USE oceanbase; obclient> SHOW TABLES;
MySQLテナントのビューの概要
OceanBaseデータベースにおいて、MySQLテナントのビューとは、1つまたは複数の基本テーブルの行と列から構成される仮想テーブルであり、論理的なテーブルです。ビューは基本テーブルの複雑さを隠し、クエリ操作を簡素化することで、データアクセスの効率と安全性を向上させます。
データ・ディクショナリ・ビュー
MySQLテナントのデータ・ディクショナリ・ビューには、information_schema.xxx ビューと mysql.xxx ビューが含まれます。
information_schema.xxxビュー:この種のビューは、MySQLテナント内のデータベースメタデータ(データベースまたはテーブルの名前、列のデータ型、またはアクセス権限など)へのアクセスを提供します。これらはデータディクショナリまたはシステムディレクトリと呼ばれます。mysql.xxxビュー:この種のビューには、データベースオブジェクトのメタデータを格納するデータディクショナリテーブルと、その他の操作目的で使用されるシステムテーブルが含まれます。また、一部のmysql.xxxプレフィックス付きビューとも互換性があります。例えば、mysqlHELP_xxxビューにはサーバー側のヘルプ情報が含まれています。mysql.time_zone_xxxはタイムゾーン関連情報を記録しています。mysql.userビューとmysql.dbビューは、ユーザー権限に関する情報を記録しています。
以下は、一般的に使用されるMySQLテナントのデータ・ディクショナリ・ビューの一部です:
information_schema.tables:テーブル名、テーブルタイプ、テーブルが属するデータベースなど、データベース内のテーブル情報を表示します。
information_schema.columns:列名、データ型、主キーかどうかなど、データベース内の列情報を表示します。
information_schema.indexes:インデックス名、インデックスタイプ、インデックスが属するテーブルなど、データベース内のインデックス情報を表示します。
information_schema.views:ビュー名、ビュー定義など、データベース内のビュー情報を表示します。
mysql.user:ユーザー名、パスワード、権限など、データベース内のユーザー情報を表示します。
パフォーマンスビュー
MySQLテナントのパフォーマンスビューの名前は GV$* または V$* で始まります。各 V$ ビューには、ほぼ対応する GV$ ビューが存在します。
GV$*: クラスタ全体の実行状態とパフォーマンス指標情報を表示するために使用されます。この種のビューはクラスタ全体でアクセス可能であり、グローバルな状態情報を提供します。 アクセス権限によって以下のように区別されます:sysテナントからアクセスする場合、すべてのテナントの情報が表示されます。- 通常のテナントからアクセスする場合、現在のテナントの情報が表示されます。
V$*: クライアントが接続したノードの実行状態とパフォーマンス指標情報を表示するために使用されます。この種のビューは、クライアントが接続したノードの状態情報の提供にのみ使用できます。他のノードの状態情報にアクセスする必要がある場合は、GV$*ビューを使用してください。
ビューの確認
MySQLテナントにログインし、SHOW ステートメントを使用して対応するタイプのビューを確認できます。
information_schema.*ビューを確認する例は次のとおりです:obclient> USE information_schema; obclient> SHOW TABLES;mysql.*ビューを確認する例は次のとおりです:obclient> USE mysql; obclient> SHOW TABLES;
Oracleテナントにおけるビューの概要
OceanBaseデータベースでは、OracleテナントはOracleデータベースで一般的に使用されるテーブル、ビュー、ストアドプロシージャなどのオブジェクトと互換性があり、ユーザーが移行や使用を容易にします。また、Oracleテナントには通常、データベースのメタデータやオブジェクト情報を表示するためのシステムテーブルやビューも用意されています。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供しています。
データ・ディクショナリ・ビュー
Oracleテナントのデータ・ディクショナリ・ビューは、以下の表に示す情報で構成されています。
| プレフィックス | 権限 | その他の情報 |
|---|---|---|
| DBA_ | データベース管理者 | すべてのユーザーのテーブル、インデックス、ビュー、ストアドプロシージャなどを含みます。一部のDBA_ビューには、管理者にとって有用な情報を含む追加の列があります。 |
| ALL_ | すべてのユーザー | ユーザーが所有するオブジェクトを含みますが、現在のユーザーがアクセス権を持つオブジェクトのみが表示されます。 |
| USER_ | すべてのユーザー | 現在のユーザーのテーブル、インデックス、ビュー、ストアドプロシージャなどを含みます。プレフィックスUSER_付きのビューには通常OWNER列が含まれません。 |
DBA_を含むビューデータベース全体のすべての関連情報を表示します。
DBA_ビューへのアクセスには管理者権限が必要です。ALL_を含むビューユーザーがデータベース全体を概観するために使用されます。ユーザーが所有するスキーマオブジェクトに加えて、これらのビューは公開または明示的にユーザーに付与されたスキーマオブジェクトも返します。
USER_を含むビュー一般のデータベースユーザーが最もよく使用するビューです。この種のビューには以下の特徴があります:
ユーザーが作成したスキーマオブジェクトやユーザーが付与した権限など、ユーザーのプライベート環境に関するメタデータをデータベース内で参照します。
ユーザーに関連する行のみを表示し、
ALL_ビューの情報のサブセットを返します。他のビューと同じ列を持ちますが、暗黙の列
OWNERが含まれます。
Oracleテナントにおけるデータ・ディクショナリ・ビューへのアクセスについて、異なるユーザーが持つ権限は異なります:
SYSユーザー データベースのスーパー管理者であり、最高権限を持ち、すべてのデータベースオブジェクトとメタデータ情報にアクセスできます。SYSユーザーは、
DBA_、ALL_、USER_の各プレフィックスを持つすべてのビューにアクセスでき、すべてのユーザーのメタデータ情報にもアクセスできます。一般ユーザー 自分自身のオブジェクトとメタデータ情報、および自分自身に付与されたオブジェクトとメタデータ情報にのみアクセスできます。つまり、自分自身の
USER_プレフィックスを持つビューとすべてのユーザーのALL_プレフィックスを持つビューにのみアクセスでき、DBA_プレフィックスを持つビューにはアクセスできません。
要約すると、Oracleテナントにおいて、DBA_、ALL_、USER_ の各プレフィックスを持つビューはデータベースのメタデータ情報にアクセスするためのビューであり、SYSユーザーはすべてのビューにアクセスできますが、一般ユーザーは自分自身のビューとすべてのユーザーの共通ビューにのみアクセスできます。
パフォーマンスビュー
Oracleテナントのパフォーマンスビューには、SYS.V$* ビューと SYS.GV$* ビューが含まれ、どちらもSYSデータベースに配置されており、クエリ時にはプレフィックス SYS. を省略できます。
SYS.V$*: クライアントが接続するノードの実行状態とパフォーマンス指標情報を表示するために使用されます。この種のビューは、クライアントが接続するノードの状態情報の提供にのみ使用できます。他のノードの状態情報にアクセスする必要がある場合は、SYS.GV$*ビューを使用してください。SYS.GV$*: クラスタ全体の実行状態とパフォーマンス指標情報を表示するために使用されます。この種のビューはクラスタ全体でアクセス可能であり、グローバルな状態情報を提供します。 アクセス権限によって以下のように区別されます:- SYSテナントからアクセスする場合、すべてのテナントの情報が表示されます。
- 一般テナントからアクセスする場合、そのテナントの情報が表示されます。
ビューのクエリ
SELECT ステートメントを使用して、対応するタイプのシステムビューを確認できます。
ビューのクエリ例は以下のとおりです:
obclient> SELECT * FROM DBA_VIEWS;
obclient> SELECT * FROM ALL_VIEWS;