logminer

更新时间:2023-07-22 19:41:38 阅读: 评论:0

racle Databa 10g Enterpri Edition Relea 10.2.0.1.0中进行测试,
没有设置minimal supplemental log Log miner
2008-11-8 唐名杰(beybey911)
一、 Log miner 的作用
Oracle 从8i 开始引进log miner ,它给我们提供了一种直接观察redo log 内部内容的方式,日志文件中清晰的记录着数据库中发生的所有变化,有时为了确定数据库中发生某个变化的确切时间(例如进行数据库的不完全恢复或TSPITR ),除了通过对日志进行分析几乎没有别的办法。另外当数据库中的信息被莫名其妙的更改时,我们可以通过log miner 了解改变的细节。在某些情况下,甚至可以利用log miner 来分析特定表上的dml 频率。总之,log miner 为我们提供了一个便捷的方式了解数据库的改变。
二、 log miner 相关概念
1. 字典文件
Oracle 使用数字标识符来标识对象的信息,例如为每张表指定一个对象标识符,并且每一列有一个列
标识符,不同的数据类型也有相应的标识符。Redo log 中记录的也是这些标识符,对于我们而言要看懂这些标识符几乎是不可能的。为此log miner 提供了产生字典文件的功能,字典文件中记录了这些标识符和具体对象的对应关系,因此字典文件只能由产生日志的数据库生成。
2. Supplemental Logging (扩充日志)
在通常情况下,redo log 中只记录了进行恢复所必需的信息,但是有时候这些信息对于我们使用redo log
进行一些其他应用时是不够的,例如在redo log 中是使用rowid 唯一标识一行而不是通过primary key ,如果我们在另外的数据库分析这些日志并想重新执行某些dml 时就可能会有问题因为不同的数据库其rowid 代表的内容是不相同的。在这些时候,就需要将一些额外的信息(columns ) 加入redo log ,这就是Supplemental Logging 。Supplemental Logging 分为两个级别databa_level and table_level.其中databa_level 分为两种minimal supplemental logging and identification key logging ,其中minimal supplemental logging 不会显著增加系统负担,但是identification key logging 对系统负担增加较大。在默认情况下,oracle 不会设置任何Supplemental Logging ,但是如果要使用log miner , oracle 建议至少设置minimal supplemental logging 。通过SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;可以查询supplemental log 的状态,通
过ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;可以为系统设置minimal supplemental logging 。
millipore我在O ging 时,从v$logmnr_contents 中几乎得不出什么有用的信息。
三、 log iner 的一般流程
mental Logging )
息如urname ,ssion_info 等,oracle 建议至少应该允许
12月英文缩写
min 2. 已经介绍过了。Log miner 提供了三种方式生成字典文件。
式,但是其要求也是明显的。数据库必须处于打开状态、
必须from_online_catalog);
_TRACKING 选项不可用。
2) 将字典redo log 中,因此这就要求数据库必须打开而且处于archvielog
模式从v$archived_log 中查询出字典文件所在的log 。
SEL RY_BEGIN='YES';
accidental
IONS => -
DO_LOGS);
3) 将字典文件保存到文件消耗的资源比较少,也不会阻碍ddl 语句,但是其并不保证字典
文件详细情况请阅读Oracle® Databa Utilities
m 1. 设置扩充日志(Supple 为了从日志中获得额外的一些重要的信imal supplemental logging 。 ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
创建一个字典文件
字典文件的作用上面1) 使用联机数据字典(online catalog )
使用online catalog 是最简单易用的方在产生redo log 的数据库中进行log miner ,而且online catalog 中只反应了对象最新的状态(如
果一个表结构发生了改变那么在改变之前的对象将无法识别)。
EXECUTE Dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_注意:1、使用这种方式时,要先指定需要分析的日志文件
2、DBMS_LOGMNR.START_LOGMNR 的DDL_DICT 文件析取到redo log 中
这种模式将字典文件析取到。为保持字典文件的一致性,在析取期间会阻赛所有的ddl 语句而且不可避免的会增加系统
负担,因此这种操作应该在数据库不繁忙时进行。根据字典文件的大小不同,它可能包含在一个
或多个log 文件中,在进行日志分析时,也就需要将这些字典文件所在的log 文件包含在分析日
志列表中。
我们可以ECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONA SELECT NAME FROM V$ARCHIVED_LOG WHERE DICTIONARY_END='YES';
通过以下语句将字典文件析取到redo log ;
EXECUTE DBMS_LOGMNR_D.BUILD( OPT DBMS_LOGMNR_D.STORE_IN_RE 本文件
aipa
将字典文件保存到文本文的一致性。由于文本文件要以操作系统文件的形式保存在操作系统中,所以首先需要设置
utl_file_dir 参数(静态参数,需重启生效),然后通过以下语句将其析取到文本文件。
EXECUTE DBMS_LOGMNR_D.BUILD('a', -
-
);
对于字典分析。比较上述三种析取方式,
3. 析的日志文件
指定需要分析的日志,对于确定需要分析的日志列表可能需要应用系统提供
一定NAME => '/oracle/logs/log1.f', -
的列表
一个log
LOGFILENAME => '/oracle/logs/log2.f');---- REMOVE_LOGFILE 从列表中删除一个log
在o 4. GMNR.START_LOGMNR(options=>…..)
5. 容并不永久保存在某个数据对象中,每查询一次都将对日志文件分析
一遍行了      .COLUMN_PRESET 可
6.                              '/oracle/databa/',        DBMS_LOGMNR_D.STORE_IN_FLAT_FILE 文件,oracle 建议进行定期备份字典文件以利于后续的日志一般而言应该是析取到redo log 较为方便实用,不需要额外的备份方案,字典文件随归档日志的备份而备份。
指定要分进行日志分析前必须要的辅助信息以确定一个大概的时间范围然后通过查询v$archived_log 确定具体的日志,当字典文件析取到redo log 中时注意要紧相应的log 加入分析列表。
肖申克的救赎经典台词EXECUTE DBMS_LOGMNR.ADD_LOGFILE(LOGFILE        OPTIONS => DBMS_LOGMNR.NEW);  --- DBMS_LOGMNR.NEW 表明一个新EXECUTE DBMS_LOGMNR.ADD_LOGFILE (LOGFILENAME => '/oracle/logs/log2.f', -
OPTIONS => DBMS_LOGMNR.ADDFILE); ---- DBMS_LOGMNR.ADDFILE 增加EXECUTE DBMS_LOGMNR.REMOVE_LOGFILE( -
如果在源数据库上进行log miner 时,也可以通过starttime\endtime 或startscn\endscn 界定分析范围并
ptions 选项加上DBMS_LOGMNR.CONTINUOUS_MINE ,就不用指定具体的log 文件,log miner 会通过控制文件自动确定并添加要分析的log 文件(必须处于归档模式,而且归档的日志文件以被移走会报错ORA-01291: missing logfile )。
开始日志分析
Execute DBMS_LO Options 的值根据上面所选则的方式不同而不同。
查询 V$LOGMNR_CONTENTS
V$LOGMNR_CONTENTS 的内,所以如果要重复查询可以使用CTAS(Create table as lect * from V$LOGMNR_CONTENTS).
log miner 支持对V$LOGMNR_CONTENTS 进行基于列的查询,可以查询某一个表中的特定列是否进dml 操作,相应的函数为DBMS_LOGMNR.MINE_V ALUE (redo_value/undo_value,’column_name’),
DBMS_LOGMNR.COLUMN_PRESET (redo_value/undo_value,’column_name’)
DBMS_LOGMNR.MINE_V ALUE 函数返回该列的原值或现值,DBMS_LOGMNR 以反应出该列是否进行了操作。
结束日志分析
在日志分析完成后一定要记得使用d_logmnr;只有这样才会释放log miner所占用的系统资源,并关闭redo log。
四、 Dbms_logmnr. start_logmnr的相关options介绍英语培训价格迈格森
PROCEDURE START_LOGMNR
参数名称类型输入/输出默认值?
------------------------------ -----------------------          ------    --------
STARTSCN NUMBER IN DEFAULT
ENDSCN NUMBER IN DEFAULT
STARTTIME DATE IN DEFAULT
ENDTIME DATE IN DEFAULT
DICTFILENAME V ARCHAR2 IN DEFAULT
OPTIONS BINARY_INTEGER IN DEFAULT 在START_LOGMNR中的options参数中有很多实用的选项,下面简要介绍几个,具体的内容都可以从oracle documents上找到。
1、DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG选项,使用该选项时字典文件将使用当前数据字
典,就不需要使用dbms_logmnr_d.build()创建;
2、DBMS_LOGMNRMITTED_DATA_ONLY选项,指定V$LOGMNR_CONTENTS中只显示提交的
内容;
3、DBMS_LOGMNR.SKIP_CORRUPTION选项,指定log miner跳过redo log中的坏块,默认情况下log
miner遇到坏块会中断。对于SKIP_CORRUPTION的情况下,每次遇到坏块都会在V$LOGMNR_CONTENTS 返回一条记录,operation列为‘corrupted_blocks’,status为‘1343’,info列显示跳过的坏块数量。
4、DBMS_LOGMNR.NO_ROWID_IN_STMT选项,指定输出的sql中不包含rowid信息。因为不同的数据
库rowid代表的内容是不一样的,因此当我们要在别的数据库中执行源数据库日志中的重构sql时就需要将rowid去掉,但是要注意如果源数据库中没有使用identification key logging时,重构的sql去掉rowid 后可能会造成错误的执行结果。
5、DBMS_LOGMNR.PRINT_PRETTY_SQL选项,格式化sql_redo,sql_undo的输出使其更可读;当需要多
个选项同时使用时用‘+’连接即可,例如options=>DBMS_LOGMNR.PRINT_PRETTY_SQL+
DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG
五、 Logminer主要的视图、过程
a)主要视图:
V$LOGMNR_DICTIONARY                  --字典文件相关信息
V$LOGMNR_LOGS --分析的日志列表
V$LOGMNR_PARAMETERS --log miner的参数
visit怎么读
V$LOGMNR_CONTENTS --得到的分析结果
具体内容可参考Oracle® Databa Reference
b)主要过程
DBMS_LOGMNR_D.BUILD(); --建立字典文件
DBMS_LOGMNR.ADD_LOGFILE();                --建立日志文件列表
DBMS_LOGMNR.START_LOGMNR();              --开始日志分析
DBMS_LOGMNR.END_LOGMNR();                --结束日志分析
注意要使用这些过程必须以sys用户登录或具有EXECUTE_CATALOG_ROLE权限。
六、 logminer的常见问题
1、Column USERNAME and SESSION_INFO are NULL in V$LOGMNR_CONTENTS
放鞭炮的英文
¾确认设置了minimum supplemental logging
¾确认所须的redo log都在v$logmnr_logs中,如没有则add
¾确认compatible设置为8.1.0 or 更高vrio
¾对于oracle 9i及以下版本,确认transaction_auditing=true; 10g中该参数已没有了。
2、UNSUPPORTED Value In Sql_redo,Operation Columns Of V$Logmnr_contents
¾1) Simple and nested abstract datatypes (ADTs)              --简单的和嵌套的抽象数据类型
2) Collections (nested tables and VARRAYs)                  --集合(嵌套表和数组)
3) Object Refs --引用对象
4) Index organized tables (IOTs)                              --索引组织表
5) CREATE TABLE AS SELECT of a table with a clustered key --集群表
以上五种类型的对象log miner不支持
¾确认启用了supplemental logging
oconnor3、ORA-06532 Subscript outside of limit ORA-06512 at “SYS.DBMS_LOGMNR_D” , Line 793
¾当创建一个字典文件时可能遇到这个错误,需要修改oracle脚本,$oracle_home/rdbms/admin下的
dbmslmd.sql,
TYPE COL_DESC_ARRAY IS V ARRY(513) OF COL_DESCRIPTION 改为
TYPE COL_DESC_ARRAY IS V ARRY(700) OF COL_DESCRIPTION
然后已sys重新运行该脚本。对于oracle 9i 及以后版本该问题已不会出现。

本文发布于:2023-07-22 19:41:38,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/78/1111383.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:文件   日志   字典   分析   数据库
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图