ITPub博客

首页 > 数据库 > 国内数据库 > DM8 日志挖掘

DM8 日志挖掘

原创 国内数据库 作者:LEVEL7 时间:2021-05-14 14:13:58 0 删除 编辑

1.     适用场景

相信许多DBA同学都碰到过这样的情况,由于各种原因需要对数据库进行不完全的恢复,但又不确定应该恢复到哪个时间点或者SCN。在DM中,用户可以使用DBMS_LOGMNR包对归档日志进行挖掘,重构出DDL和DML等操作,并通过获取的信息进行更深入的分析;同样,可以对归档日志文件进行恢复被误操作的数据,并进行故障跟踪,定位执行误操作的用户信息。目前DBMS_LOGMNR只支持归档日志进行分析,配置归档后,还需要将dm.ini中的RLOG_APPEND_LOGIC选项配置为1或2。

本文实验环境的 DM 数据库版本为:DM Database Server 64 V8-1-2-2-21.05.07-138925-10006-ENT  Pack4

2.     配置源数据库

1)     检查是否开启了归档和追加日志

select

        para_name,

        para_value

from

        v$dm_ini

where

        para_name in ('ARCH_INI', 'RLOG_APPEND_LOGIC');

PARA_NAME         PARA_VALUE

----------------- ----------

RLOG_APPEND_LOGIC 0

ARCH_INI          0

2)     修改dm.ini参数

设置RLOG_APPEND_LOGIC=1

注:RLOG_APPEND_LOGIC 需要设置为 1 或 2,1 代表如果有主键列,记录 UPDATE 和 DELETE 操作时只包含主键列信息,若没有主键列则包含所有列信息;2 代表不论是否有主键列,记录 UPDATE 和 DELETE 操作时都包含所有列的信息。

alter system set 'RLOG_APPEND_LOGIC'=1 both;

3)     配置归档

alter database mount;

alter database add archivelog 'dest=/dmarch,type=local,file_size=256,space_limit=1024';

alter database archivelog;

alter database open;

4)     验证结果

select

        para_name,

        para_value

from

        v$dm_ini

where

        para_name in ('ARCH_INI', 'RLOG_APPEND_LOGIC');

PARA_NAME         PARA_VALUE

----------------- ----------

RLOG_APPEND_LOGIC 1

ARCH_INI          1

3.     源数据库模拟数据操作

1)     创建表空间、用户、表

create tablespace tbs_logmnr datafile 'tbs_logmnr.dbf' size 64;

create user logmnr identified by "dameng123" default tablespace tbs_logmnr;

grant dba, resource, vti to logmnr;

create table logmnr.users as

select * from dba_users;

update logmnr.users set user_id=100 where user_id<=50331700;

commit;

truncate table logmnr.users;

2)     归档日志切换

alter system switch logfile;

alter system archive log current;

alter database archivelog current;

3)     查看归档

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;

SEQ         NAME                                                         FIRST_TIME          NEXT_TIME           FIRST_CHANGE#        NEXT_CHANGE#       

----------- ------------------------------------------------------------ ------------------- ------------------- -------------------- --------------------

1           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-13_17-31-20.log 2021-05-13 21:11:31 2021-05-13 21:11:31 27728                32461

2           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-13_21-11-33.log 2021-05-13 21:11:31 2021-05-13 21:30:29 32462                32963

3           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-13_21-30-31.log 2021-05-13 21:30:29 2021-05-13 21:42:57 32964                33432

4           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_10-06-25.log 2021-05-13 21:42:57 2021-05-14 10:53:13 33433                33715

5           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-01-31.log 2021-05-14 10:53:13 2021-05-14 12:23:40 33716                34196

6           /dmarch/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-30-49.log 2021-05-14 12:23:40 2021-05-14 12:30:49 34197                34203

4.     开始日志挖掘

1)     查询魔数

select db_magic from v$rlog;

DB_MAGIC           

--------------------

1581226857

2)     下载源端归档日志到本地,修改归档日志魔数(依次修改2个归档日志魔数)

./dmmdf TYPE=2 FILE=/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-01-31.log

./dmmdf TYPE=2 FILE=/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-30-49.log

3)     添加一个或多个需要分析的归档日志文件

DBMS_LOGMNR.ADD_LOGFILE('/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-01-31.log');

DBMS_LOGMNR.ADD_LOGFILE('/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-30-49.log');

注:对于不在数据库默认归档路径下的归档日志,可以直接指定归档日志的绝对路径添加进分析列表。

4)     查询通过 ADD_LOGFILE 添加的归档日志文件

SELECT

        LOW_SCN  ,

        NEXT_SCN ,

        LOW_TIME ,

        HIGH_TIME,

        LOG_ID   ,

        FILENAME

FROM

        V$LOGMNR_LOGS;

LOW_SCN              NEXT_SCN             LOW_TIME                   HIGH_TIME                  LOG_ID    

-------------------- -------------------- -------------------------- -------------------------- -----------

FILENAME                                                          

-------------------------------------------------------------------

33716                34196                2021-05-14 10:53:13.510294 2021-05-14 12:23:40.627000 0

/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-01-31.log

 

34197                34361                2021-05-14 12:23:40.627000 2021-05-14 12:30:50.432000 1

/dmarch_logmnr/ARCHIVE_LOCAL1_0x4C89FA28[0]_2021-05-14_12-30-49.log

5)     启动归档日志文件分析

DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2128, STARTTIME=>TO_DATE('2021-05-14 11:30:00', 'YYYY-MM-DD HH24:MI:SS'), ENDTIME=>TO_DATE('2021-05-14 12:30:00', 'YYYY-MM-DD HH24:MI:SS'));

注:可以指定日志文件分析的时间段或SCN范围,同样可以指定Options的功能组合,如下:

Options :提供如下的可选模式,各模式可以通过+或者按位或来进行组合。其它位的值如1、4、8等目前不支持,配置后不会报错,但是没有效果。

Options

对应值

说明

COMMITTED_DATA_ONLY

2

仅从已交的事务的日志中挖掘信息

DICT_FROM_ONLINE_CATALOG

16

使用在线字典

NO_SQL_DELIMITER

64

拼写的 SQL 语句最后不添加分隔符

NO_ROWID_IN_STMT

2048

拼写的 SQL 语句中不包含 ROWID

6)     查看归档日志文件的分析结果

select

        TIMESTAMP       ,

        START_TIMESTAMP ,

        COMMIT_TIMESTAMP,

        OPERATION       ,

        OPERATION_CODE  ,

        ROLL_BACK       ,

        TABLE_NAME      ,

        ROW_ID          ,

        USERNAME        ,

        DATA_OBJ#       ,

        DATA_OBJV#      ,

        SQL_REDO        ,

        REDO_VALUE      ,

        UNDO_VALUE

from

        V$LOGMNR_CONTENTS

where

        table_name = 'xxx';

注:可以根据需要指定追踪信息,如表名、用户名、时间段等,在数据库中执行的操作会被解析为单行元组的SQL操作,即在数据库中执行一条update XX set name=xx where id<100;则在日志分析结果中会解析为一条条单行元组的SQL操作,如:update XX set name=xx where id=1;update table_name set name=xx where id=2;等所有id小于100的SQL操作。

OPERATION 字段代表操作类型,主要包括start、insert、update、delete、commit、rollback等语句。

OPERATION_CODE 代表操作类型代码,1表示插入操作,2表示删除操作,3表示更新操作,6表示事务起始语句,7表示提交操作,9表示批量更新,36表示回滚操作。

7)     终止归档日志文件分析

DBMS_LOGMNR.END_LOGMNR();

进行日志挖掘过程中,在V$LOGMNR_LOGS、V$LOGMNR_CONTENTS等数据库动态性能视图上会产生分析数据,数据存储在TEMP临时表空间上,会话断开或终止归档日志文件分析后,数据会被清除。

5.     注意

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


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31516603/viewspace-2772310/,如需转载,请注明出处,否则将追究法律责任。

上一篇: DM8 闪回查询
请登录后发表评论 登录
全部评论
Oracle/DM DBA

注册时间:2018-01-10

  • 博文量
    20
  • 访问量
    11469