您好,登錄后才能下訂單哦!
1、Oracle OCM作業運行報錯ORA-29280
一個同事系統中出現小故障,筆者協助幫助查看。由于系統總體負載很低,也沒有明顯的功能影響點,筆者也沒有直觀的思路。一般而言,從alert log中我們可以按照時間關系查看到Oracle的重要問題現象。
從日志情況中,卻發現了一些其他問題。
Mon Jun 02 22:00:08 2014
Errors in file /u01/app/oracle/diag/rdbms/dt/MM/trace/MM_j001_43954.trc:
ORA-12012: error on auto execute of job "ORACLE_OCM"."MGMT_CONFIG_JOB_2_1"
ORA-29280: invalid directory path
ORA-06512: at "ORACLE_OCM.MGMT_DB_LL_METRICS", line 2436
ORA-06512: at line 1
在系統數據庫運行過程中,基本每天夜間22點都會有這個報錯出現。系統負載很低(日志切換并不頻繁),除此之外沒有明顯的錯誤。
22點對于Oracle而言是一個重要的時間點,進入10g之后,Oracle夜間都會自動調度一些維護作業,來確保數據庫順利高效運行。這些作業中,最有名的就是統計量自動收集作業,夜間對新對象或者變化頻繁對象進行數據統計量收集。
進入11g之后,這種夜間作業機制在不斷的強化,但是執行時間窗口有了變化,起始時間調整為夜間22:00開始。我們在日志中看到的報錯,就是Oracle OCM(Oracle Configuration Manager)夜間執行的作業之一。
OCM是Oracle內部的一個工作組件,用于提供一些配置參數協助方面的工作。我們安裝數據庫后,會看到用戶schema列表中包括一個名稱為ORACLE_OCM的用戶名,就是這個組件的內部對應數據用戶集合。
根據Oracle MOS的介紹,出現這樣的錯誤是由于Oracle數據庫升級過程中的不完全造成的。在OCM進行度量(instrument)過程中,會自動往一些directory目錄位置寫入信息。如果目錄配置有問題,就會引起報錯。
一般系統中,我們也可以看到這些默認的目錄的。
SQL> select directory_name, directory_path from dba_directories;
DIRECTORY_NAME DIRECTORY_PATH
------------------------------ --------------------------------------------------------------------------------
XMLDIR /u01/app/oracle/rdbms/xml
ORACLE_OCM_CONFIG_DIR /u01/app/oracle/ccr/hosts/SimpleLinux.localdomain/state
DATA_PUMP_DIR /u01/app/admin/ora11g/dpdump/
ORACLE_OCM_CONFIG_DIR2 /u01/app/oracle/ccr/state
在很多情況下,ORACLE_OCM_CONFIG_DIR2目錄中是會寫入一些數據的。如果這個目錄配置有問題或者不存在,就會出現作業報錯的情況。
了解了問題原因,解決之道就比較容易了。和其他元數據損壞處理方法相同,或者執行安裝腳本,重新安裝組件,或者禁用組件運行。
下面是進行OCM目錄配置的方法步驟。說明:由于環境所限,筆者沒有進行實際測試,下列腳本在第三方環境中進行。
首先運行腳本檢查OCM配置安裝情況。
[oracle@SimpleLinux ~]$ cd $ORACLE_HOME/ccr/bin
[oracle@SimpleLinux bin]$ ls -l | grep deploy
-rw-r--r--. 1 oracle oinstall 48758 Jun 5 2013 deployPackages
[oracle@SimpleLinux bin]$ chmod 755 deployPackages
[oracle@SimpleLinux bin]$ ./deployPackages -l
The Oracle Configuration Manager state/writeable directory structure is incomplete.
OCM is not configured for this host or ORACLE_CONFIG_HOME. Please configure OCM first.
根據筆者環境的提示,OCM沒有在筆者服務器進行配置,如果配置了,就會顯示如Step2的提示內容。
第二步是執行腳本創建OCM directory對象和授予權限。
SQL> conn / as sysdba
Connected.
@ORACLE_HOME/ccr/admin/scripts/ocmjb10.sql
@ORACLE_HOME/ccr/admin/scripts/execute execocm.sql
最后確定directory創建情況。
SQL> select directory_name, directory_path from dba_directories where DIRECTORY_NAME like '%OCM_CONFIG%';
DIRECTORY_NAME DIRECTORY_PATH
------------------------------ --------------------------------------------------------------------------------
ORACLE_OCM_CONFIG_DIR /u01/app/oracle/ccr/hosts/SimpleLinux.localdomain/state
ORACLE_OCM_CONFIG_DIR2 /u01/app/oracle/ccr/state
注意:要求DIR2是存在的。
第二種方法更加簡單,如果確定系統不需要OCM運行,可以關閉這個作業執行。畢竟多一事不如少一事,當然這個需要確認系統不需要OCM的運行。
刪除ORACLE_OCM用戶schema,或者禁用job作業。
exec dbms_scheduler.disable('ORACLE_OCM.MGMT_CONFIG_JOB')
exec dbms_scheduler.disable('ORACLE_OCM.MGMT_STATS_CONFIG_JOB')
這個案例并不難解決,但是告訴我們一點:對系統的維護過程,要是全方面的。定期查看系統運行日志,及時發現潛在問題,解決問題很重要。讓數據庫“帶傷”運行,未來會帶來一些意想不到的問題。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。