服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > 数据库技术 > Oracle技术 > Oracle开发 > 查看文档

讲解oracle数据库logminer工具的使用方法

【赛迪网-it技术报道】logminer(dbms_logmnr和dbms_logmnr_d)package,可以用来分析oracle的重做日志文件。logminer是oracle从8i开始提供的工具。

我们可以使用logminer分析其它instance(版本可不一致)的重做日志文件,但是必须遵循以下要求:

1.logminer日志分析工具仅能够分析oracle 8以后的产品

2.logminer必须使用被分析数据库实例产生的字典文件,且安装logminer数据库的字符集必须和被分析数据库的字符集相同

3.被分析数据库平台必须和当前logminer所在数据库平台一样,且block size相同。

使用logminer

1.安装logminer:

要安装logminer工具,必须首先要运行下面这样两个脚本,

$oracle_home/rdbms/admin/dbmslm.sql

$oracle_home/rdbms/admin/dbmslmd.sql.

这两个脚本必须均以sys用户身份运行。

2.创建数据字典文件

首先在init.ora初始化参数文件中,添加参数utl_file_dir,该参数值为服务器中放置数据字典文件的目录。如:

utl_file_dir = (d:\oracle\logs)

重新启动数据库,使新加的参数生效,然后创建数据字典文件:

sql> execute dbms_logmnr_d.build(

dictionary_filename => ' logmn_ora817.dat',

dictionary_location => ' d:\oracle\logs ');

创建数据字典是让logminer引用涉及到内部数据字典中的部分时使用对象的名称,而不是系统内部的16进制的id。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,就需要重新创建该字典。

3.添加要分析的日志文件

logminer可以用来分析在线的重做日志文件和归档日志文件,但是我们一般建议使用归档的日志文件。

a.添加新的日志文件:

sql> execute dbms_logmnr.add_logfile(

logfilename=>' d:\database\oracle\oradata\ora817\archive \ arc01491.001 ', options=>dbms_logmnr.new);

b.添加另外的日志文件到列表

sql> execute dbms_logmnr.add_logfile(

logfilename=>' d:\database\oracle\oradata\ora817\archive \ arc01491.002', options=>dbms_logmnr.addfile);

c. 移去一个日志文件

sql> execute dbms_logmnr.add_logfile(

logfilename=>' d:\database\oracle\oradata\ora817\archive \ arc01491.002', options=>dbms_logmnr. removefile);

创建了要分析的日志文件,就可以对其进行分析。

4. 进行日志分析

sql> execute dbms_logmnr.start_logmnr(

dictfilename=>' d:\oracle\logs\ logmn_ora817.dat ');

可以使用相应的限制条件:

时间范围:对dbms_logmnr.start_logmnr使用starttime和endtime参数

scn范围:对dbms_logmnr.start_logmnr使用startscn和endscn参数

5.观察结果:

主要是查询v$logmnr_contents:

sql> desc v$logmnr_contents;

名称 空? 类型

----------------------------------------- -------- ----------------------

scn number

timestamp date

thread# number

log_id number

xidusn number

xidslt number

xidsqn number

rbasqn number

rbablk number

rbabyte number

ubafil number

ubablk number

ubarec number

ubasqn number

abs_file# number

rel_file# number

data_blk# number

data_obj# number

data_objd# number

seg_owner varchar2(32)

seg_name varchar2(32)

seg_type number

seg_type_name varchar2(32)

table_space varchar2(32)

row_id varchar2(19)

session# number

serial# number

username varchar2(32)

session_info varchar2(4000)

rollback number

operation varchar2(32)

sql_redo varchar2(4000)

sql_undo varchar2(4000)

rs_id varchar2(32)

ssn number

csf number

info varchar2(32)

status number

ph1_name varchar2(32)

ph1_redo varchar2(2000)

ph1_undo varchar2(2000)

ph2_name varchar2(32)

ph2_redo varchar2(2000)

ph2_undo varchar2(2000)

ph3_name varchar2(32)

ph3_redo varchar2(2000)

ph3_undo varchar2(2000)

ph4_name varchar2(32)

ph4_redo varchar2(2000)

ph4_undo varchar2(2000)

ph5_name varchar2(32)

ph5_redo varchar2(2000)

ph5_undo varchar2(2000)

通过字段sql_redo可以得到该日志文件中进行过的sql操作,通过sql_undo可以得到撤销的sql语句。

还可以用这样的sql对日志文件中的所有的操作分类统计:

select operation,count(*)from v$logmnr_contents group by operation;

视图v$logmnr_contents中的分析结果仅在我们运行过程'dbms_logmrn.start_logmnr'这个会话的生命期中存在。这是因为所有的logminer存储都在pga内存中,所有其他的会话是看不到它的,同时随着会话的结束而清除分析结果。

最后,使用过程dbms_logmnr.end_logmnr终止日志分析事务,pga内存区域将被清除。

扫描关注微信公众号