Logminer使用(追加日志模式)

来源:互联网 发布:php二次开发有前途没 编辑:程序博客网 时间:2024/05/17 03:09
1、数据同步Oracle数据库设置

Oracle数据使用LogMiner查看执行SQL语句,其中需要进行如下四步骤是指:

1、设置数据库为归档模式;

2、设置LogMiner字典文件路径等;

3、创建数据同步用户(如用户名为LOGMINER,该用户拥有DBA权限)

4、验证配置是否成功;

 

 

设置为归档模式。

 

LogMiner设置:

创建LogMnr文件夹:

[oraclerac@ryxr1 ~]$ mkdir logmnr

[oraclerac@ryxr1 ~]$ cd logmnr/

[oraclerac@ryxr1 logmnr]$ pwd

/home/oraclerac/logmnr

设置LogMiner字典文件路径:

SQL> create directory utlfile as '/home/oraclerac/logmnr';

SQL> alter system set utl_file_dir='/home/oraclerac/logmnr' scope=spfile;

开启LogMiner日志补充模式:

SQL> alter database add supplemental log data;

 

重启数据库进行验证。

 

查看LogMiner文件夹是否设置:

#show parameter utl_file_dir;

 alter system set utl_file_dir='/home/oraclerac/logmnr' scope=spfile;

创建数据同步用户:

#create user logminer identified by admin;

# grant dba to logminer;

2、使用LogMiner读取日志

设置完毕后可以对归档和在线日志进行分析。特别是需要开启LogMiner日志补充模式,如果没有开始LogMiner补充模式将无法查看DDL语句,按照测试结果看,只有开始LogMiner日志补充模式后,才能查看DDL语句,在此之前进行DDL将无法进行查看。

使用LogMiner读取在线日志。

创建数据字典文件

--以LOGMINER用户(DBA权限)登录,生成字典文件

     EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/home/oraclerac/logmnr');
    该字典文件是可选的,但是如果没有他,LogMiner解释出来的语句中关于数据字典中的部分(如表名、列名等)和数值都是16进制的形式,是无法直接理解的。
例如,下面的sql语句: INSERT INTO dm_dj_swry (rydm, rymc) VALUES (00005, '张三'); 
logminer解释出来的结果将是下面这个样子, insert into Object#308(col#1, col#2) values (hextoraw('c30rte567e436'), hextoraw('4a6f686e20446f65'));
创建数据字典的目的就是让logminer引用涉及到内部数据字典中的部分时为他们实际的名字,而不是系统内部的16进制。
数据字典文件是一个文本文件,使用包DBMS_LOGMNR_D来创建。如果我们要分析的数据库中的表有变化,影响到库的数据字典也发生变化,
这时就需要重新创建该字典文件。另外一种情况是在分析另外一个数据库文件的重作日志时,也必须要重新生成一遍被分析数据库的数据字典文件。
首先指定数据字典文件的位置,也就是添加一个参数UTL_FILE_DIR,该参数值为服务器中放置数据字典文件的目录。
重新启动数据库,使新加的参数生效,然后创建数据字典文件。

--需要确认当前处于联机状态的日志文件(active状态)

--创建列表,加入需要分析的日志文件

    BEGIN

dbms_logmnr.add_logfile(logfilename=>'/home/oraclerac/oracle/oradata/REDO03.LOG',options=>dbms_logmnr.NEW);

END;

--添加其他日志文件到列表

    BEGIN

dbms_logmnr.add_logfile(logfilename=>'+DATA/ARCH/RYXRDB/1_563_866220994.dbf',options=>dbms_logmnr.ADDFILE);

    END;


使用LogMiner进行分析

     EXECUTE dbms_logmnr.start_logmnr(dictfilename=>'/home/oraclerac/logmnr/dictionary.ora');

     观察分析结果

 

    SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents WHERE  seg_owner='LOGMINER';

     分析后释放内存:

     execute dbms_logmnr.end_logmnr;

 

使用LogMiner读取归档日志:

同上,只需要将redo文件修改为指定的归档文件即可。

生产环境中,一般会将源库的数据字典和日志文件copy到测试库上进行分析。

supplement log 追加日志
   在创建logical standby database,ogg和stream的时候需要创建。
   当数据库启用了补充日志(supplemental logging),每一条update 语句写redo 的时候会附加列值唯一信息
 1. 如果表定义了主键,则主键值会随同被更新列一起做为update 语句的一部分,以便执行时区别哪
些列应该被更新。
 2. 如果没有主键,则非空的唯一索引/约束会随同被更新列做为update 语句的一部分,以便执行时区
分哪些列应该被更新,如果该表有多个唯一索引/约束,则oracle 自动选择最短的那个。
 3. 如果表即无主键,也没有定义唯一索引/约束,所有可定长度的列连同被更新列作为update 语句的
一部分。更明确的话,可定长度的列是指那些除:long,lob,long raw,object type,collection 类型外的列。

在通常情况下,redo log 只记录的进行恢复所必需的信息,
但是这些信息对于我们使用redo log进行一些其他应用时是不够的,例如在 redo log中使用rowid唯一标识一行而不是通过Primary key,
如果我们在另外的数据库分析这些日志并想重新执行某些dml时就可能会有问题,因为不同的数据库其rowid代表的内容是不同的。
在这时候就需要一些额外的信息(columns)加入redo log,这就是supplemental logging。
supplemental logging分为两个级别database_level and table_level,其中database_level级别分为两种,
minimal supplemental logging and identification key logging,其中minimal supplemental logging不会显著增加系统的负担,
但是identification key logging对系统负担比较大,在默认情况下oracle不会设置任何supplemental logging,
但是如果要使用logminer,oracle建议至少设置minimal supplemental logging


--------------database level
--停止supplemental log
alter database drop supplemental log data
--默认启动方法
alter database add supplemental log data
默认启动方法不是完全启动,建议使用下面的指定启动的方法
--指定具体的启动的项对应v$database 中的supplemental_log_data_pk,supplemental_log_data_ui
alter database add supplemental log data (primary key ,unique index) columns
--检查修改结果
select supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_ui
from v$database
--停止supplemental log
SQL> alter database drop supplemental log data;
alter database drop supplemental log data
*
第 1 行出现错误:
ORA-32589: 无法删除最小补充事件记录
--使用
alter database drop supplemental log data (primary key ,unique index) columns


--------------------table level
 
 
alter table emp all supplemental log group emp_log_grp(emp_id) always
SELECT * FROM dba_Log_groups WHERE owner='EMP'
 
inimal supplemental logging logs the minimal amount of information needed for LogMiner to identify, group, and merge the redo operations associated with DML changes. It ensures that LogMiner (and any product building on LogMiner technology) has sufficient information to support chained rows and various storage arrangements, such as cluster tables and index-organized tables.
表级补全日志需要在最小补全日志打开的情况下才起作用。只有先做了alter database add supplemental log data;
才能启用表级补全日志。

http://blog.itpub.net/28258625/viewspace-1386038/
http://blog.sina.com.cn/s/blog_8317516b010104rd.html
http://blog.csdn.net/zq9017197/article/details/7074641




0 0
原创粉丝点击