您的位置:首页 > 其它

闪回查询&闪回版本查询&闪回表&闪回事务处理

2013-11-16 20:04 211 查看
一、闪回查询

语法
:select ... from table_name as of timestamp|scn <t1> where ...

eg:

update employees

set salary =

(select salary from employees

as of timestamp to_timestamp('2013-11-08 12:00:00','yyyy-mm-dd hh24:mi:ss')

where employee_id = 330)

where employee_id = 330;

二、闪回版本查询

语法:select versions_xid,... from table_name

versions between timestamp|scn <t1> and <t2>

where employee_id = 330;

注:·versions_xid 是返回相应行版本的事物处理标识符伪列。

·不能使用versions字句查询:外部表、临时表、固定表、视图

·versions字句不能跨DDL命令使用

·段收缩操作的幻想版本会过滤掉(因为行数据保持不变)

三、闪回表

1、闪回表的条件


·要具有对特定表的FLASHBACK ANY TABLE或FLASHBACK对象权限

·要对闪回的表具有SELECT、INSERT、DELETE和ALTER权限

·必须对要执行闪回操作的表启动行迁移

2、示例

alter table employees_test ename row movement;

FLASHBACK TABLE employees_test TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' minute);

3、注意

·flashback table命令作为单个事物处理执行,要求获得DML排它锁

·不闪回统计信息

·保留当前索引和从属对象

·闪回表操作:不对系统表执行、不能跨DDL操作、会生成还原和重做数据

·不能违反任何表约束条件

三、闪回事物处理查询

闪回事物处理查询是一种用于查看在事务处理级别对数据库所做更改的诊断工具。这样,可以诊断数据库中的问题并对事物处理执行分析和审计。

可以使用FLASHBACK_TRANSACTON_QUERY视图来确认所有必要的SQL语句,以便用来还原由特定事物处理所做的或在特定时间段内所做的修改。

注意: ·DDL被视为字典更新

·通过执行DDL命令对事物处理执行闪回事物处理查询时,会显示对数据字典所做的更改

·删除的对象显示为对象编号,删除的用户显示为用户标识符

·当特定的事务处理没有足够的还原数据时,在FLASHBACK_TRANSACTON_QUERY的OPERATION列中会返回值为UNKNOW的行。

四、闪回事务处理

1、先决条件(必须启用补充日志记录功能并建立正确权限,以hr用户为例):


·alter database add supplemental log data;

·alter database add supplemental log data (primary key) columns;

·grant execute on dbms_flashback to hr;

·grant select any transaction to hr;

2、可能的工作流程

<1>查看表中的数据

<2>发现逻辑问题

<3>使用闪回事务处理

·执行查询

·选择事务处理

·闪回事务处理(如果没有冲突)

·选择其它回退选项(如果存在冲突)

<4>查看闪回事务处理结果

3、使用DBMS_FLASHBACK.TRANSACTION_BACKOUT

CREATE TYPE XID_ARRAY AS ARRAY(100) OF RAW(8);

CREATE OR REPLACE REOCEDURE TRANSACTION_BACKOUT(

numberofxids number,--number of transactions passed as input

xids xid_array,--the list of transaction ids

options number default nocascade,--back out dependent

txn timehint timestamp default mintime--time hint on the txn start

)

TRANSACTION_BACKOUT过程会检查依赖关系:

·连续编写(WAW)

·主约束条件和唯一约束条件

·外键约束条件

事务处理可以具有WAW依赖关系,这意味着事务处理将更新或删除由从属事务处理插入或更新的行

例如,在主(或唯一)约束条件和强制外键约束条件的主/从关系中会发生这种情况。要了解NONCONFLICT_ONLY 和NOCASCADE_FORCE选项之间的差异,

可以假定T1事务处理更改了行R1、R2和R3,T2事务处理更改了行R1和R4。在此方案中,因为两个事务处理都更新了R1行,因此R1行成了“冲突”行。T2事务

处理与T1事务处理具有WAW 依赖关系。使用NONCONFLICT_ONLY 选项,可回退R2和R3,因为R2和R3不存在冲突并且假定您知道处理R1行的方法。

使用NOCASCADE_FORCE选项,可回退全部三个行(R1、R2和R3)。

如果带有NOCASCADE 选项的DBMS_FLASHBACK.TRANSACTION_BACKOUT 过程失败(因为存在从属事务处理),则可以更改恢复选项

·使用“Nonconflict Only(仅限无冲突)”选项,可回退事务处理中的非冲突行,从而保持了数据库的一致性(虽然为了修复数据而破坏了事务处理的原子性)。

·如果希望不考虑从属事务处理而强制回退给定的事务处理,请使用“Nocascade Force(强制无级联)”选项。服务器按照与提交时间相反的顺序仅对给定事务

处理执行校正DML 命令。如果没有违反约束条件,您可以继续提交更改,否则会回退。

·要按投寄顺序完全删除给定事务处理及其所有从属事务处理,请使用“Cascade(级联)”选项

4、选择回退选项后,会在DBA_FLASHBACK_TXN_STATE和DBA_FLASHBACK_TXN_PEPORT视图中生成相关报告

·检查显示了已回退的所有事务处理的相关性报告

·提交更改使其成为永久更改

·回退以放弃更改
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: