环境检查
检查是否创建了系统包
如未创建,可以执行如下命令:
SP_CREATE_SYSTEM_PACKAGES(1);
检查是否开启了归档和附加日志
select para_name,para_value from v$dm_ini where para_name in ('ARCH_INI','RLOG_APPEND_LOGIC');
注:RLOG_APPEND_LOGIC 需要设置为1 或2 。
1 代表如果有主键列,记录 UPDATE 和 DELETE 操作时只包含主键列信息, 若没有主键列则包含所有列信息;
2 代表不论是否有主键列,记录 UPDATE 和 DELETE 操作时都包含所有列的信息。
如果未开启归档和附加日志,可以参照如下进行设置:
l 修改 dm.ini 中的参数
ARCH_INI = 1
RLOG_APPEND_LOGIC = 1
注:静态参数,需要重启数据库后生效
l dmarch.ini 配置本地归档
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /data/dmarch
ARCH_FILE_SIZE = 2048
ARCH_SPACE_LIMIT = 0
注:归档文件配置完毕后,需要重启数据库后生效。

查看源库的db_magic
select db_magic; --954337092
案例模拟
删除一个用户的所有数据,然后通过日志挖掘查看到删除的操作。
drop user test1 CASCADE;

可以查询此时的操作,记录在了一个归档日志文件里面,如:ARCHIVE_LOCAL1_20200316112054696_0.log
异机进行日志挖掘
3.1 新初始化一个实例
初始化完成后,修改db_magic 。
3.2 修改该实例db_magic 为归档源库的db_magic
使用dmmdf 修改 SYSTEM.DBF 、 DAMENG01.log 和 DAMENG02.log 的dbmagic 为归档源库的db_magic 。本例归档源库的db_magic 是:954337092
cd /home/dmdba/dmdbms/bin
./dmmdf TYPE=1 FILE=/data/DAMENG/SYSTEM.DBF

./dmmdf TYPE=2 FILE=/data/DAMENG/DAMENG01.log


./dmmdf TYPE=2 FILE=/data/DAMENG/DAMENG02.log
修改完启动数据库服务。
3.3 开始日志挖掘
3.3.1 添加归档日志文件
Ø 从源库拷贝归档文件
Ø 添加归档日志文件
DBMS_LOGMNR.ADD_LOGFILE('/data/ARCHIVE_LOCAL1_20200316112054696_0.log');

Ø 查询通过ADD_LOGFILE 添加的归档日志文件
查询V$LOGMNR_LOGS 动态视图
SELECT LOW_SCN, NEXT_SCN, LOW_TIME, HIGH_TIME, LOG_ID, FILENAME FROM V$LOGMNR_LOGS;
3.3.2 启动归档日志文件分析
DBMS_LOGMNR.START_LOGMNR(OPTIONS=>2048);

3.3.3 查看归档日志文件的分析结果
如要查看归档日志文件的分析结果,可以通过动态视图 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='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 表示回滚操作。
3.3.4 终止归档日志文件分析
DBMS_LOGMNR.END_LOGMNR();
注:进行日志挖掘过程中,在V$LOGMNR_LOGS 、V$LOGMNR_CONTENTS 等数据库动态性能视图上会产生分析数据,数据存储在 TEMP 临时表空间上 ,会话断开或终止归档日志文件分析后,数据会被清除。