龙空技术网

生产库删除数据后怎样执行对应的undo sql来恢复数据?

波波说运维 199

前言:

现时大家对“oracle闪回恢复区undo”大概比较看重,同学们都需要学习一些“oracle闪回恢复区undo”的相关资讯。那么小编同时在网络上搜集了一些有关“oracle闪回恢复区undo””的相关资讯,希望兄弟们能喜欢,兄弟们一起来学习一下吧!

概述

Oracle11g 闪回事务查询就是对过去某段时间内所完成的事务的查询和撤销,通过闪回事物分析,可以识别在一个特定的时间段内所发生的所有变化,也可以对数据库表进行事物级恢复。 前面提到可以审计一个事务到底做了什么,现在可以获得事务的历史操作进行撤销。

flashback transaction操作过程:

1、查询某段时间内的操作发生情况:

select id,name,versions _operation,versions_xid,versions_starttime from testversions between timestamp minvalue and maxvalue order by id;

2、 根据 XID 对 flashback _transaction_query 进行查询

select table _name,table_owner,undo_sql from flashback_transaction_query wherexid=‘„’

3、运行上面找出的 sql 语句,即可将以前删除的数据恢复回来。

Flashback Transaction Query 也是使用 UNDO 信息来实现。利用这个功能可以查看某个事务执行的所有变化,它需要访问 flashback _transaction_query 视图,这个视图的 XID 列代表事务 ID,利用这个 ID 可以区分特定事务发生的所有数据变化。

实例演示:

先开启附加日志

SQL> create table B(id int);Table created.SQL> insert into B values(1);1 row created.SQL> insert into B values(2);1 row created.SQL> insert into B values(3);1 row created.

查看视图,每个事务都对应相同的XID

SQL>select xid,operation,commit_scn,undo_sql from flashback_transaction_query where xid in (Select versions_xid from B versions between scn minvalue and maxvalue);

删除数据:

SQL> delete from B where id=3;1 row deleted.SQL> commit;Commit complete.

再次查看视图,每个事务都对应相同的XID

SQL>select xid,operation,commit_scn,undo_sql from flashback_transaction_query where xid in (Select versions_xid from scott.B versions between scn minvalue and maxvalue);

闪回事务查询可以将同一事务的所有撤销SQL列出,这是闪回查询做不到的,如有必要,管理员还能够执行对应一个事务的部分撤销SQL以一种破坏事务原子性的方式恢复一部分数据,如此行事正确与否完全取决于应用的逻辑。

后面会分享更多flashback方面的内容,感兴趣的朋友可以关注下!

标签: #oracle闪回恢复区undo