|
利用日志挖掘 Oracle 不完全恢复 恢复误删除的表/数据/视图等
1./* --------------------------
2.前题:
3. 1. DB工作在归档模式下;
4. 2. 有冷准备份的数据文件;
5.---------------------------*/
1.col script for a80
2.col SQL_REDO for a80 3.
4.-- 拼接从哪里挖的语句 5.select 'exec dbms_logmnr.add_logfile('''||member||''')' as script from v$logfile; 6.
7.-- 从哪里挖 8.exec dbms_logmnr.add_logfile('/Oracle/oradata/orcl_new/redo03.log'); 9.exec dbms_logmnr.add_logfile('/Oracle/oradata/orcl_new/redo02.log'); 10.exec dbms_logmnr.add_logfile('/Oracle/oradata/orcl_new/redo01.log'); 11.
12.
13.-- 开始挖 14.exec dbms_logmnr.start_logmnr; 15.
16.-- 找结果 --> 要恢复的语句时的时间戳; 17.select scn, sql_redo from v$logmnr_contents where sql_redo like 'drop table emp%'; 18.
19. SCN SQL_REDO
20.---------- -------------------------------------------------------------------------------- 21. 1036547 drop table t1 purge; 22. 1037333 drop table scott.emp purge; 23.-- 1037333 -->要恢复的时间戳 24.
25.-- 关掉DB 26.shutdown abort
27.
28.-- 拷贝冷备的文件 -- *.dbf 到数据文件目录下,并进行覆盖;,因为要利用日志把 sys,user等表空间的数据,重做一次; 29.[Oracle@OracleWeblogic orcl_new_bk]$ cp *.dbf ../orcl_new/
30.
31.-- 启动到 mount 下; 32.startup mount
33.
34.-- 恢复到 1037333 drop table scott.emp purge 的时间点; 35.-- 要求:trc 36.recover database until change 1035742; 37.
38.-- 启动DB in resetlogs; 39.alter database open resetlogs; 40.
41.
42.原理
43.1.冷备份的数据文件 *.dbf比现在要旧,那么数据文件的scn肯定就比现在的小;
44.2.使用日志挖掘方法,在日志中找出删表时的scn;
45.3.在数据库shutdown 的状态下,用冷备份的数据文件 *.dbf,覆盖现在的*.dbf文件;-- 保证数据文件完整性 46.4.启动DB到 mount 下, 恢复到日志挖掘的时间点(利用日志对数据文件重做一次)
47.5.以 resetlog 方式 open --- 以前的日志就覆盖了; 48.
49.PS:数据库有四种状态shutdown、nomount、mount、open 50.shutdown是指关闭状态
51.nomount是指根参数文件已经构造出实例的状态
52.mount是指为实例打开控制文件,并读出控制文件中相关信息,但并不验证
53.open是指对相关文件进行验证,如没有问题,就打开,让用户可以访问
本文出自:亿恩科技【www.enkj.com】
服务器租用/服务器托管中国五强!虚拟主机域名注册顶级提供商!15年品质保障!--亿恩科技[ENKJ.COM]
|