日志挖掘
DM 提供了日志挖掘系统包DBMS_LOGMNR进行归档日志挖掘,可以从归档日志中重构出DDL,DML等SQL语句,并进行其他分析。
参数前提
进行归档日志挖掘需要配置两个关键点:
- 开启归档。需开启归档产生归档日志以供挖掘。
- RLOG_APPEND_LOGIC:置为1或2。
参数解释:
- ARCH_INI:是否启用归档,动态系统级参数;0:不启用,1:启用。
- RLOG_APPEND_LOGIC:是否启用在日志中记录逻辑操作的功能, 取值
范围 0、 1、 2、 3;0: 不启用; 1、 2、 3 启用。1: 如果有主键列,记录 UPDATE 和 DELETE操作时只包含主键列信息, 若没有主键列则包含所有列信息; 2:不论是否有主键列,记录UPDATE 和 DELETE 操作时都包含所有列的信息; 3: 记录 UPDATE 时包含更新列的信息以及ROWID, 记录 DELETE 时只有 ROWID。
通过V$dm.ini视图查看上述提到的配置项:
SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI WHERE PARA_NAME IN ('ARCH_INI','RLOG_APPEND_LOGIC');
或使用V$DM_ARCH_INI视图查看归档配置
如未开启归档,ARCH_INI显示为0,可使用SQL开启:
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG ;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/opt/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=2048';
ALTER DATABASE OPEN;
RLOG_APPEND_LOGIC参数为动态参数,可使用如下SQL开启:
SP_SET_PARA_VALUE(1,’RLOG_APPEND_LOGIC’,1);
测试
创建测试表logmnr_test。
CREATE TABLE LOGMNR_TEST(ID INT , NAME VARCHAR);
插入数据并做修改操作。
INSERT INTO LOGMNT_TEST VALUES(1,'THANOS'),(2,'TOM');
UPDATE LOGMNR_TEST SET NAME='THANOS_NEW' WHERE ID=1;
DELETE FROM LOGMNR_TEST WHERE ID=2;
切换归档日志,将新生成的日志归档
ALTER SYSTEM ARCHIVE LOG CURRENT;
通过V$ARCHIVED_LOG视图查看归档日志文件信息
select *from V$ARCHIVED_LOG;
添加归档日志文件
将查询到的两个归档日志文件添加到日志挖掘列表中
DBMS_LOGMNR.ADD_LOGFILE('D:\dmdbms\data\DAMENG\arch\ARCHIVE_LOCAL1_0x75877547[0]_2021-05-24_15-32-34.log');
DBMS_LOGMNR.ADD_LOGFILE('D:\dmdbms\data\DAMENG\arch\ARCHIVE_LOCAL1_0x75877547[0]_2021-05-24_16-50-34.log');
启动日志挖掘
使用START_LOGMNR方法启动日志挖掘,该方法的具体参数有:
STARTSCN
分析时或者加载时的过滤条件,日志起始序列号,默认 0,表示无限制。
ENDSCN
分析时或者加载时的过滤条件,日志结束序列号,默认 0,表示无限制。
STARTTIME
分析时或者加载时的过滤条件,日志起始时间,默认 1988/1/1。
ENDTIME
分析时或者加载时的过滤条件,日志结束时间,默认 2110/12/31。
DICTFILENAME
离线字典的全路径名,默认为空。如果选用离线字典模式,则需要指定该选项,根据此项提供的全路径来加载离线字典文件。
OPTIONS
使用如下数值,或其组合值(各项相加)。
1.2.3 查看结果
分析后,通过V$LOGMNR_CONTENTS查看结果:
SELECT OPERATION_CODE , OPERATION, SCN, SQL_REDO,SEG_OWNER, TABLE_NAME FROM V$LOGMNR_CONTENTS WHERE TABLE_NAME is not null;
可以看到之前操作的SQL都有显示。
终止分析
查看完成后,终止日志挖掘。
DBMS_LOGMNR.END_LOGMNR();
执行此方法后,此会话的相关视图内容被清空,查询V$LOGMNR_CONTENTS报错。
相关视图
V$LOGMNR_LOGS
当前会话添加的待分析归档日志文件。
select low_scn, next_scn, log_id, filename from v$logmnr_logs;
V$LOGMNR_PARAMETERS
当前会话启动日志分析文件的参数。
SELECT *FROM V$LOGMNR_PARAMETERS;
V$LOGMNR_CONTENTS
当前会话日志分析的内容,具体参数解释如下图: