テーブル関連オブジェクトのクエリ
V2.xおよびV3.xバージョンとは異なり、OceanBaseデータベースV4.xバージョンでは、object_idを用いて一部のデータベースオブジェクトにグローバルな一意のコードを付与します。object_idによって割り当てられるコードはテナント内で一意です。
さらに、OceanBaseデータベースV4.xバージョンでは、テーブルのobject_idはテーブルのtable_idと同じです。あるテーブルのtable_idが分かっている場合、そのtable_idを用いて、テーブル名、テーブルが属するデータベース、テーブルのサブオブジェクト(例:パーティション名)などの情報を含むそのテーブルの情報を照会できます。
システムテナント
ビュー
CDB_OBJECTSには、すべてのテナントのすべてのテーブルの情報が記録されています。ユーザーはこのビューを使用して任意のテーブルの関連情報を照会できます。ステートメントは以下のとおりです:obclient> SELECT * FROM oceanbase.CDB_OBJECTS WHERE CON_ID=tenant_id AND OBJECT_ID=table_id AND OBJECT_TYPE='TABLE';例えば、
tenant_idが1002のテナントにtable_idが500007のテーブルがある場合、システムテナントでそのテーブルを照会するステートメントは以下のとおりです:obclient> SELECT * FROM oceanbase.CDB_OBJECTS WHERE CON_ID=1002 AND OBJECT_ID=500007 AND OBJECT_TYPE='TABLE';ユーザーテナント
MySQLモードのユーザーテナントでは、以下のステートメントを使用して照会できます。
obclient> SELECT * FROM oceanbase.DBA_OBJECTS WHERE OBJECT_ID=table_id AND OBJECT_TYPE='TABLE';Oracleモードのユーザーテナントでは、以下のステートメントを使用して照会できます。
obclient> SELECT * FROM SYS.DBA_OBJECTS WHERE OBJECT_ID=table_id AND OBJECT_TYPE='TABLE';
テーブルまたはパーティションの場所のクエリ
テーブルのtable_idが分かっている場合、そのtable_idを用いて、そのテーブル上のパーティションレプリカが分散しているノード情報を照会することもできます。
システムテナント
システムテナントでは、以下のステートメントを使用して照会できます。
obclient> SELECT * FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE TENANT_ID=tenant_id AND TABLE_ID=table_id AND TABLE_TYPE='USER TABLE';ユーザーテナント
MySQLモードのユーザーテナントでは、以下のステートメントを使用して照会できます。
obclient> SELECT * FROM oceanbase.DBA_OB_TABLE_LOCATIONS WHERE TABLE_ID=table_id AND TABLE_TYPE='USER TABLE';Oracleモードのユーザーテナントでは、以下のステートメントを使用して照会できます。
obclient> SELECT * FROM SYS.DBA_OB_TABLE_LOCATIONS WHERE TABLE_ID=table_id AND TABLE_TYPE='USER TABLE';