LogMiner最好的文档:Using LogMiner to Analyze Redo Logs
Oracle 9.2 Database Administrator's Guide的第9章
LogMiner是以Redo log 和 Dictionary为基础的
LogMiner使用数据字典将内部的对象标识和数据类型,如果没有数据字典,LogMiner返回的是16进制的数据和ID
LogMiner三种方式生成数据字典(该数据字典是LogMiner运行的基础,是LogMiner工具必须关联的一种辅助资源)
1 Extracting the Dictionary to a Flat File
解析数据字典到物理文件(LogMiner使用时关联的物理文件)
步骤如下:
(1)设置参数:UTL_FILE_DIR,数据字典物理文件存放的路径,
alter system set utl_file_dir = 'd:\oracle\ora92\database' scope = spfile
该参数必须要在数据库重新启动后才能生效
如果设置的路径无法访问,那在dbms_logmnr_d.build时会报错
(2) 如果是8i,拷贝dbmslmd.sql脚本
(3)如果数据库没有打开,mount并打开数据库
(4)如果是8i,执行dbmslmd.sql脚本
(5)执行存储过程 dbms_logmnr_d.build
dbms_logmnr_d.build('dictionary,ora','d:\oracle\ora92\database')
事实上关键的步骤只是1和5步,关键中的关键就是dictionary的存放的路径
必须保证首先路径存在并能访问,其次UTL_FILE_DIR中的路径和build方法中传入的路径相同,否则就会报如下错误
SQL> execute dbms_logmnr_d.build('dictionary.ora','d:\oracle\ora92\logmnr');
BEGIN dbms_logmnr_d.build('dictionary.ora','d:\oracle\ora92\logmnr'); END;
*
ERROR 位于第 1 行:
ORA-01336: 无法打开指定的字典文件
ORA-29280: 目录路径无效
ORA-06512: 在"SYS.DBMS_LOGMNR_D", line 920
ORA-06512: 在"SYS.DBMS_LOGMNR_D", line 1938
ORA-06512: 在line 1
2 Extracting a Dictionary to the Redo Logs
解析数据字典到重做日志中
使用这种方式,必须保证数据库打开并在归档模式下,并且archiving被激活。在解析到重做日志的过程中,所有的DDL语句都不能执行,
所以这种方式能保证数据字典的快照与当前的数据字典一致,如果解析到物理文件,这点是不能保证的
步骤:
execute
dbms_logmnr_d.build(OPTIONS=>dbms_logmnr_d.STORE_IN_REDO_LOGS);
可以通过下面的sql来确认redo log中包含了数据字典的信息
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_BEGIN='YES';
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_END='YES';
由于该方式需要很多时间,所以最好在非高峰时间运行
3 Using the Online Catalog
使用联机字典
步骤:
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => -
2 DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
联机字典包括最新的数据库的信息,是最快的分析重做日志的方法。但是如果表被改动,联机字典只反映最近的表格的版本,如果重做日志中包含以前该表格版本的SQL,logmnr将没办法解析,只会显示16进制的数据
注意两点:
联机字典需要数据库打开
联机字典方式DDL_DICT_TRACKING的选项是失效的
关于DDL_DICT_TRACKING
LogMiner的内部字典是根据源数据字典(物理文件,重做日志中的字典或联机字典)来构建的,如果使用了该选项,LogMiner将重做日志中DDL的修改应用到内部字典上
DDL tracking默认是非激活的,激活方式:
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => -
2 DBMS_LOGMNR.DDL_DICT_TRACKING);
查询DDL语句
SQL> SELECT USERNAME, SQL_REDO
2 FROM V$LOGMNR_CONTENTS
3 WHERE USERNAME = 'SYS' AND EPRATION = 'DDL';
注意两点:
如果使用联机字典方式,DDL_DICT_TRACKING是失效的
DDL_DICT_TRACKING需要数据打开
关于补充日志
http://space.itpub.net/7607759/viewspace-462640
文章非常好,只能理解大概的意思,以后再研究
LogMiner常用步骤:
1 Perform. Initial Setup Activities ---初始设置
激活补充日志
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
使用下面的语句LogMiner使用logmnrts$表空间来存放所有的LogMiner表。LogMiner默认存放表在System表空间
the following statement will re-create all LogMiner tables to use the logmnrts$ tablespace:
SQL> EXECUTE DBMS_LOGMNR_D.SET_TABLESPACE('logmnrts$');
2 Extract a Dictionary (unless you plan to use the online catalog)---提供一个字典源
3 Specify Redo Logs for Analysis
加入待分析的重做日志
开始加入时使用OPTIONS => DBMS_LOGMNR.NEW
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE( -
2 LOGFILENAME => '/oracle/logs/log1.f', -
3 PTIONS => DBMS_LOGMNR.NEW);
可以再添加
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE( -
2 LOGFILENAME => '/oracle/logs/log2.f', -
3 PTIONS => DBMS_LOGMNR.ADDFILE);
可以再删除
SQL> EXECUTE DBMS_LOGMNR.ADD_LOGFILE( -
2 LOGFILENAME => '/oracle/logs/log2.f', -
3 PTIONS => DBMS_LOGMNR.REMOVEFILE);
4 Start a LogMiner Session
指明字典物理文件
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR( -
2 DICTFILENAME =>'/oracle/database/dictionary.ora');
按时间来过滤
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR( -
2 DICTFILENAME => '/oracle/dictionary.ora', -
3 STARTTIME => TO_DATE('01-Jan-1998 08:30:00', 'DD-MON-YYYY HH:MI:SS'), -
4 ENDTIME => TO_DATE('01-Jan-1998 08:45:00', 'DD-MON-YYYY HH:MI:SS'));
按SCN来过滤
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR( -
2 DICTFILENAME => '/oracle/dictionary.ora', -
3 STARTSCN => 100, -
4 ENDSCN => 150);
只显示Commit的数据
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => -
2 DBMS_LOGMNR.COMMITTED_DATA_ONLY);
跳过崩溃的重做日志
SQL> EXECUTE DBMS_LOGMNR.START_LOGMNR(OPTIONS => -
2 DBMS_LOGMNR.SKIP_CORRUPTION);
5 Query V$LOGMNR_CONTENTS
查询V$LOGMNR_CONTENTS
6 End a LogMiner Session
释放资源
SQL> EXECUTE DBMS_LOGMNR.END_LOGMNR;
******使用Logmnr来分析Table Hits
SELECT SEG_OWNER, SEG_NAME, COUNT(*) AS Hits FROM
V$LOGMNR_CONTENTS WHERE SEG_NAME NOT LIKE '%$' GROUP BY
SEG_OWNER, SEG_NAME;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22111412/viewspace-612686/ ,如需转载,请注明出处,否则将追究法律责任。