DM8归档日志挖掘

一、配置源数据库

01

查看是否开启归档

使用如下语句查询RLOG_APPEND_LOGIC和ARCH_INI是否为1,保证数据库已开启归档模式:

select para_name, para_value from v$dm_ini where para_name in ('ARCH_INI','RLOG_APPEND_LOGIC');

02

修改dm.ini参数

设置RLOG_APPEND_LOGIC=1

alter system set 'RLOG_APPEND_LOGIC'=1 both;

03

配置归档

alter database mount;alter database add archivelog 'dest=/dmarch,type=local,file_size=500,space_limit=10240';alter database archivelog;alter database open;

04

验证结果

二、源数据库模拟数据操作

01

创建表

在HR用户下创建T_LOG_TEST表,并插入表数据,使用一条UPDATE语句更新数据。SQL语句参考如下:

a. 创建用户

create user HR identified by "HR1234567";grant dba to HR;

b.创建表

CREATE TABLE HR.T_LOG_TEST (ID INT,NAME VARCHAR(50)) ;INSERT INTO HR.T_LOG_TEST VALUES(1,'LIMING');INSERT INTO HR.T_LOG_TEST VALUES(2,'DAMENG');INSERT INTO HR.T_LOG_TEST VALUES(3,'TEST');INSERT INTO HR.T_LOG_TEST VALUES(4,'HANMEIMEI');INSERT INTO HR.T_LOG_TEST VALUES(5,'DAIWEI');INSERT INTO HR.T_LOG_TEST VALUES(6,'JACK');UPDATE HR.T_LOG_TEST SET ID = ID + 10 WHERE ID <10;COMMIT;

02

归档

alter system archive log current;

03

创建表空间及用户

执行如下命令创建表空间LOGTEST.DBF,用户LOGTEST,并赋予LOGTEST用户查询T_LOG_TEST表权限。

alter system archive log current;

04

归档

05

查看归档

执行如下sql:

select sequence# seq, name , to_char(first_time,'yyyy-mm-dd hh24:mi:ss') first_time, to_char(next_time,'yyyy-mm-dd hh24:mi:ss') next_time, first_change# , next_change# from v$archived_log;

三、配置本地数据库

01

修改dm.ini参数并配置归档

02

查询魔数

SELECT DB_MAGIC FROM V$RLOG;

03

下载源端归档日志到本地(不要使用xftp下载,会损坏日志)

dmmdf.exe TYPE=2 FILE="D:\dmdbms\arch\ARCHIVE_LOCAL1_0x7D58A8BD[0]_2020-11-27_20-53-16.log"dmmdf.exe TYPE=2 FILE="D:\dmdbms\arch\ARCHIVE_LOCAL1_0x7D58A8BD[0]_2020-11-27_21-00-45.log"dmmdf.exe TYPE=2 FILE="D:\dmdbms\arch\ARCHIVE_LOCAL1_0x7D58A8BD[0]_2020-11-27_21-02-56.log"

04

修改归档日志魔数(依次修改三个归档日志魔数)

PS D:\dmdbms\bin> dmmdf.exe TYPE=2 FILE="D:\dmdbms\arch\ARCHIVE_LOCAL1_0x7D58A8BD[0]_2020-11-27_20-53-16.log"dmmdf V8**********************************************************1 sig = DMALOG2 ver = 70063 chksum = 14485881214 sta = 15 n_magic = 06 db_magic = 21029623657 len = 2739208 free = 2739209 clsn = 4048310 clsn_fil = 011 clsn_off = 409612 pemnt_magic = 2228609213 fil_id = 015 next_seq = 398516 g_next_seq = 398517 arch_lsn = 3793118 arch_seq = 397119 dbversion = 0x7000b20 min_exec_version = V8.1.1.121 min_dct_version = 422 p_db_magic = 023 n_apply_ep = 024 apply_info_lsn = 0pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)25 recv_p_db_magic = 026 recv_n_apply_ep = 0recv_pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)recv_apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)**********************************************************You can only reset sta(4) or db_magic (6) or clsn (9) or clsn_fil(10) or clsn_off(11) or pemnt_magic(12) or fil_id(13) or next_seq(15) or g_next_seq(16) or p_db_magic(20) or n_apply_ep(21).Please input the num which one you want to change, q to quit: 6+++++++++++++++--db_magic值编号为6因此这里输入6++++++++++++++++Input the new value: 1021174950+++++++++++++++填写本地库的db_magic值+++++++++++++++++++++++++**********************************************************1 sig = DMALOG2 ver = 70063 chksum = 3997038744 sta = 15 n_magic = 06 db_magic = 10211749507 len = 2739208 free = 2739209 clsn = 4048310 clsn_fil = 011 clsn_off = 409612 pemnt_magic = 2228609213 fil_id = 015 next_seq = 398516 g_next_seq = 398517 arch_lsn = 3793118 arch_seq = 397119 dbversion = 0x7000b20 min_exec_version = V8.1.1.121 min_dct_version = 422 p_db_magic = 023 n_apply_ep = 024 apply_info_lsn = 0pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)25 recv_p_db_magic = 026 recv_n_apply_ep = 0recv_pkg_seq_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)recv_apply_lsn_arr: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)**********************************************************Do you want to quit and save the change to file (y/n): y -------保存Save to file success!

05

添加归档日志文件到本地库

源数据库模拟数据操作在两个最新的归档日志中,所以此时添加最新的三个归档日志进行分析。

DBMS_LOGMNR.ADD_LOGFILE('D:\dmdbms\arch\ARCHIVE_LOCAL1_0x7D58A8BD[0]_2020-11-27_20-53-16.log');DBMS_LOGMNR.ADD_LOGFILE('D:\dmdbms\arch\ARCHIVE_LOCAL1_0x7D58A8BD[0]_2020-11-27_21-00-45.log');DBMS_LOGMNR.ADD_LOGFILE('D:\dmdbms\arch\ARCHIVE_LOCAL1_0x7D58A8BD[0]_2020-11-27_21-02-56.log');

06

查询归档信息

可以通过动态视图V$LOGMNR_LOGS查询 ADD_LOGFILE 添加的归档日志文件信息,查询结果如下:

select low_scn, next_scn, low_time, high_time, log_id, filename from v$logmnr_logs;

07

启动归档日志文件分析

执行ADD_LOGFILE添加日志文件后,需要调用START_LOGMNR过程启动归档日志分析,在调用时可指定START_SCN, END_SCN, START_DATE, END_DATE, OPTIONS等参数。

时间参数值可根据V$LOGMNR_LOGS中LOW_TIME和HIGH_TIME或者实际业务场景指定范围;SCN可参考V$LOGMNR_LOGS视图中LOW_SCN和NEXT_SCN来指定。

OPTIONS参数参考如下表所列的可选模式,各模式可以通过 + 或者按位或来进行组合。其它位的值如 1、4、8 等目前不支持,配置后不会报错,但是没有效果。例如,组合全部模式,则取值2+16+64+2048=2130,那么 OPTIONS 值就是 2130。

一个会话上仅能START一个LOGMNR,即只能执行一次START_LOGMNR,若要重新START需要执行终止操作,见步骤6。这里以不指定时间范围和SCN范围为例,启动所有添加的归档日志文件的分析,语句参考如下(OPTIONS=2066是2+16+2048的组合):

DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2066);

四、查看归档日志文件分析结果

01

查看日志分析过程

select * from V$LOGMNR_PARAMETERS;

02

查看分析结果

执行START_LOGMNR后,可以通过动态视图V$LOGMNR_CONTENTS查看归档日志文件的分析结果,语句如下:

SELECT OPERATION_CODE , OPERATION, SCN, SQL_REDO, TIMESTAMP ,SEG_OWNER, TABLE_NAME FROM V$LOGMNR_CONTENTS WHERE TABLE_NAME is not null;

查询结果如下图,从SQL_REDO字段中可以看出包含了我们步骤2中执行的所有操作。

终止归档日志文件分析

归档日志分析完毕后,执行如下语句结束归档日志分析。

DBMS_LOGMNR.END_LOGMNR();

执行该语句后查询V$LOGMNR_LOGS和V$LOGMNR_PARAMETERS将不会有数据,此时查询V$LOGMNR_CONTENTS也会报错。此3个动态性能视图都是会话级别,其他会话无法查询该视图数据。

到此一个完整的日志挖掘分析步骤已完成,如果要重新启动归档日志的分析,需要执行此步骤后,重新执行3.4-3.7步操作。若在添加文件ADD_LOGFILE之后,想移除对该文件的分析,在执行START_LOGMNR之前,可执行REMOVE_LOGFILE删除此文件;若已经执行了START_LOGMNR,则需执行END_LOGMNR结束本次分析才能开启下一次分析操作。

五、注意

做日志挖掘时候,始终用同一个会话窗口执行sql,这样才会成功。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值