玩轉logminer-9i以前版本做法(一)

anycall2010發表於2008-09-07

9I之前支援外部平面檔案方式(FLAT FILE)方式,需要設定UTL_FILE_DIR,而這種方式需要重新啟動資料庫,對日誌的分析帶來很大的困難,特別是高可用資料庫環境,一般沒有重啟資料庫的機會。針對這種方法,做一下簡單測試:

進行如下測試:

SQL> conn sys/oracle as sysdba
Connected.

1、建立DBMS_LOGMNR包(在/ORACLE_HOME/rdms/admin下)

SQL> @dbmslm.sql

Package created.

Grant succeeded.

2.建立相關資料字典

SQL> @dbmslmd.sql

Package created.

3、建立測試環境,建立一個表APPLE,插入資料,然後將資料刪除。

記錄當前歸檔日誌資訊:

SQL> [oracle@test archivelog]$ cd 2008_09_05
[oracle@test 2008_09_05]$ ls
o1_mf_1_59_4d11o5z1_.arc   o1_mf_1_64_4d11ttt2_.arc        o1_mf_1_69_4d11zt4f_.arc
o1_mf_1_60_4d11p9rt_.arc     o1_mf_1_65_4d11vyvy_.arc      o1_mf_1_70_4d121h5w_.arc
o1_mf_1_61_4d11qhmp_.arc  o1_mf_1_66_4d11x22p_.arc     o1_mf_1_71_4d1230cr_.arc
o1_mf_1_62_4d11rn95_.arc    o1_mf_1_67_4d11xdov_.arc     o1_mf_1_72_4d124qm6_.arc
o1_mf_1_63_4d11sqk1_.arc    o1_mf_1_68_4d11yojt_.arc

alter system archive log current;

System altered.


SQL> create table apple (a int);

Table created.

SQL> insert into apple  values(1);

1 row created.

SQL> insert into apple values(2);

1 row created.

SQL> insert into apple values(3);

1 row created.

SQL> select * from apple;

         A
----------
         1
         2
         3

SQL> commit;

Commit complete.

SQL> delete from apple;

3 rows deleted.

SQL> commit ;

Commit complete.

SQL> alter system archive log current;

System altered.

進行一系列操作完畢察看歸檔日誌:

[oracle@test 2008_09_05]$ ls
o1_mf_1_59_4d11o5z1_.arc       o1_mf_1_65_4d11vyvy_.arc       o1_mf_1_71_4d1230cr_.arc
o1_mf_1_60_4d11p9rt_.arc        o1_mf_1_66_4d11x22p_.arc      o1_mf_1_72_4d124qm6_.arc
o1_mf_1_61_4d11qhmp_.arc     o1_mf_1_67_4d11xdov_.arc       o1_mf_1_73_4d18b84j_.arc
o1_mf_1_62_4d11rn95_.arc       o1_mf_1_68_4d11yojt_.arc          o1_mf_1_74_4d18hz4h_.arc
o1_mf_1_63_4d11sqk1_.arc       o1_mf_1_69_4d11zt4f_.arc
o1_mf_1_64_4d11ttt2_.arc          o1_mf_1_70_4d121h5w_.arc

此時多了兩個歸檔日誌:o1_mf_1_73_4d18b84j_.arc和 o1_mf_1_74_4d18hz4h_.arc。

修改初始化引數UTL_FILE_DIR,指定分析資料的存放處:

SQL> alter system set UTL_FILE_DIR='/opt/app/logminer' scope=spfile;

System altered.

建立資料字典存放路徑:
[root@test dbs]# mkdir /opt/app/logminer

[root@test app]# chown -R oracle:oinstall logminer

重新啟動資料庫:
SQL> startup
ORACLE instance started.

Total System Global Area  775946240 bytes
Fixed Size                  2023944 bytes
Variable Size             281021944 bytes
Database Buffers          486539264 bytes
Redo Buffers                6361088 bytes
Database mounted.
Database opened.

建立資料字典檔案
SQL> execute dbms_logmnr_d.build(dictionary_filename=>'sqltrace.ora',dictionary_location=>'/opt/app/logminer');

新增用於分析的日誌檔案

SQL> exec dbms_logmnr.add_logfile(logfilename=>'/opt/app/oracle/flash_recovery_area/ORCL/archivelog/2008_09_05/o1_mf_1_73_4d18b84j_.arc',options=>dbms_logmnr.new);

PL/SQL procedure successfully completed.


SQL> exec dbms_logmnr.add_logfile(logfilename=>'/opt/app/oracle/flash_recovery_area/ORCL/archivelog/2008_09_05/o1_mf_1_74_4d18hz4h_.arc');

PL/SQL procedure successfully completed.

資料字典分析:

SQL> exec sys.dbms_logmnr.start_logmnr(dictfilename=>'/opt/app/logminer/dictionary.ora');

PL/SQL procedure successfully completed.

以下的分析結果和我預期結果不一致,原因是我的資料庫是10G版本,預設設定只能夠顯示DDL語言,針對這個問題,我上面轉載了《yangtingkun》的一篇測試文章來說明。

SQL> select t.scn,t.TIMESTAMP,t.SEG_OWNER,t.OPERATION,t.SQL_REDO,t.SQL_UNDO from v$logmnr_contents t where t.SEG_NAME='APPLE';

      SCN TIMESTAMP      SEG_OWNER
---------- -------------- --------------------------------
OPERATION
--------------------------------
SQL_REDO
--------------------------------------------------------------------------------
SQL_UNDO
--------------------------------------------------------------------------------
    904895 05-9ÔÂ -08     SYS
DDL
create table apple (a int);


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8334342/viewspace-442216/,如需轉載,請註明出處,否則將追究法律責任。

相關文章