ITPub博客

首页 > Linux操作系统 > Linux操作系统 > logminer工具的学习

logminer工具的学习

原创 Linux操作系统 作者:dppass2 时间:2011-03-04 17:35:55 0 删除 编辑

出处:http://omarchina.itpub.net/post/31742/406593

A:基本对象:
source database:包含了要分析的重做日志和归档日志
mining database:执行logminer操作要使用的数据库
logminer 字典: 将内部对象ID号和数据类型转换成为对象名和外部数据格式,若不用字典进行分析。产生的LOG不是很容易读。(如例)
B:logminer配置需求:
1,source和mining database必须运行在相同的硬件平台
2,mining database可以和source database在一台数据库上,也可以独立。
3,mining database版本必须高于source database
4,source和mining database必须字符集相同
5,logminer字典必须在source database生成
6,若多个日志的话,必须是来源于同一个source database
7,若多个日志的话,必须是具有相同的resetlogs scn
8,被分析的redo和arch必须在oracle8.0版本以上
C:补充日志:supplemental log
redo和arch用户实现恢复,这些数据自动记录在日志中,除了这些还要记录其他一部分的信息,记录其他列的日志过程被称为补充日志。
默认情况,数据库不提供补充日志,所以默认下logminer不支持:
1,索引族,链行和迁移行。
2,直接路径插入
3,摘取logminer字典到redo log
4,跟踪ddl
5,生成健列的sql_redo和sql_undo
6,long和lob数据类型
如果要使用这些特性的话,必须打开这个功能。如下过程
C:Documents and SettingsAdministrator>sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on 星期一 9月 10 20:51:14 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
sys@ORCL> alter database add supplemental log data;
数据库已更改。

D:Logminer不支持的数据类型和表存储属性:
bfile
抽象数据类型
集合类型(嵌套表和varray)
参照对象
xmltype
具有Lob列的索引组织表
使用compress特性的表
E:使用logminer字典时候,有三种选项:
1,使用source database 数据字典(online catalog)
execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
这样的方式要求数据库必须OPEN状态,且只能trace DML,无法跟踪DDL操作.
2,使用logminer字典到从做日志。
execute dbms_logmnr_d.build(options=>dbms_logmnr_d.store_in_redo_logs);
这样的方式要求数据库还必须要在archive的模式下。若在分析数据库日志的时候,要分析的表
结构发生了改变。ORACLE推荐使用这个选项分析日志。
3,摘取logmnr字典到字典文件中.
建立字典文件的方法如下:
sys@ORCL> alter system set utl_file_dir='D:oraclelogmnr' scope=spfile;
----设置utl_file_dir目录
系统已更改。
这是为了兼容以前的版本
sys@ORCL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
sys@ORCL> startup
ORACLE 例程已经启动。

Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 62915940 bytes
Database Buffers 100663296 bytes
Redo Buffers 2945024 bytes
数据库装载完毕。
数据库已经打开。
sys@ORCL> execute dbms_logmnr_d.build('dict.ora','d:oraclelogmnr',dbms_logmnr_d.store_in
_flat_file);
---第一个参数表示字典文件名
---第二个参数表示字典文件目录,和utl_file_dir目录一致
---第三个参数表示要使用字典文件
PL/SQL 过程已成功完成。

F:分析DML操作
下面演示:
sys@ORCL> conn u_omar/biohazard
已连接。
u_omar@ORCL> create table emp as select * from scott.emp where 1=0;
表已创建。
u_omar@ORCL> insert into emp select * from scott.emp;
已创建14行。
u_omar@ORCL> commit;
提交完成。
u_omar@ORCL> select a.group#,a.status,b.member from v$log a,v$logfile b
2 where a.group#=b.group#;

GROUP# STATUS MEMBER
---------- ---------------- --------------------------------------------------
3 UNUSED D:ORACLEPRODUCT10.2.0ORADATAORCLREDO03.LOG
1 CURRENT D:ORACLEPRODUCT10.2.0ORADATAORCLREDO01.LOG
u_omar@ORCL> conn / as sysdba
已连接。
第一步,建立分析列表:
sys@ORCL> execute dbms_logmnr.add_logfile(logfilename=>'D:ORACLEPRODUCT10.2.0ORADATAO
RCLREDO01.LOG',options=>dbms_logmnr.new);
PL/SQL 过程已成功完成。
------new指定一个新的日志

sys@ORCL> execute dbms_logmnr.add_logfile(logfilename=>'D:ORACLEPRODUCT10.2.0ORADATAO
RCLREDO03.LOG',options=>dbms_logmnr.addfile);
-----若有多个日志要分析的话,就要addfile
-----若要移除日志的话就要DBMS_LOGMNR.REMOVEFILE
第二步,启动logmnr
sys@ORCL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
PL/SQL 过程已成功完成。
-----这是使用online catalog的方式分析日志
-----启动分析的时候,可以限制时间范围,也可以指定起始SCN和结束SCN
第三步,查看分析的结果
-----只能在当前会话中查看,其他会话不可以查看到结果集
sys@ORCL> select username,timestamp,sql_redo from v$logmnr_contents
2 where seg_name='EMP' and rownum<=2;

USERNAME TIMESTAMP SQL_REDO
-------- -------------- ------------------------------------------------------------
U_OMAR 10-9月 -07 create table emp as select * from scott.emp where 1=0;
U_OMAR 10-9月 -07 insert into "U_OMAR"."EMP"("EMPNO","ENAME","JOB","MGR","HIRE
DATE","SAL","COMM","DEPTNO") values ('7369','SMITH','CLERK',
'7902',TO_DATE('17-12月-80', 'DD-MON-RR'),'800',NULL,'20');
-----结束Logmnr
sys@ORCL> execute dbms_logmnr.end_logmnr;

PL/SQL 过程已成功完成。
---------不用logmnr字典的方式来进行logmnr
sys@ORCL> execute dbms_logmnr.start_logmnr();
PL/SQL 过程已成功完成。
sys@ORCL> execute dbms_logmnr.add_logfile(logfilename=>'D:ORACLEPRODUCT10.2.0ORADATAO
RCLREDO01.LOG',options=>dbms_logmnr.new);
PL/SQL 过程已成功完成。
----------不用任何字典的方式
sys@ORCL> execute dbms_logmnr.start_logmnr();
sys@ORCL> select username,timestamp,sql_redo from v$logmnr_contents
2 where username='U_OMAR' AND UPPER(SQL_REDO) LIKE 'INSERT%' AND ROWNUM<=2;

USERNAME TIMESTAMP SQL_REDO
-------- -------------- ------------------------------------------------------------
U_OMAR 10-9月 -07 insert into "UNKNOWN"."OBJ# 18"("COL 1","COL 2","COL 3","COL
4","COL 5","COL 6","COL 7","COL 8","COL 9","COL 10","COL 11
","COL 12","COL 13","COL 14","COL 15","COL 16","COL 17") val
ues (HEXTORAW('c306471b'),HEXTORAW('c306471b'),HEXTORAW('c13
e'),HEXTORAW('454d50'),HEXTORAW('c102'),NULL,HEXTORAW('c103'
),HEXTORAW('786b090a161b09'),HEXTORAW('786b090a161b09'),HEXT
ORAW('786b090a161b09'),HEXTORAW('c102'),NULL,NULL,HEXTORAW('
80'),NULL,HEXTORAW('c107'),HEXTORAW('c102'));

U_OMAR 10-9月 -07 insert into "UNKNOWN"."OBJ# 14"("COL 1","COL 2","COL 3","COL
4","COL 5","COL 6","COL 7","COL 8","COL 9","COL 10","COL 11
","COL 12","COL 13","COL 14","COL 15","COL 16","COL 17","COL
18","COL 19") values (HEXTORAW('c10c'),HEXTORAW('c107'),HEX
TORAW('c3020334'),HEXTORAW('c104'),HEXTORAW('c109'),HEXTORAW
('c102'),HEXTORAW('c109'),HEXTORAW('c102'),HEXTORAW('c516303
1252e'),HEXTORAW('c2021d'),HEXTORAW('80'),HEXTORAW('c13e'),H
EXTORAW('80'),HEXTORAW('80'),HEXTORAW('80'),HEXTORAW('80'),H
EXTORAW('80'),HEXTORAW('c306471b'),HEXTORAW('c30e0e1e'));
----------------查询出来的信息,都是没有经过转换的ID
G:使用Logmnr分析DDL操作:
要分析DDL,必须使用字典文件存放在日志中。即要把DB放在ARCHIVE上

sys@ORCL> conn u_omar/biohazard
已连接。
u_omar@ORCL> drop table emp;

表已删除。
以下为分析步骤:
sys@ORCL> execute dbms_logmnr.add_logfile(logfilename=>'D:ORACLEPRODUCT10.2.0ORADATAO
RCLREDO01.LOG',options=>dbms_logmnr.new);

PL/SQL 过程已成功完成。

sys@ORCL> execute dbms_logmnr.start_logmnr(dictfilename=>'D:oraclelogmnrdict.ora',optio
ns=>dbms_logmnr.ddl_dict_tracking);
-------------------dictfilename使用的是字典文件
-------------------ddl_dict_tracking是只申请DDL相关信息
PL/SQL 过程已成功完成。

sys@ORCL> col sql_redo format a410
sys@ORCL> col sql_redo format a40
sys@ORCL> select timestamp,sql_redo from v$logmnr_contents
2 where lower(sql_redo) like '%drop table%';

TIMESTAMP SQL_REDO
-------------- ----------------------------------------
10-9月 -07 drop table emp AS "BIN$EOgLIu3BSCysD4eTn
NFa7Q==$0" ;

sys@ORCL> execute dbms_logmnr.end_logmnr;

PL/SQL 过程已成功完成。

H:显示logmnr的信息

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16572356/viewspace-688448/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-11-26

  • 博文量
    39
  • 访问量
    74588