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 | ......これらのビューは、データデータ・ディクショナリ・ビューと動的性能ビューの2つに分類されます。
データデータ・ディクショナリ・ビュー:命名規則は
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 (0.03 sec)クラスタの運用コマンドの実行には、専用の運用ユーザーを使用することを推奨します。
システムテナントからクラスタの運用コマンドを実行できます。例えば、異常なノードを隔離する場合:
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ユーザー下に配置されています。どちらのモードでも、OceanBaseデータベースのビュー名、フィールド、および使用体験はすべて同一です。
Metaテナントへのログイン
Metaテナントは、OceanBaseデータベース内部で自己管理されるテナントです。ユーザーテナントが作成されるたびに対応するMetaテナントも作成され、そのライフサイクルはユーザーテナントと同期します。Metaテナントには直接ログインすることはできませんが、ユーザーテナントやシステムテナントからその情報にアクセスできます。
関連ドキュメント
OceanBaseデータベースへの接続およびアクセス方法、操作に関する詳細は、次を参照してください: