使用Oracle LogMiner分析archived log
2019獨角獸企業重金招聘Python工程師標準>>>
今日收了預警郵件,發生archived log增長過快的現象。無法確定問題原因,使用LogMiner對archived log進行了分析。操作過程綱要主要來源與網絡,對我來說是個學習的過程,此文記錄了其詳細操作。
在操作之前,先大致了解LogMiner的用途:
日志文件中存放著所有進行數據庫恢復的數據,記錄了針對數據庫結構的每一個變化,也就是對數據庫操作的所有DML語句。在Oracle 8i之前,Oracle沒有提供任何協助數據庫管理員來讀取和解釋重作日志文件內容的工具。系統出現問題,對于一個普通的數據管理員來講,唯一可以作的工作就是將所有的log文件打包,然后發給Oracle公司的技術支持,然后靜靜地等待Oracle 公司技術支持給我們最后的答案。然而從8i以后,Oracle提供了這樣一個強有力的工具--LogMiner。
LogMiner工具既可以用來分析在線,也可以用來分析離線日志文件,既可以分析本身自己數據庫的重作日志文件,也可以用來分析其他數據庫的重作日志文件。
總的說來,LogMiner工具的主要用途有:1.跟蹤數據庫的變化:可以離線的跟蹤數據庫的變化,而不會影響在線系統的性能。
2.回退數據庫的變化:回退特定的變化數據,減少point-in-time recovery的執行。
3.優化和擴容計劃:可通過分析日志文件中的數據以分析數據增長模式。
問題表現:
$ ls -lth
total 729M
-rw-r----- 1 oracle oinstall 39M Aug? 2 11:22 1_1937_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 11:20 1_1936_775334859.dbf
-rw-r----- 1 oracle oinstall 38M Aug? 2 11:17 1_1935_775334859.dbf
-rw-r----- 1 oracle oinstall 38M Aug? 2 11:15 1_1934_775334859.dbf
-rw-r----- 1 oracle oinstall 38M Aug? 2 11:12 1_1933_775334859.dbf
-rw-r----- 1 oracle oinstall 40M Aug? 2 11:09 1_1932_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 11:07 1_1931_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 11:05 1_1930_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 11:03 1_1929_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 11:00 1_1928_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 10:58 1_1927_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 10:56 1_1926_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 10:53 1_1925_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 10:51 1_1924_775334859.dbf
-rw-r----- 1 oracle oinstall 38M Aug? 2 10:49 1_1923_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 10:47 1_1922_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 10:44 1_1921_775334859.dbf
-rw-r----- 1 oracle oinstall 38M Aug? 2 10:42 1_1920_775334859.dbf
-rw-r----- 1 oracle oinstall 39M Aug? 2 10:39 1_1919_775334859.dbf
......
archived logs增長過快。
操作過程:
1.設置日期格式SQL> show parameter nls_date_format;NAME TYPE ------------------------------------ --------------------------------- VALUE ------------------------------ nls_date_format string DD-MON-RR SQL> select sysdate from dual;SYSDATE --------------- 02-AUG-12SQL> alter system set nls_date_format='yyyy-mm-dd hh24:mi:ss' scope=spfile;System altered.SQL>
2.添加補充日志
2.1 查看是否開啟了補充日志SQL> select SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI from v$database;SUPPLEMENTAL_LOG_DATA_MI SUPPLEMEN SUPPLEMEN ------------------------ --------- --------- NO NO NO
2.2 開啟補充日志
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY, UNIQUE INDEX) COLUMNS;Database altered.SQL>3.開啟歸檔(生產環境是必須開啟的,此處略過)
3.1 archive log 存放路徑SQL> show parameter log_Archive_dest_;NAME TYPE ------------------------------------ --------------------------------- VALUE ------------------------------ log_archive_dest_1 string LOCATION=/opt/archivelog log_archive_dest_10 string ......
4.安裝LogMiner工具
LogMiner工具實際上是由兩個新的PL/SQL內建包(DBMS_LOGMNR 和 DBMS_ LOGMNR_D)和四個V$動態性能視圖(視圖是在利用過程DBMS_LOGMNR.START_LOGMNR啟動LogMiner時創建,即:v$logmnr_dictionary、v$logmnr_parameters、v$logmnr_logs、v$logmnr_contents)組成。在使用LogMiner工具分析redo log文件之前,可以使用DBMS_LOGMNR_D 包將數據字典導出為一個文本文件。該字典文件是可選的,但是如果沒有它,LogMiner解釋出來的語句中關于數據字典中的部分(如表名、列名等)和數值都將是16進制的形式,我們是無法直接理解的。
要安裝LogMiner工具,必須首先要運行下面這樣兩個腳本,這兩個腳本必須均以SYS用戶身份運行。其中第一個腳本用來創建DBMS_LOGMNR包,該包用來分析日志文件。第二個腳本用來創建DBMS_LOGMNR_D包,該包用來創建數據字典文件。
$ORACLE_HOME/rdbms/admin/dbmslm.sql
$ORACLE_HOME/rdbms/admin/dbmslmd.sql
$ORACLE_HOME/rdbms/admin/dbmslms.sql?
SQL> @/opt/oracle/product/11.2.0/rdbms/admin/dbmslm.sql Package created. Grant succeeded. Synonym created.SQL>SQL> @/opt/oracle/product/11.2.0/rdbms/admin/dbmslmd.sql Package created. Synonym created.SQL> @/opt/oracle/product/11.2.0/rdbms/admin/dbmslms.sql Package created. No errors. Grant succeeded.SQL>
5.使用LogMiner工具
5.1、設置參數UTL_FILE_DIR數據字典文件是一個文本文件,使用包DBMS_LOGMNR_D來創建。如果我們要分析的數據庫中的表有變化,影響到庫的數據字典也發生變化,這時就需要重新創建該字典文件。另外一種情況是在分析另外一個數據庫文件的重作日志時,也必須要重新生成一遍被分析數據庫的數據字典文件。
在ORACLE8I的時候,首先在init.ora初始化參數文件中,指定數據字典文件的位置,也就是添加一個參數UTL_FILE_DIR,該參數值為服務器中放置數據字典文件的目錄。如:
SQL> show parameter UTL_FILE_DIR ;NAME TYPE ------------------------------------ --------------------------------- VALUE ------------------------------ utl_file_dir stringSQL>SQL> alter system set UTL_FILE_DIR ='/tmp/test' scope=spfile;SQL> shutdown immediate SQL> STARTUP
ORACLE9I后,推薦使用SPFILE啟動,可以動態調整參數:
SQL> show parameter spfile;NAME TYPE ------------------------------------ --------------------------------- VALUE ------------------------------ spfile string /opt/oracle/product/11.2.0/dbs /spfileDCGF.oraSQL> show parameter utl_file_dir;NAME TYPE ------------------------------------ --------------------------------- VALUE ------------------------------ utl_file_dir string /tmp/test SQL>5.2創建數據字典文件
$ vi dbms_logmnr_d.build.txtBEGIN dbms_logmnr_d.build( dictionary_filename => 'logminer_dict.ora', dictionary_location => '/tmp/test'); END; / SQL> conn / as sysdba Connected. SQL> @dbms_logmnr_d.build.txtPL/SQL procedure successfully completed.SQL> 5.3 創建要分析的日志文件列表Oracle的重作日志分為兩種,在線(online)和離線(offline)歸檔日志文件,我這里主要分析歸檔日志,在線日志原理一樣。
----離線(offline)歸檔日志文件
SQL> BEGINdbms_logmnr.add_logfile('/opt/archivelog/1_1955_775334859.dbf',DBMS_LOGMNR.new );end;/PL/SQL procedure successfully completed.SQL>
###說明:
dbms_logmnr.new --用于建一個日志分析表
dbms_logmnr.addfile --用于加入用于分析的日志文件
dbms_logmnr.removefile --用于移出,用于分析的日志文件
5.4啟動LogMiner進行分析
5.4.1無限制條件
SQL> BEGINdbms_logmnr.start_logmnr(dictfilename => '/tmp/test/logminer_dict.ora');END;/PL/SQL procedure successfully completed.SQL>
5.4.2 限制條件
BEGIN dbms_logmnr.start_logmnr( dictfilename => '/tmp/test/logminer_dict.ora', StartTime => to_date('2012-08-02 16:40:26','YYYY-MM-DD HH24:MI:SS'), EndTime => to_date('2012-08-02 16:44:41','YYYY-MM-DD HH24:MI:SS ') ); END; /
5.5 觀察分析結果(v$logmnr_contents)
到現在為止,我們已經分析得到了重作日志文件中的內容。動態性能視圖v$logmnr_contents包含LogMiner分析得到的所有的信息。SQL> SELECT sql_redo FROM v$logmnr_contents;
6.關閉LogMiner
可以把v$logmnr_contents視圖的內容創建一個永久的數據庫表將非常有幫助SQL> create table logmnr_contents as select * from v$logmnr_contents;
當完成了重做日志的檢查,運行dbms_logmnr 中的end_logmnr
SQL> execute dbms_logmnr.end_logmnr();參考來源:
http://blog.csdn.net/yangzhawen/article/details/7525283
http://www.cnblogs.com/einyboy/archive/2012/06/16/2551972.html
轉載于:https://my.oschina.net/liuliufa/blog/70477
總結
以上是生活随笔為你收集整理的使用Oracle LogMiner分析archived log的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网站不能访问的解决思路
- 下一篇: HDU 4339 Query