首批通过分布式安全可靠测评,为关键业务系统打造
删除资源池报错,错误代码 4626
更新时间:2024-01-22 01:56
本文介绍删除某一租户后删除该租户下的资源池失败报 4626 错误的处理方法。
适用版本
OceanBase 数据库 V2.2.7x 前的版本。
问题现象
删除某一租户后,删除该租户下的资源池以释放资源。删除资源池失败,系统报错提示该资源池已经指定给了租户。
提示错误如下所示。
ERROR 4626 (HY000): resource pool '<resource_pool_name>' has already been granted to a tenant
问题原因
导致该错误的原因是资源池所属租户并未被真正删除。
在 OceanBase 数据库中,如果资源池已经被指定给了某个租户,删除该资源池之前,需要确保该资源池所属的租户已真正从系统中删除。此外,OceanBase 数据库提供了 schema_history_expire_time 参数来设置租户删除延迟时间,该参数的默认值为 7 天。
默认情况下,执行删除租户的操作后,只会修改租户状态标识使该租户不可见,但是并不会真正地删除租户;在 7 天后,该租户才会真正被删除。
可以通过以下操作进行错误排查。登录 OceanBase 的 sys 租户,执行以下命令,查询租户的状态。本示例以 t1 租户为例。
obclient> SELECT tenant_name,status FROM __all_tenant;
+-------------+------------------------+
| tenant_name | status |
+-------------+------------------------+
| sys | TENANT_STATUS_NORMAL |
| t1 | TENANT_STATUS_DROPPING |
+-------------+------------------------+
4 rows in set (0.01 sec)
可以看到,租户的状态为TENANT_STATUS_DROPPING,且还可以正常连接,这表示删除租户的操作仅仅修改了租户状态标识,而没有真正删除租户。
然后,可以通过执行以下命令查看 schema_history_expire_time 参数的设置来进一步确认错误的原因。以下示例显示当前租户删除的延迟时间为 7 天。
obclient> SHOW PARAMETERS LIKE 'schema_history_expire_time';
+------------+----------+---------------+----------+----------------------------+-----------+-------+--------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+
| zone | svr_type | svr_ip | svr_port | name | data_type | value | info | section | scope | source | edit_level |
+------------+----------+---------------+----------+----------------------------+-----------+-------+--------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+
| HANGZHOU_3 | observer | xx.xxx.xx.xxx | xxxx | schema_history_expire_time | NULL | 7d | the hour of expire time for schema history, from 1hour to 30days, with default 7days. Range: [1h, 30d] | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
| HANGZHOU_1 | observer | xx.xxx.xx.xxx | xxxx | schema_history_expire_time | NULL | 7d | the hour of expire time for schema history, from 1hour to 30days, with default 7days. Range: [1h, 30d] | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
| HANGZHOU_2 | observer | xx.xxx.xx.xxx | xxxx | schema_history_expire_time | NULL | 7d | the hour of expire time for schema history, from 1hour to 30days, with default 7days. Range: [1h, 30d] | OBSERVER | CLUSTER | DEFAULT | DYNAMIC_EFFECTIVE |
+------------+----------+---------------+----------+----------------------------+-----------+-------+--------------------------------------------------------------------------------------------------------+----------+---------+---------+-------------------+
3 rows in set (0.07 sec)
解决方法
删除资源池之前需要确保该资源池所属的租户已经删除。
可以通过以下两种方法解决本问题。
方法一:
修改
schema_history_expire_time参数,调整租户删除的生效时间,等待租户删除生效之后再执行删除资源池命令。执行以下命令修改
schema_history_expire_time参数,取值范围为 [1h, 30d]。说明
有关
schema_history_expire_time参数的详细说明,参见《OceanBase 数据库参考指南》中的 系统配置项 章节。obclient> ALTER SYSTEM SET schema_history_expire_time='1h'; Query OK, 0 rows affected (0.07 sec)方法二:
执行
DROP TENANT <tenant_name> FORCE命令使删除租户的命令立即生效。注意
无论回收站是否打开,
DROP TENANT都会直接将租户删除。FORCE