暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【达梦干货攻略】DM8归档日志挖掘

达梦大学 2021-01-29
3645

本章内容已在如下环境上测试:

①数据库版本:达梦DM8、dbms_logminer


一、配置源数据库

01

查看是否开启归档

使用如下语句查询RLOG_APPEND_LOGICARCH_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 = 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!

                        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_TIMEHIGH_TIME或者实际业务场景指定范围;SCN可参考V$LOGMNR_LOGS视图中LOW_SCNNEXT_SCN来指定。
                            OPTIONS参数参考如下表所列的可选模式,各模式可以通过 + 或者按位或来进行组合。其它位的值如 148 等目前不支持,配置后不会报错,但是没有效果。例如,组合全部模式,则取值2+16+64+2048=2130,那么 OPTIONS 值就是 2130
                            一个会话上仅能START一个LOGMNR,即只能执行一次START_LOGMNR,若要重新START需要执行终止操作,见步骤6。这里以不指定时间范围和SCN范围为例,启动所有添加的归档日志文件的分析,语句参考如下(OPTIONS=20662+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,这样才会成功。



                                    以上是本次干货攻略的分享内容,希望能给大家带来帮助,谢谢。


                                    往期回顾

                                    干货攻略丨达梦逻辑导入使用总结

                                    干货攻略丨达梦SQL优化之LIKE前后百分号
                                    干货攻略丨DM巧用分区交换将非分区表转换为分区表
                                    干货攻略丨DM8并行查询


                                    最后修改时间:2021-01-29 16:36:47
                                    文章转载自达梦大学,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                    评论