ユーザーはビジネスニーズに応じて、UNIT_GROUP(同種ゾーンモード)またはUNIT_LIST(異種ゾーンモード)上にログストリームを作成し、各サービスノード上のテナントのログストリーム数を手動で調整できます。
背景
現在のバージョンでは、同種ゾーンモードと異種ゾーンモードのテナントをサポートしています。ここで、以下の点に注意してください:
同種ゾーンモードでは、Unit Groupを指定してログストリームを作成する必要があります。
異種ゾーンモードでは、UNIT_LISTを指定してログストリームを作成する必要があります。
同種ゾーンモードと異種ゾーンモードの詳細な違いについては、データ分散を参照してください。
注意事項
ログストリームの作成操作を実行する前に、以下の点に注意してください:
現在、通常のユーザーログストリームのみの作成がサポートされており、ブロードキャストログストリームの作成はサポートされていません。
ログストリームの作成操作は、プライマリテナントでのみ完了できます。また、ログストリームを作成するテナントの
STATUSとSWITCHOVER_STATUSはNORMALである必要があります。ログストリームを作成する際:
同種ゾーンモードでは、対象
UNIT_GROUPの状態がACTIVEである必要があり、ビューDBA_OB_UNITS内の対象UNIT_GROUP_IDの値が0であってはなりません。異種ゾーンモードでは、対象
UNIT_LISTの状態がACTIVEである必要があり、指定した対象UNIT_LISTが空であってはなりません。
作成予定のログストリームに
PRIMARY_ZONEを指定する場合、指定したZoneがテナントのZONE_LISTに含まれていることを確認する必要があります。ログストリームのPRIMARY_ZONEの設定は、テナントのPRIMARY_ZONEの設定とは若干異なります。ログストリームでは、z1やz2など、1つのZoneのみを指定できます。テナントのようにz1,z2、z1; z2、RANDOMといった指定はできません。ロードバランシング関連のパラメータは、値を
Falseに設定し、無効にすることを推奨します。その理由は以下の通りです:テナントレベルのパラメータenable_rebalanceが有効、すなわち値が
Trueの場合、作成されたログストリームはシステムによって対象のUNIT_GROUP/UNIT_LISTから他のUNIT_GROUP/UNIT_LISTへ移動されます。テナントレベルのパラメータenable_transferが有効、すなわち値が
Trueの場合、作成されたログストリームは削除される可能性があります。
ステップ1:作成前の確認
管理者ユーザーがクラスタの
sysテナントまたはユーザーテナントにログインします。接続例は以下のとおりです。データベースへの接続時は、実際の環境に合わせてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aテナントの状態、
PRIMARY_ZONE、およびローカリティに関する情報を照会します。ログストリームを作成する際、テナントの
STATUSとSWITCHOVER_STATUSはどちらもNORMALである必要があります。また、ログストリームのPRIMARY_ZONEを指定する必要がある場合は、指定したZoneがテナントのZONE_LISTに含まれていることを確認する必要があります。テナントのZONE_LISTに含まれるZoneは、テナントのローカリティに記載されています。システムテナント
obclient(root@sys)[oceanbase]> SELECT TENANT_ID, TENANT_NAME, STATUS, SWITCHOVER_STATUS, TENANT_ROLE, PRIMARY_ZONE, LOCALITY FROM oceanbase.DBA_OB_TENANTS WHERE tenant_name = 'mq_t1';ユーザーテナント
MySQLモードOracleモードMySQLモードでは、以下のコマンドを実行して、テナントの状態を確認します。
obclient> SELECT TENANT_ID, TENANT_NAME, STATUS, SWITCHOVER_STATUS, TENANT_ROLE, PRIMARY_ZONE, LOCALITY FROM oceanbase.DBA_OB_TENANTS;Oracleモードでは、以下のコマンドを実行して、テナントの状態を確認します。
obclient> SELECT TENANT_ID, TENANT_NAME, STATUS, SWITCHOVER_STATUS, TENANT_ROLE, PRIMARY_ZONE, LOCALITY FROM SYS.DBA_OB_TENANTS;
クエリ結果の例は以下のとおりです:
+-----------+-------------+--------+-------------------+-------------+--------------+-------------------------------------+ | TENANT_ID | TENANT_NAME | STATUS | SWITCHOVER_STATUS | TENANT_ROLE | PRIMARY_ZONE | LOCALITY | +-----------+-------------+--------+-------------------+-------------+--------------+-------------------------------------+ | 1002 | mq_t1 | NORMAL | NORMAL | PRIMARY | RANDOM | FULL{1}@z1, FULL{1}@z2, FULL{1}@z3 | +-----------+-------------+--------+-------------------+-------------+--------------+-------------------------------------+ 1 row in setテナントのUnit情報を照会し、対象の
UNIT_GROUP(同種ゾーンモード)/UNIT_LIST(異種ゾーンモード)のステータスがACTIVEであることを確認します。システムテナントで以下のコマンドを実行し、テナントのUnit情報を照会します。
obclient(root@sys)[oceanbase]> SELECT UNIT_GROUP_ID, UNIT_ID, ZONE, SVR_IP, SVR_PORT FROM oceanbase.DBA_OB_UNITS WHERE TENANT_ID=1002 AND STATUS = 'ACTIVE' ORDER BY UNIT_GROUP_ID;クエリ結果は次のとおりです:
+---------------+---------+------+----------------+----------+ | UNIT_GROUP_ID | UNIT_ID | ZONE | SVR_IP | SVR_PORT | +---------------+---------+------+----------------+----------+ | 1001 | 1001 | z1 | xxx.xx.xxx.198 | 2882 | | 1001 | 1002 | z2 | xxx.xx.xxx.196 | 2882 | | 1001 | 1003 | z3 | xxx.xx.xxx.204 | 2882 | | 1002 | 1004 | z1 | xxx.xx.xxx.194 | 2882 | | 1002 | 1005 | z2 | xxx.xx.xxx.192 | 2882 | | 1002 | 1006 | z3 | xxx.xx.xxx.197 | 2882 | +---------------+---------+------+----------------+----------+ 6 rows in set構成パラメータenable_rebalanceとenable_transferが無効、つまり値が
Falseであることを確認します。ユーザーテナントで以下のコマンドを実行し、構成パラメータの値を照会します。
obclient> SHOW PARAMETERS LIKE '%enable_rebalance%';obclient> SHOW PARAMETERS LIKE '%enable_transfer%';値が
Trueの場合、以下のコマンドを実行して、それぞれの値をFalseに変更できます。obclient> ALTER SYSTEM SET enable_rebalance = False;obclient> ALTER SYSTEM SET enable_transfer = False;
ステップ2:ログストリームの作成
各チェックが要件を満たしていることを確認した後、業務状況に応じて適切な操作を選択し、テナントのログストリームを作成します。
システムテナントがユーザーテナントのログストリームを作成する場合
rootユーザーでクラスタのsysテナントにログインします。接続例は以下の通りです。データベースへの接続時は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -Aログストリームを作成します。
システムテナントがユーザーテナントのログストリームを作成するSQLステートメントは以下の通りです:
ALTER SYSTEM CREATE LS {UNIT_GROUP [=] unit_group_id} | {UNIT_LIST [=] (unit_id_list) }[, PRIMARY_ZONE [=] 'zone_name'] TENANT [=] 'tenant_name';ステートメントの関連説明は以下の通りです:
unit_group_id:作成対象のログストリームのターゲットUNIT_GROUPのIDを指定します。これは同種ゾーンモードのテナントにのみ適用されます。unit_group_idはシステムテナント内で、oceanbase.DBA_OB_UNITSビューをクエリすることで取得できます。unit_id_list:作成するログストリームが配置されるUnitのリストを指定します。これは異種ゾーンモードのテナントにのみ適用されます。unit_id_listはシステムテナント内で、oceanbase.DBA_OB_UNITSビューをクエリすることで取得できます。各ゾーンにおけるUnit数は1つまでです。zone_name:ターゲットゾーンの名前です。PRIMARY_ZONEを指定しない場合、システムがテナント内の同一UNIT_GROUP(同種ゾーンモード)/UNIT_LIST(異種ゾーンモード)内のPRIMARY_ZONEを均等に分散させるルールに基づいて自動的に割り当てます。tenant_name:作成対象のログストリームのターゲットテナント名です。
例:
同種ゾーンモード異種ゾーンモードIDが1001の
UNIT_GROUPにログストリームを作成します。obclient(root@sys)[(none)]> ALTER SYSTEM CREATE LS UNIT_GROUP 1001 TENANT = mq_t1;ステートメント実行後、システムは指定された
UNIT_GROUP_IDが1001(対応するUnitはそれぞれ1001、1002、1003)の上にログストリームを作成します。IDが1001の
UNIT_GROUPにログストリームを作成し、そのログストリームのPRIMARY_ZONEをz1に設定します。obclient(root@sys)[(none)]> ALTER SYSTEM CREATE LS UNIT_GROUP 1001, PRIMARY_ZONE 'z1' TENANT = mq_t1;ステートメント実行後、システムは指定された
UNIT_GROUP_IDが1001(対応するUnitはそれぞれ1001、1002、1003)の上にログストリームを作成し、そのプライマリゾーンをz1に設定します。
UNIT_IDがそれぞれ1001、1002、1003のUNIT_LISTにログストリームを作成します。obclient(root@sys)[(none)]> ALTER SYSTEM CREATE LS UNIT_LIST (1001,1002,1003) TENANT = mq_t1;ステートメントの実行後、システムは指定された1001、1002、1003の
UNIT_LIST上にログストリームを作成します。UNIT_IDがそれぞれ1001、1002、1003のUNIT_LIST上にログストリームを作成し、そのログストリームのPRIMARY_ZONEをz1に設定します。obclient(root@sys)[(none)]> ALTER SYSTEM CREATE LS UNIT_LIST (1001,1002,1003), PRIMARY_ZONE 'z1' TENANT = mq_t1;ステートメントの実行後、システムは指定された1001、1002、1003の
UNIT_LIST上にログストリームを作成し、そのプライマリゾーンはz1となります。
作成されたログストリームを確認します。
新しく作成されたログストリームの
LS_IDを取得します。obclient(root@sys)[oceanbase]> SELECT * FROM oceanbase.CDB_OB_TENANT_EVENT_HISTORY WHERE EVENT='CREATE LS' AND TENANT_ID=1002 ORDER BY TIMESTAMP DESC LIMIT 1\Gクエリ結果の例は以下のとおりです:
*************************** 1. row *************************** TENANT_ID: 1002 TIMESTAMP: 2026-01-09 11:31:14.284278 MODULE: LS COMMAND EVENT: CREATE LS NAME1: ARGS VALUE1: {op:1, op str:"CREATE LS", tenant_id:1002, ls_id:{id:-1}, unit_group_id:1001, ls_primary_zone:"z1"} NAME2: LS_ID VALUE2: 1003 NAME3: LS_GROUP_ID VALUE3: 1002 NAME4: UNIT_GROUP_ID VALUE4: 1001 NAME5: PRIMARY_ZONE VALUE5: z1 NAME6: NULL VALUE6: EXTRA_INFO: NULL SVR_IP: 6.xx.xxx.xxx SVR_PORT: 13324 TRACE_ID: Y3xxxxxxxxxxx-xxxxxxxxxxxxxxx-x-x COST_TIME: 19407 RET_CODE: 0 ERROR_MSG: NULL 1 row in setクエリ結果から、新しく作成されたログストリームの
LS_IDは1003であることがわかります。新しく作成されたログストリームの詳細情報を確認します。
obclient(root@sys)[oceanbase]> SELECT LS_ID, STATUS, PRIMARY_ZONE, LS_GROUP_ID, UNIT_LIST FROM oceanbase.CDB_OB_LS WHERE TENANT_ID=1002 AND LS_ID = 1003;クエリ結果の例は以下のとおりです:
+-------+--------+--------------+-------------+----------------+ | LS_ID | STATUS | PRIMARY_ZONE | LS_GROUP_ID | UNIT_LIST | +-------+--------+--------------+-------------+----------------+ | 1003 | NORMAL | z1;z2,z3 | 1001 | 1001,1002,1003 | +-------+--------+--------------+-------------+----------------+ 1 row in setクエリ結果から、新しく作成されたログストリームの状態は
NORMAL、プライマリゾーンはz1であり、1001、1002、1003のUNIT_LIST(同種ゾーンモードでは、UNIT_GROUP_IDが同じユニットのグループ)上に分散配置されていることが確認できます。これは期待された結果と一致しており、ログストリームの作成は成功です。
ユーザーテナントが自身のテナントのログストリームを作成する場合
MySQLテナントまたはOracleテナントのテナント管理者がデータベースに接続します。
接続の例は以下のとおりです。データベースへの接続時は、実際の環境に準じてください。
obclient -h10.xx.xx.xx -P2883 -uroot@mq_t1#obdemo -p***** -Aログストリームを作成します。
ユーザーテナントがログストリームを作成するSQLステートメントは以下のとおりです:
ALTER SYSTEM CREATE LS {UNIT_GROUP [=] unit_group_id} | {UNIT_LIST [=] (unit_id_list) }[, PRIMARY_ZONE [=] 'zone_name'];ステートメントの関連説明は以下のとおりです:
unit_group_id:作成対象のログストリームのターゲットUNIT_GROUPのIDを指定します。同種ゾーンモードのテナントにのみ適用されます。unit_group_idはシステムテナントで、oceanbase.DBA_OB_UNITSビューをクエリすることで取得できます。unit_id_list:作成するログストリームの分散Unitリストを指定します。異種Zoneモードのテナントにのみ適用されます。unit_id_listはシステムテナントで、oceanbase.DBA_OB_UNITSビューをクエリすることで取得できます。各Zoneには1つのUnitまでしか存在できません。zone_name:ターゲットZoneの名前です。PRIMARY_ZONEを指定しない場合、システムがテナント内の同一UNIT_GROUP(同種Zoneモード)/UNIT_LIST(異種Zoneモード)内のPRIMARY_ZONEを均等に配置するルールに基づいて割り当てます。
例:
同種Zoneモード異種ZoneモードIDが1001の
UNIT_GROUPにログストリームを作成します。obclient> ALTER SYSTEM CREATE LS UNIT_GROUP 1001;ステートメント実行後、システムは指定された
UNIT_GROUP_IDが1001(対応するUnitはそれぞれ1001、1002、1003)の上にログストリームを作成します。IDが1001の
UNIT_GROUPにログストリームを作成し、そのログストリームのPRIMARY_ZONEをz1に設定します。obclient> ALTER SYSTEM CREATE LS UNIT_GROUP 1001, PRIMARY_ZONE 'z1';ステートメント実行後、システムは指定された
UNIT_GROUP_IDが1001(対応するUnitはそれぞれ1001、1002、1003)の上にログストリームを作成し、そのプライマリZoneをz1に設定します。
UNIT_IDがそれぞれ1001、1002、1003のUNIT_LISTにログストリームを作成します。obclient> ALTER SYSTEM CREATE LS UNIT_LIST (1001,1002,1003);ステートメント実行後、システムは指定された1001、1002、1003の
UNIT_LISTにログストリームを作成します。UNIT_IDがそれぞれ1001、1002、1003のUNIT_LISTにログストリームを作成し、そのログストリームのPRIMARY_ZONEをz1に設定します。obclient> ALTER SYSTEM CREATE LS UNIT_LIST (1001,1002,1003), PRIMARY_ZONE 'z1';ステートメント実行後、システムは指定された1001、1002、1003の
UNIT_LISTにログストリームを作成し、そのプライマリZoneをz1に設定します。
作成したログストリームを確認します。
MySQLモードのテナントを例に、操作手順は以下のとおりです。
新規作成されたログストリームの
LS_IDを取得します。obclient> SELECT * FROM oceanbase.DBA_OB_TENANT_EVENT_HISTORY WHERE EVENT='CREATE LS' ORDER BY TIMESTAMP DESC LIMIT 1\Gクエリ結果の例は次のとおりです:
*************************** 1. row *************************** TENANT_ID: 1002 TIMESTAMP: 2026-01-09 11:31:14.284278 MODULE: LS COMMAND EVENT: CREATE LS NAME1: ARGS VALUE1: {op:1, op str:"CREATE LS", tenant_id:1002, ls_id:{id:-1}, unit_group_id:1001, ls_primary_zone:"z1"} NAME2: LS_ID VALUE2: 1003 NAME3: LS_GROUP_ID VALUE3: 1002 NAME4: UNIT_GROUP_ID VALUE4: 1001 NAME5: PRIMARY_ZONE VALUE5: z1 NAME6: NULL VALUE6: EXTRA_INFO: NULL SVR_IP: 6.xx.xxx.xxx SVR_PORT: 13324 TRACE_ID: Y3xxxxxxxxxxx-xxxxxxxxxxxxxxx-x-x COST_TIME: 19407 RET_CODE: 0 ERROR_MSG: NULL 1 row in setクエリ結果によると、新規作成されたログストリームの
LS_IDは1003です。新しく作成されたログストリームの詳細を確認します。
obclient> SELECT LS_ID, STATUS, PRIMARY_ZONE, LS_GROUP_ID, UNIT_LIST FROM oceanbase.DBA_OB_LS WHERE LS_ID = 1003;クエリ結果の例は以下のとおりです:
+-------+--------+--------------+-------------+----------------+ | LS_ID | STATUS | PRIMARY_ZONE | LS_GROUP_ID | UNIT_LIST | +-------+--------+--------------+-------------+----------------+ | 1003 | NORMAL | z1;z2,z3 | 1001 | 1001,1002,1003 | +-------+--------+--------------+-------------+----------------+ 1 row in setクエリ結果によると、新しく作成されたログストリームのステータスは
NORMAL、プライマリゾーンはz1であり、1001、1002、1003 のUNIT_LIST(同種ゾーンモードでは、UNIT_GROUP_IDが同じユニットのグループ)に分散配置されています。これは期待通りの結果であり、ログストリームの作成は成功しました。