首批通过分布式安全可靠测评,为关键业务系统打造
CREATE TENANT
更新时间:2025-12-30 11:03:51
描述
该语句用来创建租户。
此外,OceanBase 数据库还支持创建备租户。创建备租户命令是一个同步命令,在系统租户 Session 中执行,并使用 DDL 超时时间。
说明
只有用 root 用户连接到 sys 租户才能使用 CREATE TENANT 语句创建租户。
语法
创建租户的语法如下:
CREATE TENANT [IF NOT EXISTS] tenant_name
[tenant_characteristic_list] [opt_set_sys_var];
tenant_characteristic_list:
tenant_characteristic [, tenant_characteristic...]
tenant_characteristic:
COMMENT 'string'
| {CHARACTER SET | CHARSET} [=] charset_name
| COLLATE [=] collation_name
| ZONE_LIST [=] (zone_name [, zone_name...])
| PRIMARY_ZONE [=] zone_name
| DEFAULT TABLEGROUP [=] {NULL | tablegroup_name}
| RESOURCE_POOL_LIST [=](pool_name [, pool_name...])
| LOCALITY [=] 'locality description'
opt_set_sys_var:
{SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...
创建备租户的语法如下:
CREATE STANDBY TENANT [IF NOT EXISTS] tenant_name
LOG_RESTORE_SOURCE [=] string_value
[tenant_characteristic_list];
tenant_characteristic_list:
tenant_characteristic [, tenant_characteristic...]
tenant_characteristic:
COMMENT 'string'
| PRIMARY_ZONE [=] zone_name
| RESOURCE_POOL_LIST [=](pool_name [, pool_name...])
| LOCALITY [=] 'locality description'
参数解释
| 参数 | 描述 |
|---|---|
| tenant_name | 指定租户名。租户名不能是 OceanBase 数据库的关键字。 |
| IF NOT EXISTS | 如果要创建的租户名已存在,并且没有指定 IF NOT EXISTS,则会报错。 |
| RESOURCE_POOL_LIST | 资源池列表,为创建租户时的必填项。 |
| DEFAULT TABLEGROUP | 设置租户默认表组信息,NULL 表示取消默认表组。 如果不指定,默认为 NULL。 |
| COMMENT | 指定注释。 |
| CHARACTER SET | CHARSET | 指定字符集。 |
| COLLATE | 创建 MySQL 兼容模式的租户时,指定租户级的字符序。
说明创建 Oracle 兼容模式的租户时,不支持设置租户级字符序。如果设置了字符序,语法上不会报错,但设置并不会生效,系统会将其覆盖为字符集对应的默认字符序。 |
| PRIMARY_ZONE | 指定租户所在的 Primary Zone 名称。 |
| LOCALITY | 描述副本在 Zone 间的分布情况。 例如:F@z1,F@z2,F@z3 表示 z1、z2、z3 为全功能副本。 |
| system_var_name | 指定租户系统变量值。 其中 ob_compatibility_mode 用于指定租户的兼容模式(可选 MySQL 或 Oracle 模式),而且只能在创建时指定;如果不指定 ob_compatibility_mode,默认兼容模式为 MySQL。 |
| STANDBY | 创建备租户。此命令执行成功后,备租户将自动进入持续同步状态。 |
| LOG_RESTORE_SOURCE | 日志恢复源配置,详细信息参见 设置日志恢复源。 |
示例
创建一个 3 副本的 MySQL 租户。
obclient> CREATE TENANT IF NOT EXISTS test_tenant CHARSET='utf8mb4', ZONE_LIST=('zone1','zone2','zone3'), PRIMARY_ZONE='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool1');创建 Oracle 兼容模式租户。
obclient> CREATE TENANT IF NOT EXISTS tenant1 ZONE_LIST=('zone1'), PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('pool1') SET ob_compatibility_mode='oracle', set ob_tcp_invited_nodes='%';在系统租户下创建备租户
standby_tenant。创建一个 1C5G 的 Unit。
obclient> CREATE RESOURCE UNIT 1C5G MAX_CPU 1, MEMORY_SIZE = '5G'; Query OK, 0 rows affected创建资源池
pool_for_standby。obclient> CREATE RESOURCE POOL pool_for_standby UNIT = '1C5G', UNIT_NUM = 1, ZONE_LIST = ('zone1', 'zone2', 'zone3'); Query OK, 0 rows affected获取设置
LOG_RESTORE_SOURCE的信息并创建空的备租户。obclient> CREATE STANDBY TENANT IF NOT EXISTS standby_tenant LOG_RESTORE_SOURCE = 'SERVICE=11.xxx.xxx.xxx:17855;11.xxx.xxx.xxx:17857;11.xxx.xxx.xxx:17859 USER=test@mysql PASSWORD=******' RESOURCE_POOL_LIST=('pool_for_standby'); Query OK, 0 rows affected通过视图
DBA_OB_TENANTS查看租户状态,如果字段TENANT_ROLE为STANDBY,STATUS为NORMAL,则表示租户状态正常,创建已成功。obclient> SELECT TENANT_NAME, TENANT_TYPE, CREATE_TIME, STATUS, TENANT_ROLE,SCN_TO_TIMESTAMP(SYNC_SCN) FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'standby_tenant'; +----------------+-------------+----------------------------+--------+-------------+----------------------------+ | TENANT_NAME | TENANT_TYPE | CREATE_TIME | STATUS | TENANT_ROLE | SCN_TO_TIMESTAMP(SYNC_SCN) | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ | standby_tenant | USER | 2023-04-14 21:06:48.787550 | NORMAL | STANDBY | 2023-04-14 21:12:59.183293 | +----------------+-------------+----------------------------+--------+-------------+----------------------------+ 1 row in set