首批通过分布式安全可靠测评,为关键业务系统打造
创建租户
更新时间:2026-03-12 15:45:49
本节主要介绍通过 SQL 命令创建 OceanBase 数据库租户的方法。OceanBase 数据库仅支持 sys 租户创建资源单元、资源池和业务租户。
描述
在创建新租户时,如果当前的资源池均被使用(被其他租户使用),需要创建新的资源池。在创建资源池前,需要先确定资源单元配置和资源使用范围。
操作步骤
1. (可选)查看资源单元和资源池信息
obclient> SELECT * FROM oceanbase.__all_unit_config;
obclient> SELECT * FROM oceanbase.gv$unit;
2. 创建资源单元规格
资源单元仅仅是规格定义,不实际分配资源。
语法
CREATE RESOURCE UNIT unit_name
MAX_CPU [=] cpu_num,
MAX_MEMORY [=] mem_size,
MAX_IOPS [=] iops_num,
MAX_DISK_SIZE [=] disk_size,
MAX_SESSION_NUM [=] session_num,
[MIN_CPU [=] cpu_num,]
[MIN_MEMORY [=] mem_size,]
[MIN_IOPS [=] iops_num];
参数解释
| 参数 | 描述 |
|---|---|
| unit_name | 指定资源单元名称。 |
| MAX_CPU | 指定 CPU 的最多数量。 |
| MAX_MEMORY | 指定最大内存容量,取值范围为 [1073741824, +∞) 。 单位为字节,即最小值为 1G。 |
| MAX_IOPS | 指定 IOPS 的最多数量,取值范围为 [128,+∞)。 |
| MAX_DISK_SIZE | 指定最大硬盘容量,取值范围为 [536870912,+∞)。 单位为字节,即最小值为 512M。 |
| MAX_SESSION_NUM | 指定 Session 的最多数量,取值范围为 [64,+∞)。 |
| MIN_CPU | 指定 CPU 的最少数量。 |
| MIN_MEMORY | 指定最小内存容量。 |
| MIN_IOPS | 指定 IOPS 的最少数量。 |
示例
创建资源单元 unit001 配置为 2 个 CPU,6G 内存,128 个 IOPS,100G 硬盘容量,最多运行 64 个 Session。
obclient> CREATE RESOURCE UNIT unit001
MAX_CPU 2,MAX_MEMORY '6G',MAX_IOPS 128,MAX_DISK_SIZE '100G',MAX_SESSION_NUM 64,
MIN_CPU 2,MIN_MEMORY '6G',MIN_IOPS 128;
Query OK, 0 rows affected
或者
obclient> CREATE RESOURCE UNIT unit001
MAX_CPU 2,MAX_MEMORY 6442450944,MAX_IOPS 128,MAX_DISK_SIZE 107374182400,MAX_SESSION_NUM 64,
MIN_CPU 2,MIN_MEMORY 6442450944,MIN_IOPS 128;
Query OK, 0 rows affected
3. 创建资源池
资源池会实际创建 unit,按规格定义分配资源。
语法
CREATE RESOURCE POOL pool_name
UNIT [=] unit_name,
UNIT_NUM [=] unit_num,
ZONE_LIST [=] ('zone' [, 'zone' ...]);
参数解释
| 参数 | 描述 |
|---|---|
| pool_name | 指定要创建的资源池的名称。 |
| UNIT [=] unit_name | 指定资源规格的名称。 |
| UNIT_NUM [=] unit_num | 指定要创建的单个 Zone 下的 Unit 个数。 每个单元会根据当前集群负载,自动在每个 Zone 中选择一个 Server 负载,但同一个资源池的多个 Unit 不能分配到同一个 Server,即一个资源池包含的Unit 个数不能超过单 Zone 内 Server 的个数。 |
| ZONE_LIST [=] ('zone' [, 'zone' ...]) | 指定要创建的资源池所属的 Zone。一般与 zone 个数保持一致。 |
示例
创建资源池 pool001。
obclient> CREATE RESOURCE POOL pool001
UNIT='unit001',UNIT_NUM=1,ZONE_LIST=('zone1','zone2','zone3');
Query OK, 0 rows affected
4. 创建租户
将资源池分配给对应的租户。
语法
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
| PRIMARY_ZONE [=] zone
| DEFAULT TABLEGROUP [=] {NULL | tablegroup}
| 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] ...
参数解释
| 参数 | 描述 |
|---|---|
| tenant_name | 指定租户名。最长 128 个字符,只能有大小写英文字母,数字和下划线,而且必须以字母或下划线开头,并且不能是 OceanBase 数据库的关键字。 |
| IF NOT EXISTS | 如果要创建的租户名已存在,并且没有指定 IF NOT EXISTS,则会报错。 |
| RESOURCE_POOL_LIST | 资源池列表,为创建租户时的必填项,暂时只支持一个 Resource Pool。 |
| DEFAULT TABLEGROUP | 设置租户默认表组信息,NULL 表示取消默认表组。 如果不指定,默认为 NULL。 |
| COMMENT | 指定注释。 |
| CHARACTER SET | CHARSET | 指定租户的字符集。 |
| COLLATE | 指定字符序。 |
| PRIMARY_ZONE | 指定 Primary Zone。主副本分配到 Zone 内的优先级,逗号两侧优先级相同,分号左侧优先级高于右侧。比如 zone1,zone2;zone3。 |
| LOCALITY | 描述副本在 Zone 间的分布情况。 例如:F@z1,F@z2,F@z3,R@z4 表示 z1、z2、z3 为全功能副本,z4 为只读副本。 |
| system_var_name | 可选,指定租户的系统变量值,其中:
|
示例
创建 MySQL 兼容模式租户
obclient> CREATE TENANT IF NOT EXISTS mysql001 CHARSET='utf8mb4', PRIMARY_ZONE='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool001') SET ob_tcp_invited_nodes='%'; Query OK, 0 rows affected创建 Oracle 兼容模式租户
obclient> CREATE TENANT IF NOT EXISTS oracle001 CHARSET='utf8mb4', PRIMARY_ZONE='zone1;zone2,zone3', RESOURCE_POOL_LIST=('pool002') SET ob_tcp_invited_nodes='%',ob_compatibility_mode='oracle'; Query OK, 0 rows affected
5. 设置管理员用户密码
注意
使用 SQL 语句创建的租户,租户管理员用户密码为空。使用前请先设置密码。
示例如下:
将租户
mysql001的管理员用户root的密码设置为******。$ obclient -h10.10.10.1 -P2881 -uroot@mysql001 -p -A Enter password: obclient> SET PASSWORD = PASSWORD('******'); Query OK, 0 rows affected有关 MySQL 模式修改用户密码的详细信息,请参见 SET PASSWORD。
将租户
oracle001的管理员用户SYS的密码设置为******。$ obclient -h10.10.10.1 -P2881 -usys@oracle001 -p -A Enter password: obclient> SET PASSWORD = PASSWORD(******); Query OK, 0 rows affected有关 Oracle 模式修改用户密码的详细信息,请参见 SET PASSWORD。
更多信息
有关创建 OceanBase 数据库用户的的详细信息,请参见 CREATE USER(MySQL 模式) 和 CREATE USER(Oracle 模式)。