アラートログに以下のメッセージが出力されていた。
ORA-12012: error on auto execute of job 48247 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
Oracle Configuration Managerのトラブルシューティング によると、ORACLE_OCM ユーザが UTL_FILE、DBMS_SCHEDULER の EXECUTE権限を持たない場合に発生する。<セキュリティ・ガイド[B19269-02]>に従って、PUBLIC ユーザから不要なオブジェクト権限(UTL_SMTP、UTL_TCP、UTL_HTTP、UTL_FILE、DBMS_RANDOM)を取消したのが原因。
B19269-02 を再確認しようとしたら、B19269-03 にバージョンアップされて内容が変わっていた。かろうじて Google のキャッシュに残っていた。
[B19269-02] --> http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19269-02/policies.htm#518452
[B19269-03] --> http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19269-03/policies.htm#803196
修正前にエラーが発生していて修正後に発生しないことを確認するため、ジョブの実行間隔を1分に変更する。
$ sqlplus / as sysdba BEGIN sys.dbms_scheduler.disable( '"ORACLE_OCM"."MGMT_CONFIG_JOB"' ); sys.dbms_scheduler.set_attribute_null( name => '"ORACLE_OCM"."MGMT_CONFIG_JOB"', attribute => 'schedule_name'); sys.dbms_scheduler.set_attribute( name => '"ORACLE_OCM"."MGMT_CONFIG_JOB"', attribute => 'repeat_interval', value => 'FREQ=MINUTELY'); sys.dbms_scheduler.enable( '"ORACLE_OCM"."MGMT_CONFIG_JOB"' ); END; / BEGIN sys.dbms_scheduler.disable( '"SYS"."AUTO_SPACE_ADVISOR_JOB"' ); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."AUTO_SPACE_ADVISOR_JOB"', attribute => 'schedule_name'); sys.dbms_scheduler.set_attribute( name => '"SYS"."AUTO_SPACE_ADVISOR_JOB"', attribute => 'repeat_interval', value => 'FREQ=MINUTELY'); sys.dbms_scheduler.enable( '"SYS"."AUTO_SPACE_ADVISOR_JOB"' ); END; / BEGIN sys.dbms_scheduler.disable( '"SYS"."GATHER_STATS_JOB"' ); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."GATHER_STATS_JOB"', attribute => 'schedule_name'); sys.dbms_scheduler.set_attribute( name => '"SYS"."GATHER_STATS_JOB"', attribute => 'repeat_interval', value => 'FREQ=MINUTELY'); sys.dbms_scheduler.enable( '"SYS"."GATHER_STATS_JOB"' ); END; / BEGIN sys.dbms_scheduler.disable( '"SYS"."PURGE_LOG"' ); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."PURGE_LOG"', attribute => 'schedule_name'); sys.dbms_scheduler.set_attribute( name => '"SYS"."PURGE_LOG"', attribute => 'repeat_interval', value => 'FREQ=MINUTELY'); sys.dbms_scheduler.enable( '"SYS"."PURGE_LOG"' ); END; / BEGIN sys.dbms_scheduler.disable( '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"' ); sys.dbms_scheduler.set_attribute( name => '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"', attribute => 'repeat_interval', value => 'FREQ=MINUTELY'); sys.dbms_scheduler.set_attribute( name => '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"', attribute => 'start_date', value => systimestamp at time zone '+9:00'); sys.dbms_scheduler.enable( '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"' ); END; /
修正する。
$ sqlplus / as sysdba col table_name for a20 col grantee for a10 col privilege for a10 select table_name,grantee,privilege from dba_tab_privs where table_name in ('UTL_FILE','HTTPURITYPE','UTL_INADDR'); TABLE_NAME GRANTEE PRIVILEGE -------------------- ---------- ---------- UTL_INADDR PUBLIC EXECUTE HTTPURITYPE PUBLIC EXECUTE grant execute on UTL_FILE to public; revoke all on HTTPURITYPE from public; revoke all on UTL_INADDR from public; ALTER PACKAGE oracle_ocm.MGMT_DB_LL_METRICS compile; ALTER PACKAGE oracle_ocm.mgmt_config compile; select table_name,grantee,privilege from dba_tab_privs where table_name in ('UTL_FILE','HTTPURITYPE','UTL_INADDR'); TABLE_NAME GRANTEE PRIVILEGE -------------------- ---------- ---------- UTL_FILE PUBLIC EXECUTE
アラートログにエラーが出力されなくなっていることを確認する。
$ less /export/home/oracle/admin/orcl/bdump/alert_orcl.log
無事解決したので、ジョブのスケジュールを元に戻す。
$ sqlplus / as sysdba BEGIN sys.dbms_scheduler.disable( '"ORACLE_OCM"."MGMT_CONFIG_JOB"' ); sys.dbms_scheduler.set_attribute_null( name => '"ORACLE_OCM"."MGMT_CONFIG_JOB"', attribute => 'schedule_name'); sys.dbms_scheduler.set_attribute( name => '"ORACLE_OCM"."MGMT_CONFIG_JOB"', attribute => 'repeat_interval', value => 'FREQ=MINUTELY'); sys.dbms_scheduler.enable( '"ORACLE_OCM"."MGMT_CONFIG_JOB"' ); END; / BEGIN sys.dbms_scheduler.disable( '"SYS"."AUTO_SPACE_ADVISOR_JOB"' ); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."AUTO_SPACE_ADVISOR_JOB"', attribute => 'start_date'); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."AUTO_SPACE_ADVISOR_JOB"', attribute => 'repeat_interval'); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."AUTO_SPACE_ADVISOR_JOB"', attribute => 'end_date'); sys.dbms_scheduler.set_attribute( name => '"SYS"."AUTO_SPACE_ADVISOR_JOB"', attribute => 'schedule_name', value => 'SYS.MAINTENANCE_WINDOW_GROUP'); sys.dbms_scheduler.enable( '"SYS"."AUTO_SPACE_ADVISOR_JOB"' ); END; / BEGIN sys.dbms_scheduler.disable( '"SYS"."GATHER_STATS_JOB"' ); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."GATHER_STATS_JOB"', attribute => 'start_date'); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."GATHER_STATS_JOB"', attribute => 'repeat_interval'); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."GATHER_STATS_JOB"', attribute => 'end_date'); sys.dbms_scheduler.set_attribute( name => '"SYS"."GATHER_STATS_JOB"', attribute => 'schedule_name', value => 'SYS.MAINTENANCE_WINDOW_GROUP'); sys.dbms_scheduler.enable( '"SYS"."GATHER_STATS_JOB"' ); END; / BEGIN sys.dbms_scheduler.disable( '"SYS"."PURGE_LOG"' ); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."PURGE_LOG"', attribute => 'start_date'); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."PURGE_LOG"', attribute => 'repeat_interval'); sys.dbms_scheduler.set_attribute_null( name => '"SYS"."PURGE_LOG"', attribute => 'end_date'); sys.dbms_scheduler.set_attribute( name => '"SYS"."PURGE_LOG"', attribute => 'schedule_name', value => 'SYS.DAILY_PURGE_SCHEDULE'); sys.dbms_scheduler.enable( '"SYS"."PURGE_LOG"' ); END; / BEGIN sys.dbms_scheduler.disable( '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"' ); sys.dbms_scheduler.set_attribute( name => '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"', attribute => 'repeat_interval', value => 'FREQ=MONTHLY;BYMONTHDAY=1;BYHOUR=1;BYMINUTE=1;BYSECOND= 0'); sys.dbms_scheduler.set_attribute( name => '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"', attribute => 'start_date', value => to_timestamp_tz('2009-01-23 +9:00', 'YYYY-MM-DD TZH:TZM')); sys.dbms_scheduler.enable( '"ORACLE_OCM"."MGMT_STATS_CONFIG_JOB"' ); END; / BEGIN sys.dbms_scheduler.disable( '"ORACLE_OCM"."MGMT_CONFIG_JOB"' ); sys.dbms_scheduler.set_attribute_null( name => '"ORACLE_OCM"."MGMT_CONFIG_JOB"', attribute => 'start_date'); sys.dbms_scheduler.set_attribute_null( name => '"ORACLE_OCM"."MGMT_CONFIG_JOB"', attribute => 'repeat_interval'); sys.dbms_scheduler.set_attribute_null( name => '"ORACLE_OCM"."MGMT_CONFIG_JOB"', attribute => 'end_date'); sys.dbms_scheduler.set_attribute( name => '"ORACLE_OCM"."MGMT_CONFIG_JOB"', attribute => 'schedule_name', value => 'SYS.MAINTENANCE_WINDOW_GROUP'); sys.dbms_scheduler.enable( '"ORACLE_OCM"."MGMT_CONFIG_JOB"' ); END; /