ユーザーはビジネスニーズに応じて、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_LISTに含まれていることを確認する必要があります。ログストリームのPRIMARY_ZONEの設定は、テナントのPRIMARY_ZONEの設定とは若干異なります。ログストリームではゾーンを1つのみ指定でき、例えばz1またはz2とします。テナントのように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_GROUP(対応する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_GROUP(対応するUnitはそれぞれ1001、1002、1003)にログストリームを作成し、そのプライマリZoneを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が同じUnitのグループに対応)。これは期待された結果と一致し、ログストリームの作成は成功しました。
ユーザーテナントが自身のテナントにログストリームを作成する
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のリストを指定します。これは異種ゾーンモードのテナントにのみ適用されます。unit_id_listはシステムテナントで、oceanbase.DBA_OB_UNITSビューをクエリすることで取得できます。各ゾーンに配置されるUnitは最大1つです。zone_name:対象ゾーンの名前です。PRIMARY_ZONEを指定しない場合、システムがテナント内の同一UNIT_GROUP(同種ゾーンモード)/UNIT_LIST(異種ゾーンモード)内のPRIMARY_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)の上にログストリームを作成し、そのプライマリゾーンを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にログストリームを作成し、そのプライマリゾーンを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が同じUnitのグループに対応)。これは期待された結果と一致し、ログストリームの作成は成功です。