LogMiner工具的使用

/* LogMiner工具的使用 */

LogMiner工具实际上是由两个新的PL/SQL内建包((DBMS_LOGMNR 和 DBMS_ LOGMNR_D)和四个V$动态性能视图(视图是在利用过程DBMS_LOGMNR.START_LOGMNR启动LogMiner时创建)组成

1.解读数据字典,创建logminer字典文件
如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,这时就需要重新创建该字典文件。另外一种情况是在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件.

a.关闭数据库
b.初始化参数中设置utl_file_dir('f:/oracle/database'),指定数据字典文件的位置
c.打开数据库
d.
SQL> show user;
USER 为"SYS"

SQL> execute dbms_logmnr_d.build('dict.ora','f:/oracle/database');

PL/SQL 过程已成功完成。

如果没有dbms_logmnr_d包,需手工执行@d:/oracle/ora81/rdbms/admin/dbmslmd.sql。

如果执行SQL>execute dbms_logmnr_d.build('wlcdbdict.ora','D:/oracle'); 
产生如下错误:
BEGIN dbms_logmnr_d.build('wlcdbdict.ora','D:/oracle '); END; 

ERROR 位于第 1 行: 
ORA-06532: 下标超出限制 
ORA-06512: 在"SYS.DBMS_LOGMNR_D", line 793 
ORA-06512: 在line 1 
需要执行以下步骤,才能避免产生错误:

i.修改d:/oracle/ora81/rdbms/admin/dbmslmd.sql文件
打开dbms_logmnr_d包,将type col_desc_array is varray(513) of col_description这个数组的值改大一些
ii.以sys/change_on_install身份登陆
sql*plus>connect sys/change_on_install
iii.执行sql*plus>@d:/oracle/ora81/rdbms/admin/dbmslmd.sql

如果要在oracle 8数据库中使用logminer,把oracle 9i安装目录下的rdbms/admin/dbmslmd.sql复制到oracle 8数据库相应的子目录中,
然后执行该文件,即可创建dbms_logmnr和dbms_logmnr_d包,随后使用相同的方法来创建logminer字典文件.

2.指定用于分析的重做日志文件

a.用new选项来创建新的重做日志文件列表
SQL> execute dbms_logmnr.add_logfile(logfilename=>'f:/oracle/oradata/backup/arc1/arch_1_38.arc',opti
ons=>dbms_logmnr.new);

PL/SQL 过程已成功完成。

b.用addfile选项来添加其它的重做日志文件
SQL> execute dbms_logmnr.add_logfile(logfilename=>'f:/oracle/oradata/backup/arc1/arch_1_37.arc',opti
ons=>dbms_logmnr.addfile);

PL/SQL 过程已成功完成。

c.用removefile选项来删除不需要的重做日志文件
SQL> execute dbms_logmnr.add_logfile(logfilename=>'f:/oracle/oradata/backup/arc1/arch_1_38.arc',opti
ons=>dbms_logmnr.removefile);

PL/SQL 过程已成功完成。

可以查询v$logmnr_logs获取那些log files已加入log list中。

3.运行logminer

SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'f:/oracle/database/dict.ora');

[Q]执行execute dbms_logmnr.start_logmnr(DictFileName=>'DictFileName')提示ORA-01843:无效的月份,这个是什么原因
[A]我们分析start_logmnr包
PROCEDURE start_logmnr(
startScn IN NUMBER default 0 ,
endScn IN NUMBER default 0,
startTime IN DATE default TO_DATE('01-jan-1988','DD-MON-YYYY'),
endTime IN DATE default TO_DATE('01-jan-2988','DD-MON-YYYY'),
DictFileName IN VARCHAR2 default '',
Options IN BINARY_INTEGER default 0 );
可以知道,如果TO_DATE('01-jan-1988','DD-MON-YYYY')失败,将导致以上错误
所以解决办法可以为
1、Alter session set NLS_LANGUAGE=American
2、用类似如下的方法执行
execute dbms_logmnr.start_logmnr (DictFileName=> 'f:/temp2/TESTDICT.ora', starttime => TO_DATE(
'01-01-1988','DD-MM-YYYY'), endTime=>TO_DATE('01-01-2988','DD-MM-YYYY'));

a.进行基于时间的过滤(缩小要分析日志文件的范围,仅仅分析2001年9月18日的日志)
SQL> execute dbms_logmnr.start_logmnr(
dictfilename=>'f:/oracle/database/dict.ora',
StartTime=>to_date('2001-9-18 00:00:00','YYYY-MM-DD HH24:MI:SS')
EndTime=>to_date(''2001-9-18 23:59:59','YYYY-MM-DD HH24:MI:SS'));

b.进行基于SCN的过滤(设置起始SCN和截至SCN来限制要分析日志的范围)
SQL> execute dbms_logmnr.start_logmnr(
dictfilename=>'f:/oracle/database/dict.ora',
StartScn=>20,
EndScn=>50);

4.将分析结果输出到v$logmnr_contents视图
到现在为止,我们已经分析得到了重作日志文件中的内容。动态性能视图v$logmnr_contents包含LogMiner分析得到的所有的信息。

SELECT operation,sql_redo FROM v$logmnr_contents;

如果我们仅仅想知道某个用户对于某张表的操作,可以通过下面的SQL查询得到,该查询可以得到用户HANZO对表SALARY所作的一切工作。

SQL> SELECT sql_redo FROM v$logmnr_contents WHERE username='HANZO' AND tablename='SALARY'; 1

视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在。这是因为所有的LogMiner存储都在SGA内存中,一旦重新启动数据库,分析结果将会丢失,必须重新运行logminer才能再次得到分析结果.

5.结束logminer
清除v$logmnr_logs, v$logmnr_contents, v$logmnr_parmeters中的内容,结束分析。

SQL> execute dbms_logmnr.end_logmnr;

PL/SQL 过程已成功完成。

6.其他注意事项

可以利用LogMiner日志分析工具来分析其他数据库实例产生的重作日志文件,而不仅仅用来分析本身安装LogMiner的数据库实例的redo logs文件。使用LogMiner分析其他数据库实例时,有几点需要注意:

1. LogMiner必须使用被分析数据库实例产生的字典文件,而不是安装LogMiner的数据库产生的字典文件,另外必须保证安装LogMiner数据库的字符集和被分析数据库的字符集相同。

2. 被分析数据库平台必须和当前LogMiner所在数据库平台一样,也就是说如果我们要分析的文件是由运行在UNIX平台上的Oracle 8i产生的,那么也必须在一个运行在UNIX平台上的Oracle实例上运行LogMiner,而不能在其他如Microsoft NT上运行LogMiner。当然两者的硬件条件不一定要求完全一样。

3. logminer是oracle在oracle8i所提供的新package,Oracle8并没有这个package;但Oracle8中也可以使用logminer。只需将oracle8.1.6之前(dbmslogmnrd.sql, dbmslogmnr.sql, prvtlogmnr.plb)、oracle8.1.6之后(dbmslmd.sql, dbmslm.sql, prvtlm.plb)的文件拷贝到Oracle8所在的机器上并执行这些scripts即可。这样Oracle8中也可以使用logminer.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值