为防止恶意或误操作导致的数据不可恢复性丢失,OceanBase数据库提供了回收站功能,从而支持租户级的数据的快速恢复功能。本文介绍如何恢复回收站中的租户。OceanBase数据库可以通过flashback tenant语句恢复回收站中的租户。视频讲解如下
下面是具体的操作步骤:
(1)使用root用户登录到集群的sys租户。
obclient -h192.168.79.11 -P2881 -uroot -p'Welcome_1' -A
(2)查看当前数据库集群是否开启回收站。
ob> show variables like 'recyclebin'; # 输出信息如下: +---------------+-------+ | Variable_name | Value | +---------------+-------+ | recyclebin | OFF | +---------------+-------+ 1 row in set (0.012 sec)
(3)针对整个租户(Global)开启或关闭回收站。
ob> set global recyclebin = on; ob> show variables like 'recyclebin'; # Global设置在整个租户内生效。 # 设置后,对当前Session无效,需要重新登录建立新的Session才会生效。
(4)退出当前会话并重新登录,再查看回收站的状态
ob> show variables like 'recyclebin'; # 输出信息如下: +---------------+-------+ | Variable_name | Value | +---------------+-------+ | recyclebin | ON | +---------------+-------+ 1 row in set (0.005 sec)
(5)回收站也可以针对当前会话开启或者关闭,例如:
ob> set @@recyclebin = on; ob> set @@recyclebin = off;
(6)开启回收站后,查看回收站中的信息。
ob> show recyclebin; Empty set (0.016 sec)
(7)创建一个新的租户后,并使用drop tenant语句删除该租户。
ob> create tenant if not exists mytenant02 primary_zone='zone1', resource_pool_list=('rp1') set ob_tcp_invited_nodes='%'; ob> drop tenant mytenant02;
(8)查看回收站中的信息。
ob> show recyclebin; # 输出的信息如下: +-------------------+---------------+--------+----------------------------+ | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME | +-------------------+---------------+--------+----------------------------+ | __recycle_$_1_1744| mytenant02 | TENANT | 2025-04-09 17:44:17.213979 | +-------------------+---------------+--------+----------------------------+ 1 row in set (0.006 sec)
(9)通过flashback tenant语句,恢复回收站中的租户。
ob> flashback tenant mytenant02 to before drop;
(10)查看dba_ob_tenants视图和回收站确认执行结果。
ob> show recyclebin; Empty set (0.010 sec) ob> use oceanbase; ob> select tenant_id, tenant_name,tenant_type,create_time from dba_ob_tenants; +-----------+-------------+-------------+----------------------------+ | tenant_id | tenant_name | tenant_type | create_time | +-----------+-------------+-------------+----------------------------+ | 1 | sys | SYS | 2025-04-09 14:50:06.117812 | | 1003 | META$1004 | META | 2025-04-09 17:42:27.521615 | | 1004 | mytenant02 | USER | 2025-04-09 17:42:27.521615 | +-----------+-------------+-------------+----------------------------+ 3 rows in set (0.102 sec)
(11)回收站不仅仅可以针对租户,也可以针对其他的数据库对象。例如:
obclient -h192.168.79.12 -P2881 -uroot@mysqltenant -pWelcome_1 -A # 确认回收站是否开启 ob> show variables like '%recyclebin%'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | recyclebin | ON | +---------------+-------+ 1 row in set (0.002 sec) # 确定表的信息 ob> use demo; ob> show tables; +----------------+ | Tables_in_demo | +----------------+ | table01 | +----------------+ # 删除一张表 ob> drop table table01; # 查看回收站 ob> show recyclebin; +--------------------------------+---------------+-------+----------------------------+ | OBJECT_NAME | ORIGINAL_NAME | TYPE | CREATETIME | +--------------------------------+---------------+-------+----------------------------+ | __recycle_$_1_1745401735728152 | table01 | TABLE | 2025-04-23 17:48:55.748140 | +--------------------------------+---------------+-------+----------------------------+ 1 row in set (0.017 sec) # 执行闪回操作 ob> flashback table table01 to before drop;