OceanBaseデータベースはマルチテナントアーキテクチャを採用しています。マルチテナントアーキテクチャは、リソース統合(Resource Consolidation)やクラウドサービスなどのシナリオに適しており、運用保守の複雑さも低減します。
OceanBaseデータベース4.0以降、テナントにはシステムテナント、ユーザーテナント、および各ユーザーテナントに対応するMetaテナントの3種類があります。

システムテナントへのログイン
システムテナントは、OceanBaseデータベース内部でクラスタの共通タスクを処理するために使用されるデータベースインスタンスです。Root Serviceはシステムテナントを基盤としてOceanBaseデータベースの管理業務を担い、クラスタ管理、テナント管理、リソース管理、ロードバランシング、日次マージのスケジューリング、移行レプリケーションなどを含みます。システムテナントはクラスタがデフォルトで作成するテナントであり、クラスタのライフサイクルと一致し、クラスタおよびすべてのテナントのライフサイクル管理を担当します。
システムテナントはMySQLモードと互換性があり、MySQLクライアントまたはOceanBaseクライアント(OBClient)からログインできます。
MySQLクライアントによるログイン
MySQLクライアントを使用してデータベースにログインする接続文字列の例は以下のとおりです:
mysql -h<ホストIP> -P<ポート番号> -u<アカウント> -p<'データベースパスワード'> -D<デフォルトデータベース> -A -c --prompt "OceanBase(\u@\d)> "
主なパラメータの説明:
-h:OceanBaseデータベースにログインするホストのIPアドレス。OceanBaseはODP経由でのログインと、OBServerノードへの直接接続によるログインをサポートしています。ODP経由でのログインを推奨します。ODPは、ルーティングや災害復旧機能を含む、OceanBaseデータベースの分散特性をより適切に処理できます。-P:OceanBaseデータベースにログインするポート番号。OceanBaseデータベースでは、デプロイ時に設定ファイルでポート番号を変更できます。設定ファイル内の各OBServerノードのmysql_portパラメータとODPのlisten_portパラメータを確認できます。明示的に指定しない場合は、デフォルト値が適用されます。ODP経由でログインする場合、デフォルトのポート番号は2883です。
OBServerノードに直接接続してログインする場合、デフォルトのポート番号は2881です。
-u:OceanBaseデータベースにログインするアカウント。従来のデータベースとは異なり、OceanBaseデータベースのアカウントには、ユーザー名、テナント名、クラスタ名を含む複数のフィールドがあります。ODP経由でログインする場合、ユーザー名、テナント名、クラスタ名を指定する必要があります。形式は以下のとおりです:
ユーザー名@テナント名#クラスタ名、クラスタ名:テナント名:ユーザー名、クラスタ名-テナント名-ユーザー名、またはクラスタ名.テナント名.ユーザー名。例えば、rootユーザーでtestクラスタのSYSテナントにログインする場合、アカウントはroot@sys#testとなります。OBServerノードに直接接続してログインする場合、ユーザー名とテナント名を指定する必要があります。形式は
ユーザー名@テナント名です。例えば、rootユーザーでtestクラスタのSYSテナントにログインする場合、アカウントはroot@sysとなります。
-p:OceanBaseデータベースにログインするパスワード。新規構築されたクラスタでは、SYSテナントのrootユーザーの初期パスワードは空です。新規構築したクラスタで最初に行うべき操作は、rootユーザーのパスワードを変更することです。コマンドはalter user root identified by '******'です。
MySQLクライアント接続の詳細については、MySQLクライアントによるOceanBaseテナントへの接続を参照してください。
OBClientによるログイン
MySQLクライアントを使用したログイン以外に、OceanBaseクライアント(OBClient)を使用したログインも可能です。OBClientは、OceanBaseデータベースの推奨されるコマンドラインクライアントツールであり、そのユーザーインターフェースはMySQLクライアントと互換性があります。データベース接続文字列の例は以下のとおりです:
obclient -h<ホストIP> -P<ポート番号> -u<アカウント> -p<'データベースパスワード'> -D<デフォルトデータベース> -A -c --prompt "OceanBase(\u@\d)> "
OBClientクライアント接続の詳細については、OBClientによるOceanBaseテナントへの接続を参照してください。
ログインのベストプラクティス
rootユーザーは権限が高いため、無計画に権限を拡散するとデータベースのセキュリティに大きな脅威をもたらします。rootユーザーは他のユーザーの管理にのみ使用し、「最小限必要な権限」の原則に従って、専用の運用保守ユーザーと読み取り専用ユーザーを作成することを推奨します。
ビューの参照は、専用の読み取り専用ユーザーでログインすることを推奨します。
OceanBaseデータベース4.0では、以前のバージョンと比べて最大の変更点は、内部情報のクエリが全面的にビューへ移行したことです。システムテナントのOceanBaseデータベースから豊富なビュー情報を確認できます。
obclient> use oceanbase obclient> show tables; +-------------------------------------------+ | Tables_in_oceanbase | +-------------------------------------------+ | CDB_INDEXES | | CDB_IND_COLUMNS | | CDB_IND_PARTITIONS | | CDB_IND_SUBPARTITIONS | | CDB_OBJECTS | | CDB_OB_ARCHIVELOG | | CDB_OB_ARCHIVELOG_PIECE_FILES | ......これらのビューは大きく二つのカテゴリに分けられます:データディクショナリビューと動的性能ビューです。
データディクショナリビュー:命名規則は
DBA_またはCDB_で始まります。DBA_で始まるビューは各テナント内の情報を表示します。例えば、DBA_OB_LSビューはテナント内のログストリーム情報を表示し、システムテナント内のDBA_OB_LSテーブルはシステムテナント自身のログストリーム情報のみを表示します。CDB_で始まるビューはシステムテナント専用であり、システムテナント内でクラスタ内のすべてのテナントのデータベース状態を確認するために使用されます。例えば、CDB_OB_LSビューはクラスタ内のすべてのテナントのすべてのログストリーム情報を表示します。一般的に、各DBA_で始まるビューには、システムテナントに対応するCDB_で始まるビューが存在します。動的性能ビューの命名規則は
GV$またはV$で始まります。V$はログインしているマシン上の情報のみを表示し、GV$はテナントのすべてのマシン情報の集計です。OceanBase 4.0では、通常のテナントでも多くの動的性能ビューが追加されています。例えば、GV$OB_UNITSビューでは、テナント内でそのテナントのUnit分布情報を照会できます。システムテナントの動的性能ビューは特別な処理が施されており、クラスタ内のすべてのテナント情報の集計を直接表示します。
例えば、OceanBaseクラスタのノード情報を確認する場合:
obclient> use oceanbase Database changed obclient> select * from dba_ob_servers; +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+ | SVR_IP | SVR_PORT | ID | ZONE | SQL_PORT | WITH_ROOTSERVER | STATUS | START_SERVICE_TIME | STOP_TIME | BLOCK_MIGRATE_IN_TIME | CREATE_TIME | MODIFY_TIME | BUILD_VERSION | +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+ | 6.x.xxx.xx | 2882 | 6 | sa128_obv4_2 | 2881 | NO | ACTIVE | 2022-12-30 16:17:03.173519 | NULL | NULL | 2022-12-30 16:08:04.749100 | 2023-01-04 11:48:36.589270 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | | 6.x.xxx.xx | 2882 | 4 | sa128_obv4_3 | 2881 | NO | ACTIVE | 2022-12-30 16:36:35.567437 | NULL | NULL | 2022-12-30 16:08:02.755200 | 2023-01-04 14:13:36.976548 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | | 6.x.xxx.xxx | 2882 | 3 | sa128_obv4_3 | 2881 | NO | ACTIVE | 2022-12-12 12:42:00.054759 | NULL | NULL | 2022-11-03 15:37:09.530894 | 2022-12-22 14:43:26.717736 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | | 6.x.xx.xx | 2882 | 1 | sa128_obv4_1 | 2881 | NO | ACTIVE | 2022-12-12 12:25:17.555651 | NULL | NULL | 2022-11-03 15:37:08.990683 | 2022-12-12 12:25:18.553763 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | | 6.x.xx.xxx | 2882 | 2 | sa128_obv4_2 | 2881 | YES | ACTIVE | 2022-12-12 11:46:37.222980 | NULL | NULL | 2022-11-03 15:37:09.490511 | 2022-12-12 11:47:31.075335 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | | 6.x.xx.xx | 2882 | 5 | sa128_obv4_1 | 2881 | NO | ACTIVE | 2022-12-30 16:25:45.420996 | NULL | NULL | 2022-12-30 16:08:03.928478 | 2023-01-04 11:48:36.578231 | 4.0.0.0_101000022022120716-0d7927892ad6d830e28437af099f018b0ad9a322(Dec 7 2022 16:22:15) | +-------------+----------+----+--------------+----------+-----------------+--------+----------------------------+-----------+-----------------------+----------------------------+----------------------------+-------------------------------------------------------------------------------------------+ 6 rows in setクラスタの運用保守コマンドの実行は、専用の運用保守ユーザーを使用することを推奨します。
システムテナントからクラスタの運用保守コマンドを実行できます。例えば、異常なノードを隔離する場合:
obclient> ALTER SYSTEM STOP SERVER 'xx.xx.xx.xx:2882';実行成功後は、
DBA_OB_SERVERSビューの対応するノードのSTOP_TIMEフィールドを確認することで、隔離が成功したかどうかを確認できます。
ユーザーテナントへのログイン
システムテナントに対応するものがユーザーテナントです。ユーザーテナントはユーザーが作成するテナントであり、完全なデータベース機能を外部に提供し、MySQLおよびOracleの2種類の互換モードをサポートしています。
システムテナントにログインし、DBA_OB_TENANTSビューをクエリすることで、すべてのテナント情報を確認できます:
TENANT_TYPEはテナントタイプを表します:SYSはシステムテナント、METAはMetaテナント、Userはユーザーテナントです。テナントIDが1のものがシステムテナントです。テナントIDが1000より大きいテナントのうち、偶数のものがユーザーテナント、奇数のものがMetaテナントであり、ユーザーテナントのテナントIDは対応するMetaテナントより1大きくなっています。COMPATIBILITY_MODEはテナントの互換モードを表します:MYSQLはMySQL互換モード、ORACLEはOracle互換モードです。
MySQLモードのユーザーテナントにログインする場合は、MySQLクライアントとOBClientクライアントのいずれかを使用できます。Oracleモードのユーザーテナントにログインする場合は、OBClientクライアントのみを使用できます。ログイン方法はシステムテナントにログインする場合と同じですが、ログインアカウントのテナント名を対応するテナント名に変更する必要があります。
MySQLモードのユーザーテナントでは、OceanBaseデータベース独自のデータディクショナリビューと動的性能ビューはすべてoceanbaseという名前空間にあります。Oracleモードのユーザーテナントでは、OceanBaseデータベース独自のビューはSYSユーザー配下にあります。2つのモードでは、OceanBaseデータベースのビュー名、フィールド、使用感覚はすべて一致しています。
Metaテナントへのログイン
Metaテナントは、OceanBaseデータベースが内部で自己管理するテナントです。ユーザーテナントを作成するたびに対応するMetaテナントが作成され、そのライフサイクルはユーザーテナントと一致します。Metaテナントには直接ログインすることはできませんが、その情報はユーザーテナントおよびシステムテナントからアクセスできます。
関連ドキュメント
接続とアクセスの方法、およびOceanBaseデータベースの操作に関する詳細情報については、次の記事を参照してください。