租户锁定和解锁
OceanBase 数据库支持对租户进行锁定。租户锁定后,不能在该租户上创建新的连接,已有连接保持不变。本文介绍如何进行租户锁定和解锁。
背景信息
通过 ALTER TENANT 语句对租户锁定和解锁。适用于故障应急场景和运维变更场景:
- 故障应急:租户出现异常正在修复中,为了避免业务流量对修复进程产生影响,可以锁定租户。需要在征得业务方同意的情况下进行操作。应急场景下锁定租户,锁定后需要主动 kill session。
- 运维变更:例如租户需要下线,下线流程需要保证可灰度、可回滚等原则,可以把锁定租户作为流程之一以观察对业务系统的影响。
注意
锁定和解锁务必配对使用,忘记解锁会导致无法建立新连接。
租户锁定
-
使用
root用户登录到集群的sys租户。obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A -
进入
oceanbase数据库。USE oceanbase; -
通过
DBA_OB_TENANTS视图,查看租户信息。以查看租户
mq_t1的锁定状态为例:obclient [oceanbase]> SELECT TENANT_ID,TENANT_NAME,LOCKED FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1'; +-----------+-------------+--------+ | TENANT_ID | TENANT_NAME | LOCKED | +-----------+-------------+--------+ | 1036 | mq_t1 | NO | +-----------+-------------+--------+ 1 row in setDBA_OB_TENANTS视图的详细说明,参见 DBA_OB_TENANTS。 -
通过
ALTER TENANT语句,锁定租户。以锁定租户
mq_t1为例。obclient [oceanbase]> ALTER TENANT mq_t1 LOCK; Query OK, 0 rows affectedALTER TENANT语句的详细说明,参见 ALTER TENANT。 -
查看
DBA_OB_TENANTS视图,确认租户是否锁定成功。obclient [oceanbase]> SELECT TENANT_ID,TENANT_NAME,LOCKED FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1'; +-----------+-------------+--------+ | TENANT_ID | TENANT_NAME | LOCKED | +-----------+-------------+--------+ | 1036 | mq_t1 | YES | +-----------+-------------+--------+ 1 row in set
租户解锁
-
使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A -
进入
oceanbase数据库。obclient [(none)]> USE oceanbase; -
通过
DBA_OB_TENANTS视图,查看租户信息。以查看租户
mq_t1的锁定状态为例:obclient [oceanbase]> SELECT TENANT_ID,TENANT_NAME,LOCKED FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1'; +-----------+-------------+--------+ | TENANT_ID | TENANT_NAME | LOCKED | +-----------+-------------+--------+ | 1036 | mq_t1 | YES | +-----------+-------------+--------+ 1 row in setDBA_OB_TENANTS视图的详细说明,参见 DBA_OB_TENANTS。 -
通过
ALTER TENANT语句,解锁租户。以解锁租户
mq_t1为例:obclient [oceanbase]> ALTER TENANT mq_t1 UNLOCK; Query OK, 0 rows affectedALTER TENANT语句的详细说明,参见 ALTER TENANT。 -
查看
DBA_OB_TENANTS视图,确认租户是否锁定成功。
obclient [oceanbase]> SELECT TENANT_ID,TENANT_NAME,LOCKED FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';
+-----------+-------------+--------+
| TENANT_ID | TENANT_NAME | LOCKED |
+-----------+-------------+--------+
| 1036 | mq_t1 | NO |
+-----------+-------------+--------+
1 row in set




