闪回操作

 

Flashback query

9I2开始可以在查询中使用as of 子句检索在给定时间戳或SCN时表的状态。

EGinsert into hr.employees_archive select * from hr.employees as of

timestamp systimestamp – interval ‘60’ minute

where hr.employees.employee_id not in (select employee_id from hr.employee);

这种称为“不合适恢复”(换句话说,将表或表的子集恢复到不同于初始位置的另一个位置)。这种方法的优点是能够根据需要进一步操作遗漏的行。使用CTAS进行不合适恢复的缺点是,不会自动重新构建约束和索引。

DBMS_FLASHBACK

实现FLASHBACK Query的另一种方法是使用程序包DBMS_FLASHBACKDBMS_FLASHBACK程序包与FLASHBACK Query关键区别是 它在会话级别进行操作。而Query在对象级上操作。虽然在启用DBMS_FLASHBACK时不允许DML,但可以在启用它之前打开游标,从而允许将前一个时间点的数据插入或更新到当前时间点的库中。

     过程                     说明

DISABLE                             禁用该会话的闪回模式

ENABLE_AT_SYSTEM_CHANGE_NUMBER  启用该会话闪回模式,指定SCN

ENABLE_AT_TIME                                               -------------,使用最近于指定TimestampSCN

GET_SYTESM_CHANGE_NUMBER         返回当前SCN

SCN_TO_TIMESTAMP                  

TIMESTAMP_TO_SCN                                       返回最近于TIMESTAMPT值的SCN

 

DBMS_FLASHBACK恢复数据

Exec dbms_flashback.enable_at_time(to_timestamp(sysdate – interval ‘20’ minute));

Select * from hr.employees  --查看20分前操作的表数据

Eg:

Declare cursor del_emp is select * from hr.employees where employee_id in(195,196);

Del_emp_rec del_emp%rowtype;

Begin

  Open del_emp;

  Dbms_flashback.disable;

  Loop

    Fetch del_emp into del_emp_rec;

    Exit when del_emp%notfound;

    Insert into hr.employees values del_emp_rec;

  End loop;

Commit;

Close del_emp;

End

 

Flashback table

Flashback table特性不仅能恢复表中进行在过去某时间点状态,而且也能恢复表的索引、触发器和约束,同时数据库保持联机,增加数据的可用性。Flashback table不可以用于备用数据库上,并且不可以重新构造所有的DDL操作。

Flash table table hr.employees to timestamp systimestamp – interval ‘20’ minute;

Flashback version query

Flashback version query 使用Versions between子句来为表分析指定SCN或时间戳的范围。当Versions between用于Flashback version query中时,大量伪列可用于帮助标识所做修改的SCN和时间戳,以及事务ID和在行上执行的操作类型。

伪列                                                   说明

 Versions_start{SCN|TIME}    在对行改动时的开始SCN或时间戳

 Version_end{SCN|TIME}        --------,如果这是NULL,则行版本仍为当前版本或已经删除了列

 Versions_xID             创建行版本的事务的事务ID

 Versions_operation        在行上执行的操作 I(插) D(删) U(改)

 

EGselect versions_startscn,versions_endscn,versions_xid,versions_operation,

          Employee_ID,last_name,manager_ID,salary from hr.employees

          Versions between scn 16733 and 16788

                     Where employee_ID in(156,157)

Flashback Transaction query

    

 列名

说明

XID  

事务ID

START_SCN

事务中第一个DMLSCN

Start_Timestamp  

事务中第一个DML的时间戳

Commit_Scn   

提交事务的SCN

Logon_User    

拥有事务的用户

Undo_Change#

撤销SCN

Operation

执行的操作

 

EG:   select start_scn,commit_scn,login_user,operation,table_name,undo_sql

      From flashback_transaction_query where xid=hextoraw(‘04000f00980300’);

 

你可能感兴趣的:(闪回操作)