表级恢复的时候,必须使用一个新的资源池吗?

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】4.2.2.0
【问题描述】备份已经做好,在进行表级恢复的时候,因为测试环境资源不够,使用的是原租户,原资源池,查看表级恢复结果,发现恢复失败
【复现路径】无
【附件及日志】 ROOTSERVICE : OB_RESOURCE_POOL_ALREADY_GRANTED(-4626) on “127.0.0.1:2882” with traceid YB427F000001-00062275F834510E-0-0
【官方文档】 * OceanBase 错误码:4626

  • 错误原因:有租户在使用该资源池。

所以想确认以下,是否必须使用新的资源池,我这种资源本身不太够的情况,还有没有其他方案进行表级恢复?

把具体操作的步骤发一下 提供一下 根据这个YB427F000001-00062275F834510E-0-0的observerroot.log和observer.log日志

应该是的。表级别的恢复原理也是先创建出租户,只不过恢复租户数据的时候只还原这个表的数据。 租户还原时目标租户不存在会安全一些。你可以考虑建一个最小规格的租户 2C1G 。把其他租户的内存缩小一些就腾出来了。至于cpu 无所谓,加大 集群参数 cpu_count 。

物理恢复是必须为辅助租户创建资源池的,也可以使用逻辑备份恢复obloader/obdumper

OB表级恢复功能是将用户指定的表恢复到已有租户中,这个已有租户和原表所在的租户可以是同一个租户,也可以是不同的租户,甚至可能是不同的集群。这里不像Oracle一样限制只能恢复到同租户下,相比Oracle会更加的灵活。

为什么要使用辅助租户?

由于表级恢复是用户指定表名来恢复的,若要知道这个表名对应的table id、数据以及关联的schema对象等等,就需要先恢复系统表。这个动作无法在目标租户中直接操作,因此需要借助一个辅助租户来实现。

但辅助租户毕竟只需要恢复用户指定的表集合即可,并不必像物理恢复一样需要完整的恢复一个租户。对辅助租户的恢复我们只需要恢复如下数据:

  1. 每个日志流的inner tablets的完整数据;
  2. 所有日志流ls meta, palf meta以及完整clog;
  3. 每一个备份的tablet的tablet meta,sst table meta,以及每一个宏块在备份介质上的地址,不需要实际恢复宏块数据,保持每一个宏块处于远程引用状态;