题记:今天在监控系统上收到一套数据库的job异常报警,这里记录一下解决过程,,分享出来!
alert日志:
tue dec 13 04:00:03 2011
errors in file /opt/oracle/diag/rdbms/ndmcdb/ndmcdb/trace/ndmcdb_j000_11169.trc:
ora-12012: error on auto execute of job 30
ora-29283: invalid file operation
ora-06512: at sys.utl_file, line 41
ora-06512: at sys.utl_file, line 512
ora-29283: invalid file operation
ora-06512: at ndmc.proc_todo_task, line 74
ora-06512: at line 1
于是到数据库中查询:
job schema user last date next date total time b interval failures what
---------- ----------------- -------------------- -------------------- ---------- - ------------------------------ ---------- -------------------------
30 ndmc 01-jan-4000 00:00:00 0 y trunc(sysdate + 1) + 4/24 16 proc_todo_task;
现在这个job已经不可用了。
根据日志中的提示,用pl/sql developer找到该存储过程:
定位到74行:
这里是要打开一个目录,那么这个path是在哪里定义的呢?
于是查看数据库:
sql> col directory_path for a50
sql> col owner for a20
sql> select * from dba_directories;
owner directory_name directory_path
-------------------- ------------------------------ --------------------------------------------------
sys ndmigexpdir2 /home/oracle/ndmig_expdpdata
sys ndmigexpdir /home/oracle/archive/ndmig/expdpdata
sys back_msg_logs_path /home/oracle/msgbackup/work
sys unsub_data_path /home/oracle/backup/unsub_data
sys sharelog /home/oracle/share/
sys diskpkgfilecatalog /home/oracle/backup/pkg_incon_data/diskpkgfile
sys logcatalog /home/oracle/backup/pkg_incon_data
sys data_pump_dir /opt/oracle/product/11g/db/rdbms/log/
sys oracle_ocm_config_dir /opt/oracle/product/11g/db/ccr/state
那么确认系统中是否存在这个目录或是这个目录权限是否正确:
oracle@ndmcdb05:~> cd /home/oracle/backup/unsub_data
-bash: cd: /home/oracle/backup/unsub_data: no such file or directory
发现这个目录不存在,于是手工创建:
oracle@ndmcdb05:~> mkdir -p /home/oracle/backup/unsub_data
接着需要将job的属性修改正确:
问题解决!