1、数据库处于归档模式
查看命令SQL> archive log line
2、备份数据库中的所有数据文件
声明数据库备份SQL> alter database begin backup;
创建一目录 mkdir /home/oracle/db_bak2
拷贝所有的.dbf文件cp /oracle/app/oradata/TEST/*.dbf /home/oracle/db_bak2/
结束备份状态alter database end backup;
3、模拟丢失数据, 删掉数据库中的abc表SQL> drop table abc;
4、使用日志挖掘技术,确定误删除表的时间
1、创建一个目录(放置提取出的文件)[oracle@sql1 ~]$ mkdir logminer
2、指定存储目录
SQL>alter system set utl_file_dir='/home/oracle/logminer' scope=spfile;
3、建立日志挖掘的数据字典
SQL>execute dbms_logmnr_d.build('shwdict.ora','/home/oracle/logminer');
4、创建分析的文件列表(可以使归档日志或日志文件)
SQL> execute dbms_logmnr.add_logfile('/oracle/app/oradata/TEST/redo01.log',dbms_logmnr.new);
SQL> execute dbms_logmnr.add_logfile('/oracle/app/oradata/TEST/redo02.log',dbms_logmnr.new);
SQL> execute dbms_logmnr.add_logfile('/oracle/app/oradata/TEST/redo03.log',dbms_logmnr.new);
5、开始挖掘数据
SQL> exec dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/logminer/shwdict.ora');
6、设置回话的时间格式
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
7、查看分析内容
SQL> select scn, timestamp, sql_redo from v$logmnr_contents where sql_redo like'%drop%';
SCN TIMESTAMP SQL_REDO
798149 ------ 2013-04-16 20:47:08 ----- drop table abc -----
8、结束分析
SQL>execute dbms_logmnr.end_logmnr;
5、数据恢复
1、关闭数据库进入mount模式
SQL> shutdown immediate
SQL> startup mount
2、还原所有的数据文件
[oracle@sql1 ~]$ cp db_bak2/*.dbf /oracle/app/oradata/TEST/
3、设置会话的时间格式
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
4、恢复数据库到时间点
SQL> recover database until time '2013-04-16 20:47:08';
5、重置日志打开数据库
SQL> alter database open resetlogs;
6、查看数据是否恢复
SQL> select count(*) from abc;数据恢复出来了