设为首页 加入收藏

TOP

使用Flashback Transaction方法来恢复数据表数据(二)
2015-11-10 12:17:41 来源: 作者: 【 】 浏览:16
Tags:使用 Flashback Transaction 方法 恢复 数据
plete


SQL> update test.emp set comm=1000 where empno=60;


1 row updated


SQL> commit;


Commit complete


操作之后,数据库时间点如下:


SQL> select dbms_flashback.get_system_change_number from dual;


GET_SYSTEM_CHANGE_NUMBER


------------------------


? ? ? ? ? ? ? ? 1795891


数据肯定发生了变化,现在实验目标是将数据恢复回去,恢复到SCN=1795785时间点Emp数据表的状态。


3、数据恢复实验


首先,需要创建一个数据表changed_tables,记录下从Log Miner中抽取出的与数据表EMP相关的事务信息。


SQL> create table changed_tables (table_name varchar2(256), xid raw(8), scn number);


Table created


SQL> desc changed_tables;


Name? ? ? Type? ? ? ? ? Nullable Default Comments?


---------- ------------- -------- ------- --------?


TABLE_NAME VARCHAR2(256) Y? ? ? ? ? ? ? ? ? ? ? ? ?


XID? ? ? ? RAW(8)? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ? ?


SCN? ? ? ? NUMBER? ? ? ? Y? ? ? ? ? ? ? ? ? ? ? ? ?


创建一个Stored Procedure,用于从Log Miner视图中将相关事务操作保存在changed_tables中。


SQL> CREATE OR REPLACE PROCEDURE extract_txn_ids (lcrscn IN NUMBER, escn in number) AS


? 2? lname VARCHAR2(256);


? 3? vsql varchar2(2000);


? 4? BEGIN


? 5? ? ? dbms_logmnr.start_logmnr(startscn => lcrscn,


? 6? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? endscn => escn,


? 7? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG+DBMS_LOGMNR.CONTINUOUS_MINE);


? 8? ? ? insert into changed_tables


? 9? ? ? ? ? ? select distinct seg_name,xid,scn


?10? ? ? ? ? ? ? from v$logmnr_contents where seg_owner = 'TEST'


?11? ? ? ? ? ? ? ? ? ? and scn >= lcrscn


?12? ? ? ? ? ? ? ? ? ? and scn<= escn;


?13? ? ? commit;


?14? END;


?15? /


Procedure created


执行存储过程,输入起始和截止操作的SCN时间点。


SQL> exec extract_txn_ids(1795785,1795891);


PL/SQL procedure successfully completed


获取到的数据结果。


SQL> select * from changed_tables;


TABLE_NAME XID? ? ? ? ? ? ? ? ? ? SCN


---------- ---------------- ----------


EMP? ? ? ? 0200150064070000? ? 1795812


EMP? ? ? ? 06000D00E3050000? ? 1795883


EMP? ? ? ? 04000D00BC040000? ? 1795877


EMP? ? ? ? 0200150064070000? ? 1795827


EMP? ? ? ? 0200150064070000? ? 1795844


EMP? ? ? ? 0200150064070000? ? 1795835


6 rows selected


创建第二个存储过程,逐事务调用dbms_flashback.transaction_backout方法。


SQL> create or replace procedure txn_backout(sscn in number)


? 2? as


? 3? ? txn_array sys.xid_array := sys.xid_array();


? 4? ? i number;


? 5? begin


? 6? ? ? ? i := 1;


? 7? ? ? ? --initialize xid_array from changed_tables


? 8?


? 9? ? ? ? for txn in (select distinct xid from changed_tables)


?10? ? ? ? loop


?11? ? ? ? ? txn_array.extend;


?12? ? ? ? ? txn_array(i) := txn.xid;


?13? ? ? ? ? i := i + 1;


?14? ? ? ? end loop;


?15? ? ? ? i := i - 1;


?16? ? ? ? -- 3 input variables are passed to transaction_backout


?17? ? ? ? -- i number of txns


?18? ? ? ? -- txn_array array of txn ids


?19? ? ? ? -- sscn starting point to logminer


?20?


?21? ? ? ? dbms_flashback.transaction_backout (


?22? ? ? ? ? ? ? numtxns => i,


?23? ? ? ? ? ? ? xids => txn_array,


?24? ? ? ? ? ? ? options => dbms_flashback.cascade,


?25? ? ? ? ? ? ? scnhint => sscn


?26? ? ? ? ? ? );


?27?


?28? ? ? ? --issue commit as dbms_flashback.transaction_backout does not include commit and ----txn backout.


?29? ? ? ? ? commit;


?30? END;


?31? /


Procedure created


执行过程程序。


SQL> exec txn_backout(sscn => 1795785);


begin txn_backout(sscn => 1795785); end;


ORA-55510: ?? 无法启动挖掘


ORA-06512: ?? "SYS.DBMS_FLASHBACK", line 37


ORA-06512: ?? "SYS.DBMS_FLASHBACK", line 70


ORA-06512: ?? "SYS.TXN_BACKOUT", line 21


ORA-06512: ?? line 1


遇到了错误信息,检查错误代码。


[oracle@NCR-Standby-Asm ~]$ oerr ora 55510


55510, 0000, "Mining could not start"


// *Cause: Mining could not start for the following reasons.


//? ? ? ? 1. A logminer session was processing


//? ? ? ? 2. The database was not mounted or not opened for read and write


//? ? ? ? 3. Minimum supplemental logging was not enabled


//? ? ? ? 4. Archiving was not enabled


// *Action: F

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇从Export DMP文件看导出字符集 下一篇使用dbms_flashback工具包实现闪..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: