在日常开发或测试中,难免会出现误删表数据的情况。别急,YashanDB 支持灵活的表闪回功能,让你轻松恢复被误删的数据,不再手忙脚乱。
以下结合实际场景,演示如何通过闪回查询、闪回表、回收站机制等手段,把误删的数据完美还原。
一、删除操作下的数据闪回(以 HEAP 表为例)
比如我们误删了 sales.branches1 表中的一条记录:
delete sales.branches1 where BRANCH_NO = '0405' and BRANCH_NAME = '贵州';
commit;
为了找回这条记录,可以使用 YashanDB 的闪回查询功能。你需要知道大致的时间点,例如这条数据被删之前的时间戳,然后执行:
select * from sales.branches1 as of TIMESTAMP TIMESTAMP('2024-05-11 14:03:00.00000');
这样就能查询到那一刻的数据快照。你也可以将快照中的数据另存为一个新表:
create table sales.branches1_1403 as
select * from sales.branches1 as of TIMESTAMP TIMESTAMP('2024-05-11 14:03:00.00000');
同时,如果在删除之后有新的插入(例如插入了编号为 '0406' 的江西分支),也可以用相同方式构造另一个时间点的快照,然后将两个时间点合并成新的业务表。
最后通过 rename 操作将新的表替换成业务表:
alter table sales.branches rename to branches_org;
alter table sales.branches_bak rename to branches;
数据就这样恢复了。
二、DROP 表后的闪回恢复
如果你不小心执行了 drop table,也不需要惊慌。只要启用了回收站机制,数据是可以恢复的。
首先确认回收站已开启:
alter system set RECYCLEBIN_ENABLED = ON;
接着查询被删除的表是否还在回收站中:
select original_name, object_name from dba_recyclebin
where original_name in ('FINANCE_INFO', 'ORDERS_INFO', 'SALES_INFO', 'EMPLOYEES');
如果存在,就可以使用 FLASHBACK TABLE 恢复它们:
flashback table finance_info to before drop;
如果你想给恢复的表换一个名字,也可以这样操作:
flashback table employees to before drop rename to employees_recycle;
恢复后建议再查看是否有索引对象需要重新命名。
三、TRUNCATE 表后的闪回恢复
表结构保留但数据被清空的 truncate 操作,同样可以通过闪回来处理。
比如:
truncate table product;
之后执行:
flashback table product to before truncate;
即可找回原本的数据记录。
同样,建议再检查表上的索引是否还使用回收站自动生成的名称,并及时调整。
四、总结一下
无论你是误删了记录,还是整个表都被 drop 或 truncate,只要开启了 YashanDB 的闪回机制,大部分数据都可以找回来。核心用法就是两个关键点:
1.闪回查询(AS OF TIMESTAMP)——适合找回具体时间点的数据;
2.表级闪回(FLASHBACK TABLE)——适合处理 DROP 或 TRUNCATE 操作后的恢复。
记得在上线前确认已开启回收站机制,并掌握基本的时间戳获取和闪回语法,这将是你数据安全的最后一张底牌。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。