LogMiner的创建和使用

本文详细介绍了在SQL环境下配置LogMiner并实现其功能的过程,包括安装、参数调整、日志生成和分析步骤。重点在于确保数据库处于归档模式、开启强制日志记录和补充日志数据,并通过生成数据字典、添加日志文件和分析操作来实现LogMiner的功能。
1)查看是否已经安装
SQL> desc DBMS_LOGMNR 
SQL> desc DBMS_LOGMNR_D 

如果没有内容,需要进行setup
2)安装LogMiner,运行下列脚本
SQL> !ls -al $ORACLE_HOME/rdbms/admin/ |grep dbmslm
-rw-r--r--  1 oracle dba         4924 Feb 21  2006 dbmslmd.sql
-rw-r--r--  1 oracle dba        17938 Sep 17  2011 dbmslm.sql
-rw-r--r--  1 oracle dba         7215 Oct 16  2005 dbmslms.sql

3)查看补充日志情况
select LOG_MODE,  
FORCE_LOGGING,  
supplemental_log_data_min,  
supplemental_log_data_pk,  
supplemental_log_data_ui,  
supplemental_log_data_fk,  
supplemental_log_data_all  
from v$database; 

LOG_MODE     FOR SUPPLEME SUP SUP SUP SUP
------------ --- -------- --- --- --- ---
ARCHIVELOG   NO  NO       NO  NO  NO  NO

数据库处于归档模式,但是force_logging没有开启,补充日志也没有开启
alter database force logging;
alter database add supplemental log data;
alter database add supplemental log data (primary key, unique index,foreign key,all) columns; 

4)配置
4.1)创建数据字典(data dictionary)文件
SQL> show parameter UTL_FILE_DIR

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir                         string
该参数用于指定一个或者多个目录Oracle用户PLSQL的文件I/O

SQL> alter system set utl_file_dir='$ORACLE_HOME/logs' scope=both;
alter system set utl_file_dir='$ORACLE_HOME/logs' scope=both
                 *
ERROR at line 1:
ORA-02095: specified initialization parameter cannot be modified
该参数只能在spfile级别上修改

SQL>  alter system set utl_file_dir='/u01/app/oracle/product/11.2.0.3/dbhome_1/logs' scope=spfile;

System altered.

重启数据库使得参数生效
SQL> startup force
ORACLE instance started.

Total System Global Area 2137886720 bytes
Fixed Size                  2230072 bytes
Variable Size            1056966856 bytes
Database Buffers         1073741824 bytes
Redo Buffers                4947968 bytes
Database mounted.
Database opened.

4.2)生成数据字典   注:在线分析不需要此步骤 
SQL> !mkdir $ORACLE_HOME/logs
SQL> !touch file $ORACLE_HOME/logs/sqltrace.ora
[oracle@wdctl1001 logs]$ chmod 777 sqltrace.ora
SQL> EXECUTE dbms_logmnr_d.build(dictionary_filename => '/u01/app/oracle/product/11.2.0.3/dbhome_1/logs/sqltrace.ora',  dictionary_location => '/u01/app/oracle/product/11.2.0.3/dbhome_1/logs');

PL/SQL procedure successfully completed.

注意,上面1,3两步中,地址不要用$ORACLE_HOME变量,不然会报错,如:
SQL> EXECUTE dbms_logmnr_d.build(dictionary_filename => 'sqltrace.ora',  dictionary_location => '$ORACLE_HOME/logs');
BEGIN dbms_logmnr_d.build(dictionary_filename => 'sqltrace.ora',  dictionary_location => '$ORACLE_HOME/logs'); END;

*
ERROR at line 1:
ORA-01336: specified dictionary file cannot be opened
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 5972
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 6062
ORA-06512: at "SYS.DBMS_LOGMNR_D", line 12
ORA-06512: at line 1

SQL> show parameter utl_file_dir

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
utl_file_dir                         string      $ORACLE_HOME/logs

4.3)添加日志
SQL> col member for a40
SQL> select group#,member from v$logfile;


    GROUP# MEMBER
---------- ----------------------------------------
         1 +DATA1/hztest1/redo01.log
         2 +DATA1/hztest1/redo02.log
         3 +DATA1/hztest1/redo03.log
         4 +DATA1/hztest1/redo04.log
         5 +DATA1/hztest1/redo05.log
         6 +DATA1/hztest1/redo06.log

6 rows selected.


在我的案例中group4 ,5,6是当前的redo thread(thread2),所以对这些redo添加日志
SQL> EXECUTE dbms_logmnr.add_logfile(LogFileName=>'+DATA1/hztest1/redo04.log',Options=>dbms_logmnr.new);

PL/SQL procedure successfully completed.

SQL> EXECUTE dbms_logmnr.add_logfile( LogFileName=>'+DATA1/hztest1/redo05.log',Options=>dbms_logmnr.addfile);

PL/SQL procedure successfully completed.

SQL> EXECUTE dbms_logmnr.add_logfile( LogFileName=>'+DATA1/hztest1/redo06.log',Options=>dbms_logmnr.addfile);

PL/SQL procedure successfully completed.

4.4)分析
alter session set nls_date_format='YYYY-MM-DD HH24:MI:SS' 
--使用生成的数据字典分析
EXECUTE 
dbms_logmnr.start_logmnr(DictFileName=>'/u01/app/oracle/product/11.2.0.3/dbhome_1/logs/sqltrace.ora');

SQL> select THREAD#,group#,sequence#,first_change#,next_change#,first_time,next_time from  v$log

   THREAD#     GROUP#  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# FIRST_TIME          NEXT_TIME
---------- ---------- ---------- ------------- ------------ ------------------- -------------------
         1          1        109       9642389      9642391 2013-05-29 02:49:35 2013-05-29 02:49:35
         1          2        110       9642391      9642504 2013-05-29 02:49:35 2013-05-29 02:49:37
         1          3        108       9642243      9642389 2013-05-29 02:44:36 2013-05-29 02:49:35
         2          4         28       9788062   2.8147E+14 2013-05-30 02:18:59
         2          5         26       9747205      9767827 2013-05-30 02:03:21 2013-05-30 02:18:15
         2          6         27       9767827      9788062 2013-05-30 02:18:15 2013-05-30 02:18:59

--通过设置起始SCN和截至SCN来限制要分析日志的范围
EXECUTE dbms_logmnr.start_logmnr(StartScn => 9747205,EndScn => 9767827, PTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);   

4.5)查看分析结果
select START_SCN,COMMIT_SCN,OPERATION,status from v$logmnr_contents
 START_SCN COMMIT_SCN OPERATION                            STATUS
---------- ---------- -------------------------------- ----------
                      INSERT                                    0
                      INSERT                                    0
                      INSERT                                    0
                      INSERT                                    0
                      INSERT                                    0
                      INSERT                                    0
                      INSERT                                    0
   9747794    9747798 COMMIT                                    0
                      START                                     0
                      UPDATE                                    0
   9747799    9747800 COMMIT                                    0

 START_SCN COMMIT_SCN OPERATION                            STATUS
---------- ---------- -------------------------------- ----------
                      START                                     0
                      UPDATE                                    0
   9747801    9747802 COMMIT                                    0

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25525563/viewspace-762546/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25525563/viewspace-762546/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值