Oracle数据闪回使用方法
1. 闪回表
表闪回前提需要开启表的行迁移,如下:
alter table t1 enable row movement;
闪回查询确认数据:
select * from t1 as of scn 1078236;
闪回表到指定 scn:
flashback table t1 to scn 1078236;
闪回表到指定时间:
flashback table t1 to timestamp to_timestamp('2024-06-21 10:10:10', 'yyyy-mm-dd hh24:mi:ss');
关闭表迁移
alter table t1 disable row movement;
2. 闪回事务
# 开启 supplemental log alter database add supplemental log data; # 设置主键的附加日志数据 alter database add supplemental log data (primary key) columns; # 找到事务号,比如:14000A0072010000 select distinct xid,commit_scn from flashback_transaction_query where table_owner='HR' and table_name='EMPLOYEES' and commit_timestamp > systimestamp - interval '10' minute order by commit_scn; # 闪回事务 declare xids sys.xid_array; begin xids := sys.xid_array('14000A0072010000'); dbms_flashback.transaction_backout(1,xids,options=>dbms_flashback.cascade); end;
3. 闪回数据库
闪回数据库需要设置闪回区,开启归档模式。
# 设置闪回区 conn / as sysdba show parameter recover alter system set db_recovery_file_dest_size=4G; alter system set db_recovery_file_dest='/dest/recovery_area'; # 查看归档模式 archive log list; # 开启归档 conn / as sysdba shutdown immediate startup mount alter database archivelog; alter database open; # 验证是否开启了闪回 conn / as sysdba select flashback_on from v$database; #开启闪回 alter database flashback on; # 闪回日志保留2天数据 alter system set db_flashback_retention_target=2880; show parameter retention_target;
此时业务误操作,删除了表数据。
闪回数据库:
# 关闭数据库 shutdown immediate startup mount flashback database to scn 1065864; # 或者按时间闪回 flashback database to timestamp to_timestamp('2024-06-21 10:10:10', 'yyyy-mm-dd hh24:mi:ss');
文章评论
共0条评论