深蓝的天空下,有你有我...
共享酸、甜、苦、辣
posts - 23,comments - 19,trackbacks - 0
--创建一个表来保存提取出来的sql create table logmnr_content tablespace tools as scn,cscn,TIMESTAMP,sql_undo from v$logmnr_contents where 1=0; --通过dba_objects 查到表对应的 object_id and data_object_id ,用来在log中提取该表相关的sql_undo select object_id,data_object_id from dba_objects where object_name = ??? --通过在os中找到的归档日志范围,进行联机提取 将undo sql 插入一个表中,比如我的日志序号范围是 5813 到 5850 为了防止临时空间不足,一个一个归档日志文件处理。 begin for i in 5813..5850 loop dbms_logmnr.add_logfile(LogFileName=>'/disk2/oradata/arch/crmcn/crmcn_1_'||i||'.arc'); dbms_logmnr.start_logmnr(Options => sys.dbms_logmnr.DICT_FROM_ONLINE_CATALOG); dbms_logmnr.start_logmnr(); insert into logmnr_content(scn,cscn,TIMESTAMP,sql_undo ) select scn,cscn,TIMESTAMP,sql_undo from v$logmnr_contents where DATA_OBJD# = 67540 ; commit; dbms_logmnr.end_logmnr(); end loop; end; --将提取出来的sql通过动态sql执行插入表 declare sql_str varchar2(4000); begin for c in (select * from logmnr_content) loop sql_str := replace(c.sql_undo,';',''); execute immediate sql_str; end loop; commit; end; 注意:如果在这段日志中还有其他对该表的操作的话,可以结合操作类型 OPERATION 和 提交scn cscn 来判断 到底是不是该恢复的这部分数据。 转自:http://www.itpub.net/thread-324926-1-1.html
posted on 2011-06-19 02:11 三刀流の逆风 阅读(305) 评论(0)  编辑  收藏 所属分类: Oracle

只有注册用户登录后才能发表评论。


网站导航: