LogMiner学习笔记(理论)
LogMiner实际上是一种查看重做日志(和归档日志)的方法。
LogMiner实际上是由一组PL/SQL包和动态性能视图组成的。
LogMiner能够基于真实的数据值来进行查询。例如,
可以执行一个查询来选择SCOTT用户的emp表中的所有更改操作;
或者所有由SCOTT用户执行的删除操作;
也可以执行一个查询来显示对该emp表中增加sal超过一定数量的所有更改操作;
……
LogMiner不支持对大对象类型、索引结构的表、集合或嵌套表的查询。当在共享服务器环境中运行Oracle时,不能运行LogMiner。但可以在运行在专用服务器环境中的LogMiner中分析在共享服务器环境中创建的重做日志文件。
要运行LogMiner必须要拥有DBMS_LOGMNR包的EXECUTE权限或EXECUTE_CATALOG_ROLE角色。
利用LogMiner来分析重做日志文件主要有以下5个基本步骤:
1、 提取LogMiner使用的数据字典(可选);
2、 指定LogMiner要分析的重做日志文件;
3、 启动LogMiner会话;
4、 查看、使用分析结果;
5、 结束LogMiner会话。
提取LogMiner使用的数据字典
当使用LogMiner执行重做日志分析时,必须要有一个自己使用的数据字典,以便完整地翻译重做日志文件中的内容,即将数据库内部的对象标识符和数据格式翻译成对象的名称和外部数据格式。如果没有这个数据字典,LogMiner将使用对象标识符和16进制格式的数据,这样的信息几乎不可读。
有3种能得到数据字典的方法可供选择:
将数据字典提取到平面数据字典文件:耗资源少,可分析当前和其他数据库的重做日志文件,但存在同步问题,数据库可以处于Archivelog或Noarchivelog模式;
SQL>alter system set utl_file_dir=’/tmp/logmnr’ scope=spfile; //修改该参数要重启数据库才能生效
SQL>execute dbms_logmnr_d.build(‘logmnr_dic.ora’, ‘/tmp/logmnr/’, options=>DBMS_LOGMNR_D.STORE_IN_FLAT_FILE);
将数据字典提取到重做日志文件;耗资源多,可分析当前和其他数据库的重做日志文件,不存在同步问题,数据库必须处于Archivelog模式,且Oracle 9i以上版本;
SQL> execute dbms_logmnr_d.build(‘’, ‘’,options=>DBMS_LOGMNR_D.STORE_IN_REDO_LOGS);
使用当前的数据库联机数据字典;只能分析当前数据库的重做日志文件;不用执行提取动作,直接在启动LogMiner会话时指定参数dbms_logmnr.DIC_FROM_ONLINE_CATALOG即可使用
指定LogMiner要分析的重做日志文件
LogMiner一次可以对多个日志进行分析,利用DBMS_LOGMNR.ADD_LOGFILE过程可以指定要分析的重做日志文件。可以重复调用该过程,以便逐个添加多个重做日志文件(次序无关),或者删除已经添加的重做日志文件。
创建一个新的要分析的重做日志文件列表,同时向其中添加第一个重做日志文件:
execute DBMS_LOGMNR.ADD_LOGFILE(‘/oracle/app/product/10.0.2/oradata/db/REDO01.LOG’, Options=>dbms_logmnr.NEW);
向该重做日志文件列表中添加新的要分析的重做日志文件:
execute DBMS_LOGMNR.ADD_LOGFILE(‘/oracle/app/product/10.0.2/oradata/db/REDO02.LOG’, Options=>dbms_logmnr.ADDFILE);
从该重做日志文件列表中删除重做日志文件:
execute DBMS_LOGMNR.ADD_LOGFILE(‘/oracle/app/product/10.0.2/oradata/db/REDO02.LOG’, Options=>dbms_logmnr.REMOVEFILE);
添加完成后可通过查询V$LOGMNR_LOGS视图查看列表中的重做日志文件:
SQL>select log_id, filename, db_id, db_name from v$logmnr_logs;
启动LogMiner会话
在已经创建了LogMiner使用的平面数据字典文件,并且指定了要分析的重做日志文件的列表之后,就可以运行LogMiner,开始分析这些重做日志文件了。
执行DBMS_LOGMNR.START_LOGMNR过程就可以启动LogMiner会话,该过程的语法:
EXECUTE DBMS_LOGMNR.START_LOGMNR(startScn, endScn, DictFileName, Options);
或者
EXECUTE DBMS_LOGMNR.START_LOGMNR(‘startTime’, ‘endTime’, DictFileName, Options);
说明:
Scn和Time如果超出了被分析的重做日志文件的范围,则以被分析的重做日志中的Scn和Time为准;
Options选项较多,具体会经常用到的有以下一些:
dbms_logmnr.DICT_FROM_ONLINE_CATALOG:指示LogMiner只使用联机数据字典,而不使用提取到平面数据字典文件或重做日志文件中的数据字典。如果是分析当前数据库的重做日志文件,建议使用该选项,因为它总能保证SQL_REDO和SQL_UNDO所反映所有的操作。 我理解的就是说如果是在分析当前数据重做日志,就最好用这个参数,而且同时也不用进行第一步提取平面数据字典文件等操作。
查看LogMiner的分析结果
执行DBMS_LOGMNR.START_LOGFILE过程后,LogMiner会将重做日志文件的分析结果保存到V$LOGMNR_CONTENTS视图中,该视图所包含的内容如下:
scn 事务的系统更改编号SCN
operation 操作类型,如DDL,UPDATE,INSERT,DELETE等
sql_redo 执行的操作,即执行的SQL语句
seg_undo 撤销执行的操作
seg_name 操作所涉及的段的名称
seg_owner 该段的所有者
seg_type_name 方案对象的类型,如表是table
table_name 操作所涉及的表的表名
table_space 该表所属的表空间
select scn, operation, sql_redo, sql_undo from v$log_mnr_contents where seg_name=’EMP’;
结束LogMiner会话
在对重做日志文件进行分析后,应该释放由LogMiner会话占有的数据库和系统资源,执行DBMS_LOGMNR.END_LOGFILE过程就可以正常地结束LogMiner会话:
execute DBMS_LOGMNR.END_LOGFILE;
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14338195/viewspace-1052576/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14338195/viewspace-1052576/