适用场景
在 DM 中,用户可以使用 DBMS_LOGMNR 包对归档日志进行挖掘,重构出 DDL 和 DML 等操作,并通过获取的信息进行更深入的分析;同样,可以对归档日志文件进行恢复被误操作的数据,并进行故障跟踪,定位执行误操作的用户信息。
目前 DBMS_LOGMNR 只支持对归档日志进行分析,配置归档后,还需要将 dm.ini 中的 RLOG_APPEND_LOGIC 选项置为 1、2、3 或 4。
环境检查
创建系统包
SP_CREATE_SYSTEM_PACKAGES(1);
开启RLOG_APPEND_LOGIC
alter system set 'RLOG_APPEND_LOGIC'=2;
开启归档
可以参照如下进行设置:
修改 dm.ini 中的参数
ARCH_INI =1
注:静态参数,需要重启数据库后生效。
dmarch.ini 配置本地归档
[ARCHIVE_LOCAL1]
ARCH_TYPE=LOCAL
ARCH_DEST =C:\Users\Admin\Desktop
ARCH_FILE_SIZE =128
ARCH_SPACE_LIMIT =0
检查是否开启了归档和追加日志
select para_name,para_value from v$dm_ini where para_namein ('ARCH_INI','RLOG_APPEND_LOGIC');
开始日志挖掘
添加归档日志文件
查询数据库当前有哪些归档日志
SELECT NAME ,FIRST_TIME , NEXT_TIME , FIRST_CHANGE# , NEXT_CHANGE# FROMV$ARCHIVED_LOG;
添加一个或多个需要分析的归档日志文件
DBMS_LOGMNR.ADD_LOGFILE(‘C:\Users\Admin\Desktop\ARCHIVE_LOCAL1_0x28828B16_EP0_2025-03-19_16-49-43.log’);
注:对于不在数据库默认归档路径下的归档日志,可以直接指定归档日志的绝对路径添 加进分析列表。
查询通过 ADD_LOGFILE 添加的归档日志文件
SELECT LOW_SCN,NEXT_SCN, LOW_TIME, HIGH_TIME, LOG_ID, FILENAME FROMV$LOGMNR_LOGS;
启动归档日志文件分析
dbms_logmnr.start_logmnr(Options=>2128,Starttime=>to_date('2025-03-19 17:36:00','YYYY-MM-DD HH24:MI:SS'),Endtime=>to_date('2025-03-20 12:36:02','YYYY-MM-DD HH24:MI:SS'));
查看归档日志文件的分析结果
如要查看归档日志文件的分析结果,可以通过动态视图 V$LOGMNR_CONTENTS 进行 查询,如下:
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= 'TABLE_1';
注:可以根据需要指定追踪信息,如表名、用户名、时间段等,在数据库中执行的操作会 被解析为单行元组的SQL操作,即在数据库中执行一条 updateXXsetname=xxwhere id<100;则在日志分析结果中会解析为一条条单行元组的 SQL 操作,如:update XXset name=xxwhereid=1;updatetable_namesetname=xxwhereid=2;等所有 id 小于 100 的 SQL 操作。
OPERATION 字段代表操作类型,主要包括 start、insert、update、delete、commit、rollback 等语句。
OPERATION_CODE 代表操作类型代码,1 表示插入操作,2 表示删除操作,3 表示更新操作,6 表示事务起始语句,7 表示提交操作,9 表示批量更新,36 表示回滚操作
终止归档日志文件分析
DBMS_LOGMNR.END_LOGMNR();
注:进行日志挖掘过程中,在 V L O G M N R L O G S 、 V LOGMNR_LOGS、V LOGMNRLOGS、VLOGMNR_CONTENTS 等数据库动态性能视图上会产生分析数据,数据存储在 TEMP 临时表空间上,会话断开或终止归档日志文件分析后,数据会被清除。