關於ORACLE_OCM.MGMT_DB_LL_METRICS的錯誤

orchidllh發表於2008-07-07
上週五的例行檢查時發現兩個資料庫alert同時出現了以下的錯誤提示:
Errors in file /home/oracle/admin/pcard1/bdump/pcard1_j002_8968.trc:
ORA-12012: error on auto execute of job 68904
ORA-04063: ORA-04063: package body "ORACLE_OCM.MGMT_DB_LL_METRICS" has errors
ORA-06508: PL/SQL: could not find program unit being called: "ORACLE_OCM.MGMT_DB_LL_METRICS"
ORA-06512: at line 1
has errors[@more@]

對應用應該沒有什麼影響,檢查收集的統計資訊,也沒有發現什麼異常。
週五選擇了繼續觀察。

但是今早發現週末還在持續的提示中,應該就不是偶發的故障了。
通過oem找到這個物件,發現是invalid的,編譯提示錯誤。
發現是沒有訪問SYS.UTL_FILE的許可權,繼而發現有將近60個物件都是失效的。

這個資料庫上線應該有三個月了,測試到上線也有一兩個月,並沒有出現過類似的問題。
但是我最近的確收回了public使用者的sys.utl_file,一起收回的還有sys.utl_tcp sys.utl_http sys.utl_smtp,當時執行這些操作的時候還挺疑惑的,因為我上線前肯定執行
過類似的操作的,為什麼執行一段時間之後,這些許可權又都付給public了呢?
回想起來,我在五月初升級了資料庫,從10203升級到10204,升級後並沒有檢查過這些許可權,只重新編譯了物件。
有可能是升級資料庫的指令碼,重新將這些物件付給了public,而我收回這些許可權導致了部分資料庫物件失效。

基本確認問題原因以後,我將sys.utl_file單獨付給了oracle_ocm使用者,然後對報錯的包體進行重新編譯,編譯通過。

GRANT EXECUTE ON SYS.UTL_FILE TO "ORACLE_OCM";

只有,我又核對了其他的失效物件,將許可權單獨付給了這些使用者,大部分物件都可以成功編譯了。
GRANT EXECUTE ON SYS.UTL_FILE TO "OLAPSYS";
GRANT EXECUTE ON SYS.UTL_FILE TO "XDB";
GRANT EXECUTE ON SYS.UTL_FILE TO "WMSYS";
GRANT EXECUTE ON SYS.UTL_FILE TO "ORDPLUGINS";
GRANT EXECUTE ON SYS.UTL_FILE TO "DMSYS";
GRANT EXECUTE ON SYS.UTL_FILE TO "MDSYS";

GRANT EXECUTE ON SYS.UTL_HTTP TO "ORDPLUGINS";

GRANT EXECUTE ON SYS.UTL_HTTP TO "OLAPSYS";
GRANT EXECUTE ON SYS.UTL_TCP TO "OLAPSYS";
GRANT EXECUTE ON SYS.UTL_SMTP TO "OLAPSYS";

GRANT EXECUTE ON SYS.UTL_SMTP TO "SYSMAN";

由於我的元件是選裝的,有些元件沒有安裝,所以部分物件仍然不能編譯通過,確認沒有用到,也就算了。

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

相關文章