浅谈LogMiner的使用方法
程序员文章站
2023-12-01 18:04:04
logminer是每个dba都应熟悉的工具,当一天由于用户的误操作你需要做不完全的恢复时,由于你无法确定这个操作是哪个时间做的,所以这对你的恢复就带来的很大的难度,丢失的数...
logminer是每个dba都应熟悉的工具,当一天由于用户的误操作你需要做不完全的恢复时,由于你无法确定这个操作是哪个时间做的,所以这对你的恢复就带来的很大的难度,丢失的数据也不能完全恢复回来。而logminer就可以帮你确定这个误操作的准确时间。
我的测试环境是aix4.3.3的操作系统,oracle9.2.0.3的测试库。
一、logminer的几点说明
1、logminer可以帮你确定在某段时间所发的各种dml,ddl操作的具体时间和scn号,它所依据的是归档日志文件及联机日志文件。
2、它只能在oracle8i及以后的版本中使用,不过它可以分析oracle8的日志。
3、oracle8i只能用于分析dml操作,到oracle9i则可以分析ddl操作了。
4、logminer不支持索引组织表、long、lob及集合类型。
5、mts的环境也不能使用logminer.
二、操作步骤
1、设定用于logminer分析的数据文件存放的位置
这是设定utl_file_dir参数的过程,我的示例:
a、在initctc.ora文件中加入如下一行
utl_file_dir=/u01/arch
b、得启数据库
oracle>sqlplus /nolog
sql>conn / as sysdba
sql>shutdown immediate
sql>statup
2、生成数据字典文件,是通过dbms_logmnr_d.build()来完成。
sql> begin
2 dbms_logmnr_d.build(
3 dictionary_filename => logminer_dict.dat,
4 dictionary_location => /u01/arch
5 );
6 end;
7 /
dictionary_location指的是logminer数据字典文件存放的位置,它必须匹配utl_file_dir的设定。
其中的dictionary_filename指的是放于存放位置的字典文件的名字,名字可以任意取。
3、建立一个日志分析表
a、建立日志分析表数据库必须在mount或nomount状态,启动数据库到mount状态。
sqlplus /nolog
sql>conn / as sysdba
sql>shutdown immediate
sql>starup mount
b、建立日志分析表,使用dbms_logmnr.add_logfile()
sql> begin
2 dbms_logmnr.add_logfile(
3 options => dbms_logmnr.new,
4 logfilename => /u01/arch/arc_ctc_0503.arc
5 );
6 end;
7 /
其中的options有三种取值,dbms_logmnr.new用于建一个日志分析表;dbms_logmnr.addfile用于加入用于分析的的日志文件;dbms_logmnr.removefile用于移出用于分析的日志文件。
4、添加用于分析的日志文件。
sql> begin
2 dbms_logmnr.add_logfile(
3 options => dbms_logmnr.addfile,
4 logfilename => /u01/arch/arc_ctc_0504.arc
5 );
6 end;
7 /
使用则可以把这个文件从日志分析表中移除,从而不进行分析。
sql> begin
2 dbms_logmnr.add_logfile(
3 options => dbms_logmnr.removefile,
4 logfilename => /u01/arch/arc_ctc_0503.arc
5 );
6 end;
7 /
5、启动logminer进行分析。
sql> begin
2 dbms_logmnr.start_logmnr(
3 dictfilename => /u01/arch/logminer_dict.dat,
4 starttime => to_date(20030501 12:15:00,yyyymmdd hh24:mi:ss),
5 endtime => to_date(20030501 15:40:30,yyyymmdd hh24:mi:ss)
6 );
7 end;
8 /
即分析2003年5月1日这天12:15至15:40这段时间,并把分析结果放到数据字典中以用于查询。还有两个参数startscn(起始scn号)及endscn(终止scn)号。
6、查看日志分析的结果,通过查询v$logmnr_contents可以查询到
a、查看dml操作,示例:
select operation,
sql_redo,
sql_undo,
from v$logmnr_contents
where seg_name = qiuyb;
operation sql_redo sql_undo
---------- -------------------------- --------------------------
insert inser into qiuyb.qiuyb ... delete from qiuyb.qiuyb...
其中operation指的是操作,sql_redo指的是实际的操作,sql_undo指的是用于取消的相反的操作。
b、查看ddl操作,示例:
select timstamp,
sql_redo
from v$logmnr_contents
where upper(sql_redo) like %truncate%;
7、结束logminer的分析。
sql>begin
2 dbms_logmnr.end_logmnr;
3 end;
4 /
三、与logminer相关的数据字典。
1、v$loglist 它用于显示历史日志文件的一些信息
2、v$logmnr_dictionary 因logmnr可以有多个字典文件,该视图用于显示这方面信息。
3、v$logmnr_parameters 它用于显示logmnr的参数
4、v$logmnr_logs 它用于显示用于分析的日志列表信息。
我的测试环境是aix4.3.3的操作系统,oracle9.2.0.3的测试库。
一、logminer的几点说明
1、logminer可以帮你确定在某段时间所发的各种dml,ddl操作的具体时间和scn号,它所依据的是归档日志文件及联机日志文件。
2、它只能在oracle8i及以后的版本中使用,不过它可以分析oracle8的日志。
3、oracle8i只能用于分析dml操作,到oracle9i则可以分析ddl操作了。
4、logminer不支持索引组织表、long、lob及集合类型。
5、mts的环境也不能使用logminer.
二、操作步骤
1、设定用于logminer分析的数据文件存放的位置
这是设定utl_file_dir参数的过程,我的示例:
a、在initctc.ora文件中加入如下一行
utl_file_dir=/u01/arch
b、得启数据库
oracle>sqlplus /nolog
sql>conn / as sysdba
sql>shutdown immediate
sql>statup
2、生成数据字典文件,是通过dbms_logmnr_d.build()来完成。
sql> begin
2 dbms_logmnr_d.build(
3 dictionary_filename => logminer_dict.dat,
4 dictionary_location => /u01/arch
5 );
6 end;
7 /
dictionary_location指的是logminer数据字典文件存放的位置,它必须匹配utl_file_dir的设定。
其中的dictionary_filename指的是放于存放位置的字典文件的名字,名字可以任意取。
3、建立一个日志分析表
a、建立日志分析表数据库必须在mount或nomount状态,启动数据库到mount状态。
sqlplus /nolog
sql>conn / as sysdba
sql>shutdown immediate
sql>starup mount
b、建立日志分析表,使用dbms_logmnr.add_logfile()
sql> begin
2 dbms_logmnr.add_logfile(
3 options => dbms_logmnr.new,
4 logfilename => /u01/arch/arc_ctc_0503.arc
5 );
6 end;
7 /
其中的options有三种取值,dbms_logmnr.new用于建一个日志分析表;dbms_logmnr.addfile用于加入用于分析的的日志文件;dbms_logmnr.removefile用于移出用于分析的日志文件。
4、添加用于分析的日志文件。
sql> begin
2 dbms_logmnr.add_logfile(
3 options => dbms_logmnr.addfile,
4 logfilename => /u01/arch/arc_ctc_0504.arc
5 );
6 end;
7 /
使用则可以把这个文件从日志分析表中移除,从而不进行分析。
sql> begin
2 dbms_logmnr.add_logfile(
3 options => dbms_logmnr.removefile,
4 logfilename => /u01/arch/arc_ctc_0503.arc
5 );
6 end;
7 /
5、启动logminer进行分析。
sql> begin
2 dbms_logmnr.start_logmnr(
3 dictfilename => /u01/arch/logminer_dict.dat,
4 starttime => to_date(20030501 12:15:00,yyyymmdd hh24:mi:ss),
5 endtime => to_date(20030501 15:40:30,yyyymmdd hh24:mi:ss)
6 );
7 end;
8 /
即分析2003年5月1日这天12:15至15:40这段时间,并把分析结果放到数据字典中以用于查询。还有两个参数startscn(起始scn号)及endscn(终止scn)号。
6、查看日志分析的结果,通过查询v$logmnr_contents可以查询到
a、查看dml操作,示例:
select operation,
sql_redo,
sql_undo,
from v$logmnr_contents
where seg_name = qiuyb;
operation sql_redo sql_undo
---------- -------------------------- --------------------------
insert inser into qiuyb.qiuyb ... delete from qiuyb.qiuyb...
其中operation指的是操作,sql_redo指的是实际的操作,sql_undo指的是用于取消的相反的操作。
b、查看ddl操作,示例:
select timstamp,
sql_redo
from v$logmnr_contents
where upper(sql_redo) like %truncate%;
7、结束logminer的分析。
sql>begin
2 dbms_logmnr.end_logmnr;
3 end;
4 /
三、与logminer相关的数据字典。
1、v$loglist 它用于显示历史日志文件的一些信息
2、v$logmnr_dictionary 因logmnr可以有多个字典文件,该视图用于显示这方面信息。
3、v$logmnr_parameters 它用于显示logmnr的参数
4、v$logmnr_logs 它用于显示用于分析的日志列表信息。
上一篇: 如何保持Oracle数据库的优良性能