温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

oracle 11g logminer 进行日志挖掘

发布时间:2020-08-08 04:26:14 来源:ITPUB博客 阅读:254 作者:huangdazhu 栏目:关系型数据库
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;
/
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI