您的位置:首页 > 数据库 > Oracle

oracle按时间点还原数据

2013-04-16 21:57 99 查看
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; 数据恢复出来了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 时间 还原数据