Oracle APEX 20.1邮件发送故障:调度器不可用问题求助
Oracle APEX 20.1 邮件调度器(ORACLE_APEX_MAIL_QUEUE)故障排查思路
1. 检查Oracle调度器核心状态
- 查询调度器全局状态:
若结果为SELECT status FROM dba_scheduler_global_attribute WHERE attribute = 'SCHEDULER_STATUS';DISABLED,执行以下命令启用:EXEC DBMS_SCHEDULER.set_scheduler_attribute('SCHEDULER_STATUS', 'ENABLED'); - 查看作业执行日志定位具体错误:
根据返回的SELECT log_id, job_name, status, error# FROM dba_scheduler_job_run_details WHERE job_name = 'ORACLE_APEX_MAIL_QUEUE' ORDER BY log_date DESC;error#查询对应详细错误信息,进一步缩小故障范围。
2. 验证APEX邮件作业的权限与配置
- 检查
APEX_200200用户的调度器权限:
确保用户拥有SELECT grantee, privilege FROM dba_sys_privs WHERE grantee = 'APEX_200200' AND privilege LIKE '%SCHEDULER%';CREATE JOB、MANAGE SCHEDULER等必要权限。 - 确认作业关联的程序配置:
先查询作业关联的程序名:
再查看程序定义是否指向正确的APEX邮件存储过程:SELECT job_name, program_name, enabled FROM dba_scheduler_jobs WHERE job_name = 'ORACLE_APEX_MAIL_QUEUE';
正常情况下,SELECT program_name, action FROM dba_scheduler_programs WHERE program_name = '<上述查询到的程序名>';action应为APEX_MAIL.SEND_QUEUE;。
3. Windows Server环境特定排查
- 检查Oracle调度器服务状态:
在Windows服务列表中找到OracleScheduler<ORACLE_SID>服务,确认其处于运行中状态,若未启动则手动启动并设置为自动启动。 - 验证Oracle服务账户权限:
确保Oracle数据库服务运行的账户拥有足够操作系统权限,包括访问临时目录、执行PL/SQL程序的权限,避免因Windows权限限制导致作业执行失败。 - 检查
UTL_FILE_DIR配置:
确认配置的目录存在且可被Oracle服务账户读写,APEX邮件发送依赖该组件完成附件等操作。SELECT value FROM v$parameter WHERE name = 'utl_file_dir';
4. 重建APEX邮件调度作业
- 禁用并删除原有故障作业:
EXEC DBMS_SCHEDULER.DISABLE('APEX_200200.ORACLE_APEX_MAIL_QUEUE'); EXEC DBMS_SCHEDULER.DROP_JOB('APEX_200200.ORACLE_APEX_MAIL_QUEUE'); - 重新初始化邮件调度作业:
执行APEX自带的初始化脚本重建作业:EXEC APEX_200200.WWV_FLOW_MAIL_ADMIN.INIT_SCHEDULER_JOB; - 手动触发作业测试:
执行后检查邮件队列是否被正常处理,同时查看是否有新的报错信息。EXEC DBMS_SCHEDULER.RUN_JOB('APEX_200200.ORACLE_APEX_MAIL_QUEUE', FALSE);
5. 检查APEX组件完整性
- 确认APEX组件状态:
若状态为SELECT component_name, status FROM dba_registry WHERE comp_id = 'APEX';INVALID,重新编译APEX schema对象:EXEC DBMS_UTILITY.COMPILE_SCHEMA('APEX_200200');
内容的提问来源于stack exchange,提问作者McAron
相关产品推荐
相关产品推荐

