编写背景:
近日调试存储过程,就未与同事商量先truncate了表,事后得知表中另一个部门插入的数据全没了,为了想法找回数据,
特测试了logminer的用法
1,logminer可否用于恢复trucate table前的数据
2,truncate table没有备份
3,oracle11g,非归档模式
近日调试存储过程,就未与同事商量先truncate了表,事后得知表中另一个部门插入的数据全没了,为了想法找回数据,
特测试了logminer的用法
1,logminer可否用于恢复trucate table前的数据
2,truncate table没有备份
3,oracle11g,非归档模式
测试纪要
--1,在scott用户下建立测试表
create table t_truncate_before(a int);
insert into t_truncate_before values(1);
insert into t_truncate_before values(2);
commit;
select * from t_truncate_before;--查询是有1,2两条记录
--2,查询当前日志,用于确定分析的日志
select * from v$log;--3
select * from v$logfile;--D:\ORACLE\ORADATA\ORCL\REDO03.LOG
--1,在scott用户下建立测试表
create table t_truncate_before(a int);
insert into t_truncate_before values(1);
insert into t_truncate_before values(2);
commit;
select * from t_truncate_before;--查询是有1,2两条记录
--2,查询当前日志,用于确定分析的日志
select * from v$log;--3
select * from v$logfile;--D:\ORACLE\ORADATA\ORCL\REDO03.LOG
--3,用logminer开始分析日志
alter system set utl_file_dir='c:\logminer' scope=spfile;--配置用于存储logminer的目录,并重启库
shutdown immediate;
startup;
--4,开始分析
SQL> execute dbms_logmnr_d.build('logminer.ora','c:\logminer');
PL/SQL procedure successfully completed
SQL> execute dbms_logmnr.add_logfile('D:\ORACLE\ORADATA\ORCL\REDO01.LOG',dbms_logmnr.NEW);
PL/SQL procedure successfully completed
SQL> execute dbms_logmnr.add_logfile('D:\ORACLE\ORADATA\ORCL\REDO02.LOG',dbms_logmnr.ADDFILE);
PL/SQL procedure successfully completed
SQL> execute dbms_logmnr.add_logfile('D:\ORACLE\ORADATA\ORCL\REDO03.LOG',dbms_logmnr.ADDFILE);
PL/SQL procedure successfully completed
alter system set utl_file_dir='c:\logminer' scope=spfile;--配置用于存储logminer的目录,并重启库
shutdown immediate;
startup;
--4,开始分析
SQL> execute dbms_logmnr_d.build('logminer.ora','c:\logminer');
PL/SQL procedure successfully completed
SQL> execute dbms_logmnr.add_logfile('D:\ORACLE\ORADATA\ORCL\REDO01.LOG',dbms_logmnr.NEW);
PL/SQL procedure successfully completed
SQL> execute dbms_logmnr.add_logfile('D:\ORACLE\ORADATA\ORCL\REDO02.LOG',dbms_logmnr.ADDFILE);
PL/SQL procedure successfully completed
SQL> execute dbms_logmnr.add_logfile('D:\ORACLE\ORADATA\ORCL\REDO03.LOG',dbms_logmnr.ADDFILE);
PL/SQL procedure successfully completed
--5,执行分析
SQL> execute dbms_logmnr.start_logmnr(DictFileName => 'c:\logminer\logminer.ora');
PL/SQL procedure successfully completed
SQL> execute dbms_logmnr.start_logmnr(DictFileName => 'c:\logminer\logminer.ora');
PL/SQL procedure successfully completed
/*
SQL> execute dbms_logmnr.start_logmnr(0,100,to_date('2012-9-28 00:00:00','yyyy-mm-dd hh24:mi:ss'),to_date('2012-9-28 15:52:00','yyyy-mm-dd hh24:mi:ss'),'c:\logminer\logminer.ora');
begin dbms_logmnr.start_logmnr(0,100,to_date('2012-9-28 00:00:00','yyyy-mm-dd hh24:mi:ss'),to_date('2012-9-28 15:52:00','yyyy-mm-dd hh24:mi:ss'),'c:\logminer\logminer.ora'); end;
ORA-01291: 缺失日志文件
ORA-06512: 在 "SYS.DBMS_LOGMNR", line 58
ORA-06512: 在 line 2
*/
SQL> execute dbms_logmnr.start_logmnr(0,100,to_date('2012-9-28 00:00:00','yyyy-mm-dd hh24:mi:ss'),to_date('2012-9-28 15:52:00','yyyy-mm-dd hh24:mi:ss'),'c:\logminer\logminer.ora');
begin dbms_logmnr.start_logmnr(0,100,to_date('2012-9-28 00:00:00','yyyy-mm-dd hh24:mi:ss'),to_date('2012-9-28 15:52:00','yyyy-mm-dd hh24:mi:ss'),'c:\logminer\logminer.ora'); end;
ORA-01291: 缺失日志文件
ORA-06512: 在 "SYS.DBMS_LOGMNR", line 58
ORA-06512: 在 line 2
*/
--6,查询分析结果
--在plsql developer中sql窗口与命令窗口不同,必须同一个窗口运行,如下视图才会有结果
select * from v$logmnr_contents;-- ORA-01306: 在从 v$logmnr_contents 中选择之前必须调用 dbms_logmnr.start_logmnr()
select * from v$logmnr_logfile
select * from v$logmnr_transaction
--在plsql developer中sql窗口与命令窗口不同,必须同一个窗口运行,如下视图才会有结果
select * from v$logmnr_contents;-- ORA-01306: 在从 v$logmnr_contents 中选择之前必须调用 dbms_logmnr.start_logmnr()
select * from v$logmnr_logfile
select * from v$logmnr_transaction
--7,小结
1,非归档也可恢复表的truncate之前数据
2,再次说明沟通的重要性,尤其对于多部门协作的项目
3,调试存储过程前一定要备份表或预先与相关人员沟通,减少误操作
1,非归档也可恢复表的truncate之前数据
2,再次说明沟通的重要性,尤其对于多部门协作的项目
3,调试存储过程前一定要备份表或预先与相关人员沟通,减少误操作
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9240380/viewspace-745386/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9240380/viewspace-745386/