OceanBaseデータベースはネイティブ分散型データベースであり、同一データベース内で複数のデータベースインスタンスを同時に実行できます。最初のステップとして、通常はテナント(データベースインスタンス)を作成し、従来のスタンドアロンデータベースと同様にそのデータベースインスタンスを使用します。本記事では、テナントの作成方法について説明します。
テナントの作成プロセス
OceanBaseデータベースはユーザーテナントの作成のみをサポートしており、システムテナントはクラスタ作成時に自動的に作成されます。ユーザーテナントの作成は一連の操作であり、まずリソース仕様を作成し、次にそのリソース仕様に基づいてリソースプールを作成し、最後にテナントを作成してそのリソースプールを指定します。したがって、テナント作成の順序は以下のとおりです:リソース仕様 -> リソースプール -> テナント。
リソース仕様の作成:リソース仕様の作成は単なる仕様定義であり、実際にはリソースを割り当てません。
DBA_OB_UNIT_CONFIGSビューで全リソース仕様を確認できます。リソース仕様は再利用可能であり、業務シナリオに応じて小規模、中規模、大規模など、複数の異なる仕様を抽象化することを推奨します。これにより、運用保守の複雑さを低減できます。ただし、複数のテナントが同一のリソース仕様を共有している場合、特定のテナントのリソースが不足し緊急に拡張が必要になった場合、元の仕様を直接調整することはできません。新しい独立したリソース仕様を作成して切り替えるか、より大きなレベルのリソース仕様に直接変更する必要があります。リソースプールの作成:リソースプールを作成する際には、仕様に従ってUnitを実際に作成し、リソースを割り当てます。対応するノードの予約リソースが不足している場合、作成に失敗します。
GV$OB_SERVERSビューで全ノードのリソース割り当て情報を確認できます。作成に成功した場合、DBA_OB_RESOURCE_POOLSビューとDBA_OB_UNITSビューでリソースプールとそれに対応するUnitを確認できます。リソースプールは再利用できず、テナント作成に成功した後に指定されたリソースプールはテナントに割り当てられます。テナントの作成:テナントを作成する際には、
RESOURCE_POOL_LISTを指定してリソースプールをテナントに割り当てます。DBA_OB_TENANTSビューで全テナントを確認できます。各Zoneに1つのリソースプールを設定し、独立したリソース仕様を使用することもできます。または、すべてのZoneが同一のリソースプールを使用し、すべてのZoneが同一のリソース仕様を使用することもできます。リソースプールリストに加えて、互換モード、プライマリゾーン、ローカリティ、接続アローリストなど、他の重要なプロパティやシステム変数もあります。そのうちリソースプールリストはテナント作成時の必須項目です。新規作成されたRootユーザーのパスワードは空なので、使用する前にパスワードを設定してください。
リソース計画
テナントを作成する前に、リソース計画をしっかり行う必要があります。テナント作成後に調整を行うと、非常に面倒になる可能性があります。リソース計画をしっかり行うためには、業務シナリオを深く理解し、業務データベースアーキテクチャ設計により積極的に参加することが前提です。
リソース計画には以下の注意点があります:
各ノードには一定のリソースを予約し、テナントの容量不足により緊急に拡張が必要な場合に備える必要があります。
大量書き込みのある業務では、メモリとログディスクの仕様を大きく設定する必要があります。CPUリソースを大量に消費する業務では、ノードの負荷不均衡やホットスポットノードの発生を避けるため、異なるノードに分散配置する必要があります。
クラスタ構成パラメータ
resource_hard_limitは、CPUリソースのオーバーコミット率を定義しており、「オーバーコミットパラメータ」とも呼ばれます。OceanBaseデータベースはCPUのオーバーコミットのみをサポートしており、他のリソースのオーバーコミットはサポートしていません。CPUのオーバーコミットは、同一クラスタ内の異なるテナント間でピークがずれるシナリオに適しており、全体のリソース利用率を向上させます。もしテナント間で同時にピークが発生した場合、CPUのオーバーコミットを有効にすると、テナント間でCPUリソースが相互に奪い合い、影響し合う可能性があります。Unitのリソース仕様は、単一ノードの総割り当て可能リソースを超えてはなりません。単一Unitテナント(リソースプールの
UNIT_NUM=1)で容量ボトルネックが発生した場合、より大きな仕様のサーバーに交換するほか、テナントを水平スケールして複数Unitにすることで、複数ノードのリソースを活用できます。複数Unitテナントでは、業務データのUnit間の分散を慎重に設計し、分散トランザクションによるパフォーマンスへの損失を避ける必要があります。業務量が単一サーバーの容量上限を超える見込みがある場合、事前にデータシャーディングの設計を行う必要があります。データシャーディングでは、分散トランザクションをできるだけ避ける必要があります。従来型データベースからOceanBaseデータベースへの移行業務では、移行のスムーズさのため、通常は対等アーキテクチャを採用し、単一Unitテナントの設計案を採用します。これにより、業務がデータベースにアクセスする際にも、引き続き単一ノードのみにアクセスすることが保証されます。業務量が増加して単一サーバーの容量上限に達した場合、複数Unitテナントに拡張し、業務シナリオに応じて業務データを複数のグループに分割します。各業務データグループを1つのUnitに配置することで、各業務のデータベースアクセスが機械間を越えないようにし、パフォーマンス損失なしで水平スケールを実現します。これはまた、OceanBaseデータベースが従来型データベースと比較して持つアーキテクチャ上の利点の一つであり、使いやすい水平スケーラビリティにより、容易に単一サーバーの容量上限を突破できます。
注意事項
OceanBaseデータベースは、MySQL互換モードとOracle互換モードの2種類のテナントをサポートしています。テナントを作成する際には、テナントのタイプを指定する必要があります。テナント作成後は、テナントのタイプを変更することはできないため、テナント作成前にテナントのタイプをしっかり計画してください。
ステップ1:リソース仕様の作成
リソース仕様とは、CPU、メモリ、ディスク容量、IOPSなどのリソース項目に対する定義です。
説明
OceanBaseデータベースV4.0では、OceanBaseデータベース3.x系の豊富な実践経験を基に、リソース管理機能が大幅に改善されています:
- UnitレベルでCPU、メモリ、ログディスク容量、IOPSなどのリソース項目を管理できますが、Unitレベルでのデータディスク容量やセッション数などのリソース項目の管理はサポートされていません。3.x系の運用ツールやテストケースとの互換性を保つため、
CREATE RESOURCE UNITステートメントでは引き続きMAX_DISK_SIZEとMAX_SESSION_NUMを指定できますが、これらは無視され、エラーも報告されません。 - CPUオーバーコミットをサポートしており、オーバーコミット構成パラメータ
resource_hard_limitで制御します。GV$OB_SERVERSビューのCPU_CAPACITYとCPU_CAPACITY_MAXフィールドは、それぞれノードのCPU総容量とノードのCPU総容量のオーバーコミット値を表し、CPU_CAPACITY_MAX = CPU_CAPACITY * resource_hard_limitとなります。 - メモリオーバーコミットはサポートされなくなりました。メモリオーバーコミットを導入すると、テナントの動作が不安定になる可能性があります。
- テナント間のログディスク容量の分離をサポートしており、システムは各テナントにログディスク容量を予約し、V3.x系で特定のテナントから大量の書き込みが発生し、ログディスクの書き込みが飽和して他のテナントに影響を与える問題を回避します。
- テナント間のIOPS分離をサポートしており、3つのIOPS仕様パラメータ
MIN_IOPS、MAX_IOPS、IOPS_WEIGHTを導入しています。IOPS仕様パラメータはデフォルトで指定する必要はなく、システムがCPU仕様に基づいて自動的に計算します。あるノード上のすべてのUnitのMIN_IOPSの合計がディスクIOPSの上限を超えた場合、IOPS_WEIGHTの重みに基づいてIOPSリソースを割り当てます。 - Metaテナントには独立したUnitがなく、システムがテナントを作成する際には、デフォルトでMetaテナント用のリソースが予約され、各種リソースはユーザーテナントのリソースから差し引かれます。Metaの各種リソースはデフォルト設定を採用しており、ユーザー指定はサポートされていません。
- リソース仕様を作成する際、CPU仕様とメモリ仕様は必須項目であり、その他のパラメータは自動的に計算できます。そのうちログディスク容量はメモリ仕様に基づいて自動的に計算され、IOPS仕様はCPU仕様に基づいて自動的に計算されます。
操作手順
rootユーザーでクラスタのsysテナントにログインします。obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -Aoceanbaseデータベースにアクセスします。obclient> USE oceanbase;DBA_OB_UNIT_CONFIGSビューを使用して、既存のリソース仕様情報を取得します。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;実行結果は次のとおりです:
+----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+---------------------+---------------------+-------------+---------------------+----------------------+ | UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | DATA_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | MAX_NET_BANDWIDTH | NET_BANDWIDTH_WEIGHT | +----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+---------------------+---------------------+-------------+---------------------+----------------------+ | 1 | sys_unit_config | 2025-05-16 11:30:47.000298 | 2025-05-16 11:30:47.000298 | 4 | 4 | 5368709120 | 17448304640 | NULL | 9223372036854775807 | 9223372036854775807 | 4 | 9223372036854775807 | 4 | | 1001 | unit001 | 2025-05-16 11:31:08.531754 | 2025-05-16 11:31:08.531754 | 2 | 2 | 6442450944 | 19327352832 | NULL | 9223372036854775807 | 9223372036854775807 | 2 | 9223372036854775807 | 2 | +----------------+-----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+---------------------+---------------------+-------------+---------------------+----------------------+ 2 rows in setDBA_OB_UNIT_CONFIGSビューの詳細については、DBA_OB_UNIT_CONFIGSを参照してください。CREATE RESOURCE UNITステートメントを使用して、リソース仕様を作成します。構文は次のとおりです:
CREATE RESOURCE UNIT unit_name MEMORY_SIZE [=] 'size_value', MAX_CPU [=] cpu_num, [MAX_IOPS [=] iops_num,] [MIN_CPU [=] cpu_num,] [MIN_IOPS [=] iops_num,] [IOPS_WEIGHT [=]iopsweight,] [MAX_NET_BANDWIDTH [=] bandwidth_num,] [NET_BANDWIDTH_WEIGHT [=] bandwidth_weight_num,] [LOG_DISK_SIZE [=] 'size_value'];パラメータの説明:
リソース仕様を作成する際、MAX_CPUとMEMORY_SIZEは必須です。
unit_name:リソース仕様名。MEMORY_SIZE:メモリ仕様で、その最小値は隠れた構成パラメータ__min_full_resource_pool_memoryによって制御され、デフォルトは5GBで、最小で4GBに調整可能です。OceanBaseデータベースV4.0以降ではメモリオーバーコミットはサポートされていません。MAX_CPU:CPU仕様の上限で、MIN_CPUはCPU仕様の下限で、単位はコア数です。ユーザーがMIN_CPUを指定しない場合、デフォルトはMAX_CPUの値に等しくなります。MIN_CPU:最小のCPU仕様で、すべてのテナントのMIN_CPUの合計は、そのノードのCPU総容量CPU_CAPACITYを超えてはなりません。MAX_IOPSとMIN_IOPS:現在のUnitで使用できるIOPSリソースの上限と下限を指定します。最小値はどちらも1024であり、MAX_IOPS >= MIN_IOPSであることが求められます。MAX_IOPSとMIN_IOPSが設定されると、OceanBaseデータベース内部では統一的に16KB読み取りのIOPS値を有効値として処理されるため、MAX_IOPSとMIN_IOPSの値を、後続のテナント内リソース分離を容易にするために、現在のディスクから計算された16KB読み取りに対応するIOPS値に設定することを推奨します。IOPSの基準値の計算方法については、ディスク性能キャリブレーションを参照してください。テナント内リソース分離の詳細と操作については、リソース分離の概要を参照してください。IOPS関連パラメータが指定されていない場合、内部での値の決定ルールは以下のとおりです:
MIN_IOPSとMAX_IOPSどちらも指定されていない場合、システムはIOPS_WEIGHTに基づいて自動的にIOPSリソースを割り当てます。この場合:MIN_IOPSとMAX_IOPSの値はどちらもINT64_MAXになります。IOPS_WEIGHTの値が指定されていない場合、IOPS_WEIGHT = MIN_CPUになります。IOPS_WEIGHTの値が指定されている場合、指定された値が優先されます。
MAX_IOPSの値のみが指定されている場合、MIN_IOPSの値はMAX_IOPSの値になります。同様に、MIN_IOPSの値のみが指定されている場合、MAX_IOPSの値はMIN_IOPSの値になります。この場合:IOPS_WEIGHTの値が指定されていない場合、デフォルトは0になります。
MAX_NET_bandWIDTH:テナントの各Unitで使用できるネットワーク帯域幅の上限を指定します。最小値は1MBです。指定されていない場合、デフォルト値はINT64_MAXになります。NET_bandWIDTH_WEIGHT:テナントUnitのネットワーク帯域幅の重みを指定し、各OBServerの帯域幅を各テナントに割り当てる比率を計算するために使用されます。最小値は0です。指定されていない場合、システムは以下のルールに基づいて自動的にNET_bandWIDTH_WEIGHTの値を計算します:MAX_NET_bandWIDTHが指定されている場合、NET_bandWIDTH_WEIGHTの値は0になります。MAX_NET_bandWIDTHが指定されていない場合、NET_bandWIDTH_WEIGHT = MIN_CPUになります。
LOG_DISK_SIZE:ログディスク容量で、OceanBaseデータベースV4.0ではテナントごとにログディスク容量を管理し、システムが各テナントにログディスク容量を予約して、テナントごとの分離を実現します。ユーザーが指定しない場合、LOG_DISK_SIZEのデフォルト値はメモリ仕様の3倍のサイズで、最小は2GBです。OceanBaseデータベースV4.0は、
MAX_IOPS、MIN_IOPS、IOPS_WEIGHTの3つのパラメータによって、テナント間のIOPS分離をサポートしています。IOPS仕様パラメータはデフォルトで指定する必要はなく、システムがCPU仕様に基づいて自動的に計算します。パラメータに値を指定する際、引用符なしの純粋な数字を使用することも、単位付き引用符または単位なし引用符を使用することもできます(例:
'1T'、'1G'、'1M'、'1K')。その中で:
MAX_CPU、MIN_CPU、MAX_IOPS、MIN_IOPS、IOPS_WEIGHT、NET_bandWIDTH_WEIGHTなどの整数型パラメータについて、パラメータ値に単位付き引用符を使用する場合、その単位は個となります。つまり、'1K' = 1000、'1M' = 1000000です。例えば:MAX_IOPS='2K'はMAX_IOPS=2000と同じです。単位付き引用符なしで使用する場合、意味は引用符なしと同じであり、'100' = 100、'1000' = 1000となります。
MEMORY_SIZE、MAX_NET_bandWIDTH、LOG_DISK_SIZEなどの容量パラメータについて、単位付き引用符を使用する場合、単位なし引用符の純粋な数字と同じく、その単位はバイトとなります。つまり、'1K' = 1024、'1M' = 1024 * 1024です。単位付き引用符なしで使用する場合、引用符内の数値のデフォルト単位はMBです。つまり、'100' = '100M' = 100 * 1024 * 1024です。
CREATE RESOURCE UNITステートメントの詳細については、CREATE RESOURCE UNITを参照してください。例:
CPUが1コア、メモリが5GB、ログディスク容量が6GBのリソース仕様を作成し、その名前を
S1_unit_configとします。obclient [oceanbase]> CREATE RESOURCE UNIT S1_unit_config MEMORY_SIZE = '5G', MAX_CPU = 1, MIN_CPU = 1, LOG_DISK_SIZE = '6G', MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1;DBA_OB_UNIT_CONFIGSビューを照会して、リソース仕様の作成が成功したことを確認します。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE NAME = 'S1_unit_config';実行結果は次のとおりです:
+----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+----------+----------+-------------+---------------------+----------------------+ | UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | DATA_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | MAX_NET_BANDWIDTH | NET_BANDWIDTH_WEIGHT | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+----------+----------+-------------+---------------------+----------------------+ | 1002 | S1_unit_config | 2025-05-28 10:20:38.299456 | 2025-05-28 10:20:38.299456 | 1 | 1 | 5368709120 | 6442450944 | NULL | 10000 | 10000 | 1 | 9223372036854775807 | 1 | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------------+----------+----------+-------------+---------------------+----------------------+ 1 row in set
ステップ2:リソースプールの作成
リソース仕様を作成した後、リソースプールを作成する際にそのリソース仕様を指定することで、対応するサイズのリソースユニットを使用し、最終的に該当するテナントに割り当てることができます。
前提条件
- クラスタにリソースプールを作成するための十分な利用可能リソースがあるかどうかを確認してください。詳細な操作については、テナントおよびリソース情報の表示を参照してください。
- リソースプールを作成する際には、そのリソース仕様を指定する必要があります。リソースプールの作成操作を実行する前に、利用可能なリソース仕様があるかどうかを確認してください。リソース仕様の作成手順の詳細については、リソース仕様の作成を参照してください。
操作手順
rootユーザーでクラスタのsysテナントにログインします。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -Aoceanbaseデータベースに移動します。obclient [(none)]> USE oceanbase;DBA_OB_RESOURCE_POOLSビューを使用して、リソースプールの構成情報を取得します。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS;実行結果は次のとおりです:
+------------------+----------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ | RESOURCE_POOL_ID | NAME | TENANT_ID | CREATE_TIME | MODIFY_TIME | UNIT_COUNT | UNIT_CONFIG_ID | ZONE_LIST | REPLICA_TYPE | +------------------+----------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ | 1 | sys_pool | 1 | 2025-05-16 11:30:47.004523 | 2025-05-16 11:30:47.011196 | 1 | 1 | zone1 | FULL | | 1001 | pool001 | 1002 | 2025-05-16 11:31:11.735042 | 2025-05-16 11:31:19.924596 | 1 | 1001 | zone1 | FULL | | 1002 | pool002 | 1004 | 2025-05-16 11:31:15.142237 | 2025-05-16 11:32:01.555002 | 1 | 1001 | zone1 | FULL | +------------------+----------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ 3 rows in setDBA_OB_RESOURCE_POOLSビューの詳細については、DBA_OB_RESOURCE_POOLSを参照してください。CREATE RESOURCE POOLステートメントを使用して、リソースプールを作成します。構文は以下のとおりです:
CREATE RESOURCE POOL poolname UNIT [=] unitname, UNIT_NUM [=] unitnum, ZONE_LIST [=] ('zone' [, 'zone' ...]);パラメータの説明:
UNIT:このリソースプールのリソース仕様。UNIT_NUM:このリソースプールがターゲットゾーンで持つユニット数。その値はターゲットゾーンのノード数より小さく、各ノード上には同一テナントのユニットが最大でも1つしか配置されません。ZONE_LIST:リソースプールのゾーン分散。OceanBaseデータベースはUNIT_NUM個のユニットをZONE_LISTで記述された各ゾーンに作成し、各ユニットのリソース仕様はUNITパラメータで設定された値となります。
CREATE RESOURCE POOLステートメントの詳細については、CREATE RESOURCE POOLを参照してください。例:
mq_pool_01という名前のリソースプールを作成し、zone1に1つのユニットを作成します。また、ユニットのリソース仕様はS1_unit_configとします。obclient [oceanbase]> CREATE RESOURCE POOL mq_pool_01 UNIT='S1_unit_config', UNIT_NUM=1, ZONE_LIST=('zone1');DBA_OB_RESOURCE_POOLSビューを照会して、リソースプールの作成に成功したかどうかを確認します。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS WHERE NAME = 'mq_pool_01';実行結果は次のとおりです:
+------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ | RESOURCE_POOL_ID | NAME | TENANT_ID | CREATE_TIME | MODIFY_TIME | UNIT_COUNT | UNIT_CONFIG_ID | ZONE_LIST | REPLICA_TYPE | +------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ | 1003 | mq_pool_01 | NULL | 2025-05-28 10:31:04.926243 | 2025-05-28 10:31:04.926243 | 1 | 1002 | zone1 | FULL | +------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-----------+--------------+ 1 row in set
ステップ3:テナントの作成
リソースプールを作成した後、業務ニーズに応じてリソースプールをテナントに割り当てることができます。
前提条件
利用可能なリソースプールが既に存在すること。リソースプールおよびリソースユニットの作成手順の詳細については、リソースプールの作成を参照してください。
注意
OceanBaseデータベースは、MySQL互換モードとOracle互換モードの2種類のテナントをサポートしています。テナントを作成する際には、テナントのタイプを指定する必要があります。テナント作成後は、テナントのタイプを変更することができないため、テナント作成前にテナントのタイプを計画してください。
操作手順
rootユーザーでクラスタのsysテナントにログインします。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -Aoceanbaseデータベースに移動します。USE oceanbase;DBA_OB_TENANTSビューを使用して、すべてのテナント情報を確認します。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_TENANTS;実行結果は次のとおりです:
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+-------------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID | RESTORE_DATA_MODE | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+-------------------+ | 1 | sys | SYS | 2025-05-16 11:30:47.031736 | 2025-05-16 11:30:47.031736 | RANDOM | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED | 1 | 4.3.4.0 | 1 | NORMAL | | 1001 | META$1002 | META | 2025-05-16 11:31:19.917288 | 2025-05-16 11:31:31.619972 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED | 1 | 4.3.4.0 | 1 | NORMAL | | 1002 | mysql001 | USER | 2025-05-16 11:31:19.921431 | 2025-05-16 11:31:31.671475 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1748398983043914000 | 1748398983043914000 | 1748398982543622004 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 1 | 4.3.4.0 | 1001 | NORMAL | | 1003 | META$1004 | META | 2025-05-16 11:32:01.550769 | 2025-05-16 11:32:15.460704 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED | 1 | 4.3.4.0 | 1 | NORMAL | | 1004 | oracle001 | USER | 2025-05-16 11:32:01.551827 | 2025-05-16 11:32:15.539634 | zone1 | FULL{1}@zone1 | NULL | ORACLE | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1748398983043914001 | 1748398983043914001 | 1748398983043914001 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 1 | 4.3.4.0 | 1001 | NORMAL | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+-------------------+ 5 rows in setDBA_OB_TENANTSビューの詳細については、DBA_OB_TENANTSを参照してください。CREATE TENANTステートメントを使用して、テナントを作成します。構文は次のとおりです:
CREATE TENANT [IF NOT EXISTS] tenant_name PRIMARY_ZONE [=] zone, RESOURCE_POOL_LIST [=](poolname [, poolname...]) [ENABLE_ARBITRATION_SERVICE = {true | false}] {SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...パラメータの説明:
IF NOT EXISTS:オプションパラメータ。作成しようとするテナント名が既に存在し、IF NOT EXISTSが指定されていない場合、エラーが発生します。tenant_name:テナント名を指定します。テナント名はOceanBaseデータベースのキーワードにすることはできません。PRIMARY_ZONE:テナントのPrimary Zoneを指定します。PRIMARY_ZONEは、テナントが読み書きサービスを提供するZoneの優先順位を指定します。実際には、複数のZoneを含むZoneのリストです。リストに複数のZoneが含まれている場合、セミコロン(;)で区切られたZoneは高い優先順位を持ち、カンマ(,)で区切られたZoneは同じ優先順位を持ち、トラフィックが複数のZoneに分散され、これらのZoneが同時にサービスを提供することを意味します。例えば、
primary_zone ='zone1;zone2,zone3'は、このテナントに対して優先的にzone1が読み書きサービスを提供し、zone1はzone2やzone3よりも優先順位が高く、zone2とzone3は同じ優先順位であることを表します。注意
PRIMARY_ZONEを指定する際、その値はRANDOM(大文字でなければなりません)に設定でき、これは指定されたテナントが属するすべてのZoneをPRIMARY_ZONEの第一優先順位とすることを意味します。RESOURCE_POOL_LIST:テナントに割り当てるリソースプールのリストを指定します。必須です。複数のリソースプールがある場合、複数のリソースプールのUNIT_NUMの数が一致している必要があります。テナントのレプリカが配置されるZoneリストは
RESOURCE_POOL_LISTのZONE_LISTプロパティから継承され、テナントのレプリカ数はRESOURCE_POOL_LISTのZONE_LISTプロパティの数から継承され、テナントの各ZoneのUnit数はRESOURCE_POOL_LISTのUNIT_NUMプロパティから、テナントのUnitのリソース仕様はRESOURCE_POOL_LISTの Unitプロパティから継承されます。注意
同一テナントに属する複数のリソースプールでは、対応する
ZONE_LISTに交差があってはなりません。ENABLE_ARBITRATION_SERVICE:テナントでアービトレーションサービスを有効にするかどうかを指定します。明示的に指定しない場合、デフォルトで作成されるテナントのアービトレーションサービスは無効になります。テナント作成時にアービトレーションサービスを有効にしなかった場合でも、テナント作成後にアービトレーションサービスを有効にすることができます。詳細な操作については、テナントのアービトレーションサービスの有効化を参照してください。適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity Editionは現在、アービトレーションサービス機能をサポートしていません。
system_var_name:システム変数または構成パラメータを指定します。ob_tcp_invited_nodes:テナント接続のアローリスト、つまりどのクライアントIPアドレスがそのテナントに接続できるかを指定します。例では%はすべてのクライアントがログインできることを意味します。ob_tcp_invited_nodesの値を明示的に指定しない場合、デフォルトでテナントへの接続方式は、ローカルのIPアドレスのみがそのテナントにログインできるようになります。アローリスト設定の詳細については、アローリストの表示と設定を参照してください。ob_compatibility_mode:テナントの互換モードを指定します。MySQLまたはOracle互換モードを選択でき、作成時にのみ指定できます。ob_compatibility_modeを明示的に指定しない場合、デフォルトの互換モードはMySQLモードになります。ob_compatibility_control:MySQL互換動作の競合が存在する場合の動作をどのように制御するかを指定します。MySQL5.7の動作と一致させるか、それともMySQL8.0の動作と一致させるかを指定します。MySQLモードのテナントを作成する際には、この変数を指定する必要があり、作成時にのみ指定でき、テナント作成後は変更できません。ob_compatibility_controlを明示的に指定しない場合、デフォルトでMySQL5.7との互換動作を維持します。
CREATE TENANTステートメントの詳細については、CREATE TENANTを参照してください。例:
mq_t1という名前のテナント(デフォルトはMySQLモードのテナント)を作成し、リソースプールをmq_pool_01、Primary Zoneをzone1に指定し、すべてのIPアドレスからデータベースへの接続を許可します。テナントのレプリカが配置されるZoneリストは
resource_pool_listのzone_listプロパティから継承され、テナントのレプリカ数はresource_pool_listのzone_listプロパティの数から継承され、テナントの各ZoneのUnit数はresource_pool_listのunit_numプロパティから、テナントのUnitのリソース仕様はresource_pool_listのunitプロパティから継承されます。obclient [oceanbase]> CREATE TENANT IF NOT EXISTS mq_t1 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('mq_pool_01') set OB_TCP_INVITED_NODES='%';oracle_tenant1という名前のOracle互換モードのテナントを作成するには、ob_compatibility_mode='oracle'を明示的に指定する必要があります。obclient [oceanbase]>CREATE TENANT IF NOT EXISTS oracle_tenant1 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('mq_pool_01') SET OB_TCP_INVITED_NODES='%', ob_compatibility_mode='oracle';
DBA_OB_TENANTSビューを照会して、テナントの作成に成功したことを確認します。obclient [oceanbase]> SELECT * FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';実行結果は次のとおりです:
+-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+-------------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | UNIT_NUM | COMPATIBLE | MAX_LS_ID | RESTORE_DATA_MODE | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+-------------------+ | 1002 | mq_t1 | USER | 2025-05-28 11:23:36.528377 | 2025-05-28 11:23:59.809322 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1748402687353930000 | 1748402687353930000 | 1748402687353930000 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 1 | 4.3.4.0 | 1001 | NORMAL | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+-------------------+ 1 row in setテナントの作成に成功したら、テナントにログインして使用してみることができます。
デフォルトの管理者ユーザー(MySQLモードではroot、Oracleモードではsys)のパスワードは空なので、管理者ユーザーのパスワードを速やかに変更する必要があります。
MySQL互換モード
mq_t1テナントのrootユーザーにログインします。obclient -h172.30.xx.xx -P2883 -uroot@mq_t1#cluster -A以下のステートメントを実行してrootユーザーのパスワードを変更します。
obclient [(none)]> ALTER USER root IDENTIFIED BY '****'; Query OK, 0 rows affected
Oracle互換モード
moracle_tenant1テナントのSYSユーザーにログインします。obclient -h172.30.xx.xx -P2883 -usys@oracle_tenant1#cluster -A以下のステートメントを実行して
SYSユーザーのパスワードを変更します。obclient [SYS]> ALTER USER sys IDENTIFIED BY ****; Query OK, 0 rows affected
管理者ユーザーのパスワード変更に成功したら、再度テナントにログインします。
MySQL互換モード
obclient -h172.30.xx.xx -P2883 -uroot@mq_t1#cluster -p**** -AOracle互換モード
obclient -h172.30.xx.xx -P2883 -usys@oracle_tenant1#cluster -p**** -A
次のステップ
テナントの作成が完了したら、管理者ユーザーとしてログインし、データベースに接続できます。データベースへの接続方法および詳細な操作については、データベース接続の概要 (MySQL モード)およびデータベース接続の概要(Oracle モード)を参照してください。一般ユーザーとしてログインする必要がある場合は、テナント用に新しい一般ユーザーを作成し、権限を付与する必要があります。ユーザーの作成と権限付与に関する操作については、ユーザーと権限を参照してください。
関連ドキュメント
テナントの作成後、テナントの設定を確認および維持管理できます。詳細な操作については、以下を参照してください: