oracle 11g logminer 进行日志挖掘
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据
千家信息网最后更新 2025年11月06日oracle 11g logminer 进行日志挖掘Oracle LogMiner 是Oracle公司从产品8i以后提供的一个实际非常有用的分析工具,使用该工具可以轻松获得Oracle 在线/归档日志文件中的具体内容,特别是该工具可以分析出所有对于数据库操作的DML和DDL语句。该工具特别适用于调试、审计或者回退某个特定的事务。
LogMiner可以用于日志的分析,跟踪数据库变化,回退数据库变化,对部分误操作数据进行恢复,误操作人员账号定位查看,结合工具完成基于日志事物级别增量数据传输。
1、LogMiner的安装;
首先确认一下咱们数据库上是否有LogMiner安装包,使用DBA用户登录数据库查看是否有dbms_logmnr、dbms_logmnr_d包,如果没有就需要咱们执行下面的脚本安装(必须以DBA用户执行安装)。
1、SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
2、SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
执行完毕就完成了logminer的安装,第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。
2、数据库的配置;
查看一下数据库是否在归档模式:
SQL> archive log list;
如果数据库处于非归档模式(No Archive Mode)。
将数据库切换到归档模式:
1、关闭数据库
SQL> shutdown immediate
SQL> startup mount;
SQL> alter database archivelog;
切换成功后打开数据库
SQL>alter database open;
接下来,打开数据库的扩充日志:supplemental logging(扩充日志)在通常情况下,redo log 只记录的进行恢复所必需的信息,但是这些信息对于我们使用redo log进行一些其他应用时是不够的,例如在 redo log中使用rowid唯一标识一行而不是通过Primary key,如果我们在另外的数据库分析这些日志并想重新执行某些dml时就可能会有问题,因为不同的数据库其rowid代表的内容是不同的。在这时候就需要一些额外的信息(columns)加入redo log,这就是supplemental logging。
查看是否开启扩充日志:
SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;
如果没有没有开启扩充日志。
SQL> alter database add supplemental log data;
创建日志分析用的用户并授权:
CREATE USER logminer IDENTIFIED BY logminer ;
SQL> GRANT CONNECT, RESOURCE,DBA TO logminer;
3、LogMiner的配置;
使用oracle用户建立一个logminer使用的目录
cd /u01/oracle/oradata
mkdir logminer
创建logminer字典文件路径:
CREATE DIRECTORY utlfile AS '/u01/oracle/oradata/logminer';
alter system set utl_file_dir='/u01/oracle/oradata/logminer' scope=spfile;
重启数据库生效
shutdown immediate;
startup
show parameter utl_file_dir
4、开始分析日志文件
一、分析在线日志文件
准备测试数据
SQL> conn logminer/logminer
SQL> CREATE TABLE test(id varchar2(100));
INSERT INTO test (id) values ('000001');
INSERT INTO test (id) values ('000011');
commit;
创建数据字典文件
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/u01/oracle/oradata/logminer');
查看数据库当前联机日志文件
SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;
发现只有redo001是当前状态。
select * from v$logfile;
将需要解析的在线日志文件加入
exec dbms_logmnr.add_logfile('/u01/oracle/oradata/prod/redo01a.log', dbms_logmnr.new);
启动logminer进行日志分析
exec dbms_logmnr.start_logmnr( dictfilename=>'/u01/oracle/oradata/logminer/dictionary.ora');
查看日志分析结果
SELECT sql_redo, sql_undo, seg_owner FROMv$logmnr_contents
WHERE seg_name='TEST' ANDseg_owner='LOGMINER';
二、分析归档日志
测试数据准备
CREATE TABLE test2
(id NUMBER(4) CONSTRAINT PK_test PRIMARY KEY,
NAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2));
INSERT INTO test2 VALUES(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO test2 VALUES(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO test2 VALUES(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO test2 VALUES(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
COMMIT;
切换日志,将当前日志归档后进行分析
ALTER SYSTEM SWITCH LOGFILE;
查看归档日志文件
select sequence#, FIRST_CHANGE#, NEXT_CHANGE#,name fromv$archived_log order by sequence# desc;
创建数据字典文件
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/u01/oracle/oradata/logminer');
exec dbms_logmnr.add_logfile('/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf', dbms_logmnr.new);
exec dbms_logmnr.start_logmnr(dictfilename=>'/u01/oracle/oradata/logminer/dictionary.ora');
查看分析结果
SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents
WHERE seg_name='TEST2' AND seg_owner='LOGMINER';
如果需要分析大量的归档日志,则如下:
BEGIN
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf',
DBMS_LOGMNR.new );
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf',
DBMS_LOGMNR.addfile );
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf',
DBMS_LOGMNR.addfile );
END;
/
LogMiner可以用于日志的分析,跟踪数据库变化,回退数据库变化,对部分误操作数据进行恢复,误操作人员账号定位查看,结合工具完成基于日志事物级别增量数据传输。
1、LogMiner的安装;
首先确认一下咱们数据库上是否有LogMiner安装包,使用DBA用户登录数据库查看是否有dbms_logmnr、dbms_logmnr_d包,如果没有就需要咱们执行下面的脚本安装(必须以DBA用户执行安装)。
1、SQL>@$ORACLE_HOME/rdbms/admin/dbmslm.sql
2、SQL>@$ORACLE_HOME/rdbms/admin/dbmslmd.sql
执行完毕就完成了logminer的安装,第一个脚本用来创建DBMS_LOGMNR包,该包用来分析日志文件。第二个脚本用来创建DBMS_LOGMNR_D包,该包用来创建数据字典文件。
2、数据库的配置;
查看一下数据库是否在归档模式:
SQL> archive log list;
如果数据库处于非归档模式(No Archive Mode)。
将数据库切换到归档模式:
1、关闭数据库
SQL> shutdown immediate
SQL> startup mount;
SQL> alter database archivelog;
切换成功后打开数据库
SQL>alter database open;
接下来,打开数据库的扩充日志:supplemental logging(扩充日志)在通常情况下,redo log 只记录的进行恢复所必需的信息,但是这些信息对于我们使用redo log进行一些其他应用时是不够的,例如在 redo log中使用rowid唯一标识一行而不是通过Primary key,如果我们在另外的数据库分析这些日志并想重新执行某些dml时就可能会有问题,因为不同的数据库其rowid代表的内容是不同的。在这时候就需要一些额外的信息(columns)加入redo log,这就是supplemental logging。
查看是否开启扩充日志:
SQL> select SUPPLEMENTAL_LOG_DATA_MIN from v$database;
如果没有没有开启扩充日志。
SQL> alter database add supplemental log data;
创建日志分析用的用户并授权:
CREATE USER logminer IDENTIFIED BY logminer ;
SQL> GRANT CONNECT, RESOURCE,DBA TO logminer;
3、LogMiner的配置;
使用oracle用户建立一个logminer使用的目录
cd /u01/oracle/oradata
mkdir logminer
创建logminer字典文件路径:
CREATE DIRECTORY utlfile AS '/u01/oracle/oradata/logminer';
alter system set utl_file_dir='/u01/oracle/oradata/logminer' scope=spfile;
重启数据库生效
shutdown immediate;
startup
show parameter utl_file_dir
4、开始分析日志文件
一、分析在线日志文件
准备测试数据
SQL> conn logminer/logminer
SQL> CREATE TABLE test(id varchar2(100));
INSERT INTO test (id) values ('000001');
INSERT INTO test (id) values ('000011');
commit;
创建数据字典文件
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/u01/oracle/oradata/logminer');
查看数据库当前联机日志文件
SELECT group#, sequence#, status, first_change#, first_time FROM V$log ORDER BY first_change#;
发现只有redo001是当前状态。
select * from v$logfile;
将需要解析的在线日志文件加入
exec dbms_logmnr.add_logfile('/u01/oracle/oradata/prod/redo01a.log', dbms_logmnr.new);
启动logminer进行日志分析
exec dbms_logmnr.start_logmnr( dictfilename=>'/u01/oracle/oradata/logminer/dictionary.ora');
查看日志分析结果
SELECT sql_redo, sql_undo, seg_owner FROMv$logmnr_contents
WHERE seg_name='TEST' ANDseg_owner='LOGMINER';
二、分析归档日志
测试数据准备
CREATE TABLE test2
(id NUMBER(4) CONSTRAINT PK_test PRIMARY KEY,
NAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2));
INSERT INTO test2 VALUES(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO test2 VALUES(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO test2 VALUES(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO test2 VALUES(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
COMMIT;
切换日志,将当前日志归档后进行分析
ALTER SYSTEM SWITCH LOGFILE;
查看归档日志文件
select sequence#, FIRST_CHANGE#, NEXT_CHANGE#,name fromv$archived_log order by sequence# desc;
创建数据字典文件
EXECUTE dbms_logmnr_d.build(dictionary_filename => 'dictionary.ora', dictionary_location =>'/u01/oracle/oradata/logminer');
exec dbms_logmnr.add_logfile('/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf', dbms_logmnr.new);
exec dbms_logmnr.start_logmnr(dictfilename=>'/u01/oracle/oradata/logminer/dictionary.ora');
查看分析结果
SELECT sql_redo, sql_undo, seg_owner FROM v$logmnr_contents
WHERE seg_name='TEST2' AND seg_owner='LOGMINER';
如果需要分析大量的归档日志,则如下:
BEGIN
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf',
DBMS_LOGMNR.new );
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf',
DBMS_LOGMNR.addfile );
dbms_logmnr.add_logfile(
'/u01/oracle/product/11.2.0/dbhome_1/dbs/arch2_13_908343318.dbf',
DBMS_LOGMNR.addfile );
END;
/
数据
日志
数据库
分析
文件
工具
字典
用户
信息
模式
脚本
切换
在线
不同
内容
结果
准备
变化
测试
配置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
计算机网络安全培训价格
RFID数据库分层建立
怎么查看金蝶K3数据库位置
数梦数据库
广州学习软件开发费用
属于数据库应用系统
北京诚禾嘉信网络技术有限公司
珠海市制造业erp软件开发
手机网络安全模式怎么设置
东莞软件开发的公司哪家好
编程技术和网络技术的联系
双路服务器可以只用一个CPU吗
nba2k22服务器太差了
公安局网络安全大队特招
11427数据库
手机软件开发学校
维护网络安全的工作要加班吗
大数据基础学什么软件开发
大连惠普软件开发公司如何
软件开发乙方的权利义务
软件开发经历了三个阶段
js动态加载树状数据库
网络安全隔离用电量是多少
数据库可以存音乐文件吗
超星计算机网络技术答案期末
梦幻转服务器新规则
东莞软件开发的公司哪家好
盐城王凤阳万方数据库
六安服务器机箱价格
服务器上面的文件如何共享给电脑