DM8归档日志挖掘

1 配置源数据库

1.1 查看是否开启归档

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

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

1.2 修改dm.ini参数

设置RLOG_APPEND_LOGIC=1

alter system set 'RLOG_APPEND_LOGIC'=1 both;

1.3 配置归档

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

1.4验证结果

2 源数据库模拟数据操作

2.1 创建表

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

a. 创建用户

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

b. 创建表(当创建表时候,选择写好脚本,模拟数据和直接执行dml语句模拟数据,挖掘的日志有区别的,详细见下文,模拟环境是用脚本模拟数据)

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;

2.2 切换归档

alter system archive log current;

2.3 创建表空间及用户

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

2.4 切换归档

alter system archive log current;

2.5 查看归档,执行如下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;

3 配置本地数据库

3.1 修改dm.ini参数和配置归档

3.2 查询魔数

SELECT DB_MAGIC FROM V$RLOG;

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

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

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"
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 = DMALOG
2 ver = 7006
3 chksum = 1448588121
4 sta = 1
5 n_magic = 0
6 db_magic = 2102962365
7 len = 273920
8 free = 273920
9 clsn = 40483
10 clsn_fil = 0
11 clsn_off = 4096
12 pemnt_magic = 22286092
13 fil_id = 0
15 next_seq = 3985
16 g_next_seq = 3985
17 arch_lsn = 37931
18 arch_seq = 3971
19 dbversion = 0x7000b
20 min_exec_version = V8.1.1.1
21 min_dct_version  = 4
22 p_db_magic = 0
23 n_apply_ep = 0
24 apply_info_lsn = 0
   pkg_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 = 0
26 recv_n_apply_ep = 0
   recv_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 = DMALOG
2 ver = 7006
3 chksum = 399703874
4 sta = 1
5 n_magic = 0
6 db_magic = 1021174950
7 len = 273920
8 free = 273920
9 clsn = 40483
10 clsn_fil = 0
11 clsn_off = 4096
12 pemnt_magic = 22286092
13 fil_id = 0
15 next_seq = 3985
16 g_next_seq = 3985
17 arch_lsn = 37931
18 arch_seq = 3971
19 dbversion = 0x7000b
20 min_exec_version = V8.1.1.1
21 min_dct_version  = 4
22 p_db_magic = 0
23 n_apply_ep = 0
24 apply_info_lsn = 0
   pkg_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 = 0
26 recv_n_apply_ep = 0
   recv_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!

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

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

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');

3.6 查询归档信息

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

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

3.7 启动归档日志文件分析

      执行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);

4. 查看归档日志文件分析结果

4.1 查看日志分析过程

select * from V$LOGMNR_PARAMETERS;

4.2 查看分析结果

执行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结束本次分析才能开启下一次分析操作。

5 注意

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

  2.挖掘结果,只能挖掘单个sql执行的记录,当使用脚本执行批量作业时候,只记录脚本第一条。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

竹蜻蜓vYv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值