首批通过分布式安全可靠测评,为关键业务系统打造
创建日志流
更新时间:2026-04-15 17:16:58
用户可以根据业务需要,在 UNIT_GROUP(同构 Zone 模式)/UNIT_LIST(异构 Zone 模式)上创建日志流,以便手动调整租户在各服务节点上的日志流个数。
使用限制
对于 V4.2.5 版本,V4.2.5 BP2 及以上版本支持创建日志流操作。
在 V4.x 之前版本中,OceanBase 数据库仅支持租户的同构 Zone 模式。在 V4.2.5 版本中,从 V4.2.5 BP5 版本开始支持租户的异构 Zone 模式。其中:
- 同构 Zone 模式下,需要通过指定 Unit Group 来创建日志流。
- 异构 Zone 模式下,需要通过指定 UNIT_LIST 来创建日志流。
有关同构 Zone 模式和异构 Zone 模式的详细区别,参见 数据分布。
注意事项
执行创建日志流操作前,需要注意以下事项:
当前仅支持创建普通的用户日志流,不支持创建广播日志流。
创建日志流操作仅支持在主租户上完成。且待创建日志流的租户的
STATUS和SWITCHOVER_STATUS需要为NORMAL。创建日志流时:
- 同构 Zone 模式下,要求目标
UNIT_GROUP的状态必须为ACTIVE,且视图DBA_OB_UNITS中目标UNIT_GROUP_ID的值不能为 0。 - 异构 Zone 模式下,要求目标
UNIT_LIST的状态必须为ACTIVE,且指定的目标UNIT_LIST不能为空。
- 同构 Zone 模式下,要求目标
为待创建的日志流指定
PRIMARY_ZONE时,需要保证指定的 Zone 在租户的ZONE_LIST中。对于日志流而言,设置日志流的PRIMARY_ZONE与设置租户的PRIMARY_ZONE略有不同,日志流仅允许设置一个 Zone,例如z1或z2,不能像租户一样设置z1,z2、z1; z2或RANDOM。负载均衡相关的配置项建议为关闭状态,即值为
False,否则:当租户级配置项 enable_rebalance 为开启状态,即值为
True时,创建的日志流会被系统从目标UNIT_GROUP/UNIT_LIST中迁移到其他UNIT_GROUP/UNIT_LIST中。当租户级配置项 enable_transfer 为开启状态,即值为
True时,创建的日志流可能会被删除。
步骤一:创建前检查
管理员用户登录到集群的
sys租户或用户租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A查询租户的状态、
PRIMARY_ZONE和 Locality 相关信息。创建日志流时,要求租户的
STATUS和SWITCHOVER_STATUS均为NORMAL。同时,如果需要指定日志流的PRIMARY_ZONE,需要保证指定的 Zone 在租户的ZONE_LIST中,而租户的ZONE_LIST可以参考租户 Locality 中有哪些 Zone。系统租户
obclient> 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(同构 Zone 模式)/UNIT_LIST(异构 Zone 模式)的状态为ACTIVE。在系统租户下执行以下命令,查询租户的 Unit 信息。
obclient> 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;
步骤二:创建日志流
确保各项检查符合要求后,根据业务情况,选择合适的操作,为租户创建日志流。
系统租户为用户租户创建日志流
使用
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,仅适用于同构 Zone 模式的租户。unit_group_id可在系统租户下,通过查询oceanbase.DBA_OB_UNITS视图获取。unit_id_list:指定待创建的日志流分布的 Unit 列表,仅适用于异构 Zone 模式的租户。unit_id_list可在系统租户下,通过查询oceanbase.DBA_OB_UNITS视图获取,每个 Zone 不超过一个 Unit。zone_name:目标 Zone 的名称。如果不指定PRIMARY_ZONE,则由系统根据租户下同一个UNIT_GROUP(同构 Zone 模式)/UNIT_LIST(异构 Zone 模式)内的PRIMARY_ZONE保持均衡的规则来分配。tenant_name:待创建日志流的目标租户的名称。
示例如下:
同构 Zone 模式异构 Zone 模式在 ID 为 1001 的
UNIT_GROUP上创建一个日志流。obclient> 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> ALTER SYSTEM CREATE LS UNIT_GROUP 1001, PRIMARY_ZONE 'z1' TENANT = mq_t1;语句执行后,系统会在指定的
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) TENANT = mq_t1;语句执行后,系统会在指定的 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' TENANT = mq_t1;语句执行后,系统会在指定的 1001、1002、1003 的
UNIT_LIST上创建一个日志流,且其主 Zone 为z1。
确认创建的日志流。
获取新创建的日志流的
LS_ID。obclient> 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: 2025-06-19 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.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,主 Zone 为z1,且分布在 1001、1002、1003 的UNIT_LIST(同构 Zone 模式下,对应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,仅适用于同构 Zone 模式的租户。unit_group_id可在系统租户下,通过查询oceanbase.DBA_OB_UNITS视图获取。unit_id_list:指定待创建的日志流分布的 Unit 列表,仅适用于异构 Zone 模式的租户。unit_id_list可在系统租户下,通过查询oceanbase.DBA_OB_UNITS视图获取,每个 Zone 不超过一个 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。
确认创建的日志流。
获取新创建的日志流的
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: 2025-06-19 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,主 Zone 为z1,且分布在 1001、1002、1003 的UNIT_LIST(同构 Zone 模式下,对应UNIT_GROUP_ID相同的一组 Unit) 上,与预期结果一致,日志流创建成功。