在日常工作中,作为dba,总会有人误删数据找过来叫你恢复,这个时候就要用到闪回这个强大的功能了,不过误删要立刻要反馈找dba进行恢复,原始数据有时间要求不然就不能用闪回了,就要用备份去恢复了,相当麻烦,而且没有备份就玩完了,只能自行想办法了
数据库默认没有开启闪回,并且开闪回之前要开归档
开启闪回
alter database flashback on;
select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
1.flashback drop
闪回删除是利用回收站,drop表操作闪回
1.1查看是否开启回收站
show parameter recyclebin;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
recyclebin string on
1.2查看回收站数据
select count(*) from recyclebin;
1.3闪回表
flashback table scott.test to before drop;
注意:
1、system 表空间的对象没有回收站,所以在 sys 下缺省使用 system 表空间时,drop table 会直接删除对象,所以表不要放错了表空间
2、闪回删除的表,索引和约束都回来了,但是乱码,需要重命名
2、flashback table
利用 undo 数据,闪回表通常是把表的状态回退到以前的某个时刻。前提是对表启用行移动。
update,delete,insert,truncate闪回
Undo保留时间的参数
show parameter undo_retention;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_retention integer 7200
启用行移动
alter table scott.student enable row movement;
闪回前备份一下原表,闪回数据测试确认后如果有误可以恢复
create table scott.student as select * from WBABAT02.WBA_BANK_ACCT_LEDGER_T;
flashback table scott.student to timestamp to_timestamp('2025-03-12 18:15:00','yyyy-mm-dd hh24:mi:ss');
禁用行移动
alter table scott.student disable row movement;
1555

被折叠的 条评论
为什么被折叠?



