注意:
使用logminer查询表v$logmnr_contents必须在同一个会话中进行,因为分析的那些
信息存储在这个session 的PGA中,在别的session 里面是查不到的。
视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个
会话的生命期中存在。这是因为所有的LogMiner存储都在PGA内存中,所有其他的进程是看
不到它的,同时随着进程的结束,分析结果也随之消失。 最后,使用过程DBMS_LOGMNR.END_LOGMNR
终止日志分析事务,此时PGA内存区域被清除,分析结果也随之不再存在。
----------------------------------------------------------------------------------------
0, 安装LogMiner工具,以下两个脚本以SYSDBA身份运行
SQL>@?/rdbms/admin/dbmslm.sql
dbmslm.sql是用来创建DBMS_LOGMNR的package,这个包是用来分析日志的
SQL>@?/rdbms/admin/dbmslmd.sql
dbmslmd.sql是用来创建DBMS_LOGMNR_D的package的,这个包是用来创建数据字典文件的
1、备份原表
create table dfms.aab_bak as SELECT * from dfms.aab ;
2. 建同樣架構新表,準備將恢復的數據導入
create table dfms.aac ;
3. 设定UTL_FILE_DIR参数来指定数据字典文件的位置目录
alter system set UTL_FILE_DIR='/u01/logmnr' scope=spfile;
关闭数据库,并开启使之生效。
SQL> show parameter utl_file
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir string /u01/logmnr
4. 以sysdba权限登入,生成數據字典
exec dbms_logmnr_d.build('dictionary.ora','/u01/logmnr');
我们可以看到在/u01/logmnr目录下生成了一个文件。
lhtestdb01$ls -al
total 26060
drwxr-xr-x 2 oracle dba 4096 Jun 23 15:10 .
drwxrwxr-x 6 oracle dba 4096 Jun 23 15:03 ..
-rw-r--r-- 1 oracle dba 26632605 Jun 27 14:42 dictionary.ora
5. 添加归档日志或连接日志文件
exec dbms_logmnr.add_logfile
(LogFileName=>'/u01/product/oradata/mxdell/redo04.log',Options=>dbms_logmnr.new);
exec dbms_logmnr.add_logfile
(LogFileName=>'/u01/product/oradata/mxdell/redo05.log',Options=>dbms_logmnr.addfile);
6、开始挖掘日志
exec dbms_logmnr.start_logmnr(dictfilename=>'/u01/logmnr/dictionary.ora');
7. 生成临时存储表
因为查看Logmnr的结果需要在同一个session, 所以我们可以将session PGA中的挖掘的
内容存储在实体表中,这样其他用户也可以查询,且不会因为session的消失数据也消失。
SQL> create table dfms.logmnr_temp01 as select * from GV$LOGMNR_CONTENTS;
8. 结束挖掘日志
execute dbms_logmnr.end_logmnr;
9. 删除日志分析文件
exec dbms_logmnr.add_logfile('/u01/product/oradata/mxdell/redo04.log',dbms_logmnr.removefile);
exec dbms_logmnr.add_logfile('/u01/product/oradata/mxdell/redo05.log',dbms_logmnr.removefile);
10. 查询sql_redo及sql_undo .
select * from dfms.logmnr_temp01 ;
select scn,timestamp,log_id,seg_owner,seg_type,table_space,data_blk#,data_obj#,data_objd#,
session#,serial#,username,session_info,sql_redo,sql_undo
from dfms.LOGMNR_TEMP01 t where SEG_OWNER='DFMS' ;
8、导出脚本,用脚本做回滚,注意SQL_UNDO中的delete语句末尾有rowid,不能直接用,需要用正则表达式替换掉。
spool TA_ABSDOCS_undosql.txt
select regexp_replace(replace(SQL_UNDO,'"HR_TTM"','"HR_TTM2"'),'and ROWID.+;',';')
from hjm_logmnr
WHERE
SEG_NAME = 'TA_ABSDOCS' AND
SEG_OWNER = 'HR_TTM'
order by to_char(TIMESTAMP,'yyyy-mm-dd hh24:mi:ss') desc;
spool off
http://www.chinaunix.net/jh/19/903297.html
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/35489/viewspace-700811/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/35489/viewspace-700811/