dictory模式:这种模式是将数据库的数据字典抽取到操作系统的一个文件里,利用这种方法也可以使用其他数据库来分析生产库的日志,但是这种方式必须设置UTL_FILE_DIR参数,这个参数是静态参数,修改后必须重启数据库才会生效。
这种方式不仅可以分析当前数据库的ONLINE REDO LOG和ARCHIVE LOG,还可以分析其他数据库的归档日志,使用这种方式需要先建立一个字典文件,操作起来也比较麻烦,依赖性也较高,需要设置数据库的UTL_FILE_DIR参数,UTL_FILE_DIR参数默认没有设置,而且该参数是静态参数,设置该参数需要重启数据库才可以生效。设置完成后也要注意在服务器上创建好:mkdir -p /home/oracle/utltest。
show parameter utl_file_dir alter system set utl_file_dir='/home/oracle/utltest' scope=spfile; shutdown immediate startup show parameter utl |
(1)LOGMNR的DICTORY模式挖掘本地数据库的ONLINE REDO LOG的用法
1.创建数据字典
insert into t_test values(1,'stream'); insert into t_test values(2,'dbdream'); commit;
exec dbms_logmnr_d.build(dictionary_filename=>'dict.ora',dictionary_location=>'/home/oracle/utltest',options=>dbms_logmnr_d.store_in_flat_file); |
此时在/home/oracle/utl_dbdream目录下就会生成一个名字为dict.ora的文件。
2.查看数据库的REDO日志路径
select member from v$logfile; |
3.添加REDO日志
exec dbms_logmnr.add_logfile(logfilename=>'/U01/app/oracle/oradata/testdb/redo01a.rdo',options=>dbms_logmnr.new); exec dbms_logmnr.add_logfile(logfilename=>'/U01/app/oracle/oradata/testdb/redo02a.rdo',options=>dbms_logmnr.addfile); exec dbms_logmnr.add_logfile(logfilename=>'/U01/app/oracle/oradata/testdb/redo03a.rdo',options=>dbms_logmnr.addfile); |
4.开始对添加的REDO进行分析
exec dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/utltest/dict.ora'); |
5.查看LOGMNR分析后得到的信息
select timestamp,sql_redo,sql_undo from v$logmnr_contents where table_name='T_TEST';
|
6.结束LOGMNR分析
exec dbms_logmnr.end_logmnr; |
(2)LOGMNR的DICTORY模式挖掘本地数据库的ARCHIVE LOG的用法
和LOGMNR的DICT_FROM_ONLINE_CATALOG模式一样,使用LOGMNR的DICTORY模式挖掘本地数据库的归档日志和挖掘ONLINE REDO LOG的用法几乎相同。
1.创建数据字典
exec dbms_logmnr_d.build(dictionary_filename=>'dict.ora',dictionary_location=>'/home/oracle/utltest',options=>dbms_logmnr_d.store_in_flat_file); |
2.添加归档日志
要确保要分析的信息在添加的归档日志内,否则可能挖掘不到想要的信息。
exec dbms_logmnr.add_logfile(logfilename=>'/U01/app/oracle/product/11.2.0.4/dbs/arch/1_1740_1047724880.dbf',options=>dbms_logmnr.new); exec dbms_logmnr.add_logfile(logfilename=>'/U01/app/oracle/product/11.2.0.4/dbs/arch/1_1741_1047724880.dbf',options=>dbms_logmnr.addfile); |
3.开始挖掘
execute DBMS_LOGMNR.START_LOGMNR(DICTFILENAME =>'/home/oracle/utltest/dict.ora'); |
4.查询挖掘的日志信息
select timestamp,sql_redo,sql_undo from v$logmnr_contents where table_name='T_TEST';
|
5.结束LOGMNR挖掘
exec dbms_logmnr.end_logmnr; |
(3)分析其他数据库的归档日志
使用LOGMNR的DICTORY模式的好处就是可以分析其他数据库的日志信息,但是在将其他数据库的日志拷到本地数据库服务器的同时,还需要拷贝那个数据库创建的字典文件。
1.创建测试表
sqlplus scott/tiger create table t_test(id number,name varchar2(15));
insert into t_test values(1,'stream'); insert into t_test values(2,'dbdream'); commit;
update t_test set name='streamsong' where id=1; commit; |
2.创建字典文件
exec dbms_logmnr_d.build(dictionary_filename=>'dict_0117.ora',dictionary_location=>'/home/oracle/utl_dbdream',options=>dbms_logmnr_d.store_in_flat_file); |
由于没有设置utl_file_dir报错,解决需要先创建utl_file_dir,但是需要重启数据库。
show parameter utl_file_dir alter system set utl_file_dir='/home/oracle/utl_dbdream' scope=spfile; shutdown immediate startup show parameter utl |
3.切换日志,使REDO日志归档
alter system switch logfile; alter system switch logfile; alter system switch logfile; |
4.将归档日志和字典文件拷贝到测试数据库服务器
5.在测试数据库服务器添加远程数据库的归档日志
将远程数据库的归档和字典文件拿到之后,就可以使用LOGMNR的DICTORY方式对这些归档日志进行分析,方法和分析本地日志的方法几乎相同,有一点区别就是在本地数据库也就是做分析的数据库不需要创建字典文件了,因为已经将远程的字典文件拷贝过来了,即使创建了字典文件也不能拿来分析远程的归档日志,分析远程的归档日志必须使用远程数据库自己创建的字典文件。
exec dbms_logmnr.add_logfile(logfilename=>'/home/oracle/1_15_1050761033.dbf',options=>dbms_logmnr.new); exec dbms_logmnr.add_logfile(logfilename=>'/home/oracle/1_16_1050761033.dbf',options=>dbms_logmnr.addfile); exec dbms_logmnr.add_logfile(logfilename=>'/home/oracle/1_17_1050761033.dbf',options=>dbms_logmnr.addfile); |
6.开始分析
exec dbms_logmnr.start_logmnr(dictfilename=>'/home/oracle/dict_0117.ora'); |
7.结束分析
exec dbms_logmnr.end_logmnr; |