利用logminer,恢复delete误删除操作的数据
2013-09-07 21:08
381 查看
使用DBA账户操作
1.打开追加日志
SQL>alter database add supplemental log data;
SQL>select supplemental_log_data_min from v$database;
SUPPLEME
--------
YES
A
----------
1
2
3
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
3640931
SQL> delete test;
3 rows deleted
SQL> commit;
Commit complete
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
3640943
SQL> select * from test;
A
----------
3.查询当前REDO日志文件,执行logmnr包
SQL> select group#,status from v$log;
GROUP# STATUS
---------- ----------------
4 INACTIVE
5 INACTIVE
6 CURRENT
SQL> select group#,member from v$logfile where group#=6;
GROUP# MEMBER
---------- --------------------------------------------------------------------------------
6 F:\REDO\REDO03A.LOG
SQL> exec dbms_logmnr.add_logfile(LogFileName => 'F:\REDO\REDO03A.LOG', Options => dbms_logmnr.new);
PL/SQL procedure successfully completed
SQL> exec dbms_logmnr.start_logmnr(Options =>dbms_logmnr.dict_from_online_catalog,startscn => 3640931,endScn =>3640943);
PL/SQL procedure successfully completed
SQL> col sql_undo for a50;
SQL> col sql_redo for a50;
SQL> set pagesize 1000
SQL> select operation,sql_redo,sql_undo from v$logmnr_contents;
OPERATION SQL_REDO SQL_UNDO
-------------------------------- -------------------------------------------------- --------------------------------------------------
START set transaction read write;
DELETE delete from "BYS"."TEST" where "A" = '1' and ROWID insert into "BYS"."TEST"("A") values ('1');
= 'AAASA9AAEAAAAEDAAA';
DELETE delete from "BYS"."TEST" where "A" = '2' and ROWID insert into "BYS"."TEST"("A") values ('2');
= 'AAASA9AAEAAAAEDAAB';
DELETE delete from "BYS"."TEST" where "A" = '3' and ROWID insert into "BYS"."TEST"("A") values ('3');
= 'AAASA9AAEAAAAEDAAC';
COMMIT commit;
SQL> insert into bys.test values('1');
1 row inserted
SQL> insert into bys.test values('2');
1 row inserted
SQL> insert into bys.test values('3');
1 row inserted
SQL> commit;
Commit complete
SQL> select * from test;
A
----------
1
2
3
1.打开追加日志
SQL>alter database add supplemental log data;SQL>select supplemental_log_data_min from v$database;
SUPPLEME
--------
YES
2.记录DML操作前后的SCN
SQL> select * from test;A
----------
1
2
3
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
3640931
SQL> delete test;
3 rows deleted
SQL> commit;
Commit complete
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
3640943
SQL> select * from test;
A
----------
3.查询当前REDO日志文件,执行logmnr包
SQL> select group#,status from v$log;GROUP# STATUS
---------- ----------------
4 INACTIVE
5 INACTIVE
6 CURRENT
SQL> select group#,member from v$logfile where group#=6;
GROUP# MEMBER
---------- --------------------------------------------------------------------------------
6 F:\REDO\REDO03A.LOG
SQL> exec dbms_logmnr.add_logfile(LogFileName => 'F:\REDO\REDO03A.LOG', Options => dbms_logmnr.new);
PL/SQL procedure successfully completed
SQL> exec dbms_logmnr.start_logmnr(Options =>dbms_logmnr.dict_from_online_catalog,startscn => 3640931,endScn =>3640943);
PL/SQL procedure successfully completed
SQL> col sql_undo for a50;
SQL> col sql_redo for a50;
SQL> set pagesize 1000
SQL> select operation,sql_redo,sql_undo from v$logmnr_contents;
OPERATION SQL_REDO SQL_UNDO
-------------------------------- -------------------------------------------------- --------------------------------------------------
START set transaction read write;
DELETE delete from "BYS"."TEST" where "A" = '1' and ROWID insert into "BYS"."TEST"("A") values ('1');
= 'AAASA9AAEAAAAEDAAA';
DELETE delete from "BYS"."TEST" where "A" = '2' and ROWID insert into "BYS"."TEST"("A") values ('2');
= 'AAASA9AAEAAAAEDAAB';
DELETE delete from "BYS"."TEST" where "A" = '3' and ROWID insert into "BYS"."TEST"("A") values ('3');
= 'AAASA9AAEAAAAEDAAC';
COMMIT commit;
4.使用查出的UNDO SQL恢复误删除的SQL
这里根据UNDO_SQL中语句,把删除的三条数据 TEST表A列VALUES为1和2和3的行进行恢复。SQL> insert into bys.test values('1');
1 row inserted
SQL> insert into bys.test values('2');
1 row inserted
SQL> insert into bys.test values('3');
1 row inserted
SQL> commit;
Commit complete
SQL> select * from test;
A
----------
1
2
3
相关文章推荐
- 利用logminer恢复delete误删除操作的数据
- 利用logminer恢复delete误删除操作的数据
- 利用事务日志来恢复Update、Delete误操作引起的数据丢
- 利用事务日志来恢复Update、Delete误操作引起的数据丢
- 利用事务日志来恢复update、delete误操作引起的数据丢
- 利用闪回功能恢复删除(drop,delete)的数据和表及数据,update之后数据恢复
- MySQL【Delete误操作】数据恢复【转】
- 【转载】linux中误删除oracle数据文件的恢复操作
- oracle数据文件被误操作删除了恢复方法
- [转]利用Log Explorer将你已经delete,truncate,drop过的数据进行恢复
- 恢复delete操作后的数据
- 利用Oracle闪回技术恢复误操作数据
- 如何防止数据恢复及内存硬盘空间信息的利用造成损失(工具链:secure-delete)
- 项目经验之:利用Jquery+HTML静态模版实现数据的展示及无刷新增加,修改,删除,分页操作!!!
- SQL Server利用数据库日志恢复数据到时间点的操作
- 利用Log Explor来恢复误用delete 、update了的数据
- Oracle数据库利用日志挖掘来恢复误删除的数据
- 利用数据库日志恢复数据到时间点的操作(总结)
- Linux下ORACLE误删除数据文件恢复操作
- Mysql7之binlog日志说明及利用binlog日志恢复数据操作记录