ORA-24247处理过程

问题描叙

记录一下ORA-24247引发job执行失败的处理过程:

select sjrd.log_id,sjrd.log_date,sj.owner,sj.job_name,sj.job_subname,sjrd.status from dba_scheduler_job_run_details sjrd
join dba_scheduler_jobs sj
on sjrd.owner=sj.owner and sjrd.job_name=sj.job_name
where sjrd.status<>'SUCCEEDED'
order by log_date desc

输出:

    LOG_ID LOG_DATE                                                                    OWNER      JOB_NAME     JOB_SUBNAM STATUS
---------- --------------------------------------------------------------------------- ---------- ------------ ---------- ----------
    716776 17-MAY-24 03.04.04.980417 AM +07:00                                         IPCASICS   IT_INVENTORY            FAILED
    716700 16-MAY-24 03.04.03.233071 AM +07:00                                         IPCASICS   IT_INVENTORY            FAILED
    716624 15-MAY-24 03.04.02.564900 AM +07:00                                         IPCASICS   IT_INVENTORY            FAILED
    716548 14-MAY-24 03.04.02.866003 AM +07:00                                         IPCASICS   IT_INVENTORY            FAILED
    716348 12-MAY-24 03.04.03.004062 AM +07:00                                         IPCASICS   IT_INVENTORY            FAILED
    716223 11-MAY-24 03.04.03.778856 AM +07:00                                         IPCASICS   IT_INVENTORY            FAILED
    716071 09-MAY-24 03.04.03.256950 AM +07:00                                         IPCASICS   IT_INVENTORY            FAILED
    715990 08-MAY-24 03.04.06.599765 AM +07:00                                         IPCASICS   IT_INVENTORY            FAILED
    715914 07-MAY-24 03.04.07.171701 AM +07:00                                         IPCASICS   IT_INVENTORY            FAILED 

查看addition_info信息:
addition_info显示错误为ORA-24247

select sjrd.additional_info from dba_scheduler_job_run_details sjrd
join dba_scheduler_jobs sj
on sjrd.owner=sj.owner and sjrd.job_name=sj.job_name
where sjrd.log_id=716776 and sjrd.status<>'SUCCEEDED'
order by log_date desc

输出:

ADDITIONAL_INFO
-------------------------------------------------
ORA-24247: 存取控制清單 (ACL) 拒絕網路存取
ORA-06512: 在 "SYS.UTL_TCP", line 17
ORA-06512: 在 "SYS.UTL_TCP", line 267
ORA-06512: 在 "SYS.UTL_SMTP", line 161
ORA-06512: 在 "SYS.UTL_SMTP", line 197
ORA-06512: 在 "IPCASICS.PKG_MAIL", line 240
ORA-06512: 在 "IPCASICS.PKG_MAIL", line 118
ORA-06512: 在 "IPCASICS.PKG_MAIL", line 333
ORA-06512: 在 "IPCASICS.EMAIL", line 30
ORA-06512: 在 line 9
ORA-24247: 存取控制清單 (ACL) 拒絕網路存取

手动执行IPCASICS.EMAIL产生的错误讯息跟addition_info记录一致:

exec ipcasics.email('SYS.ADMIN@YUYUN.COM','BOB@YUYUN.COM','TEST','THIS A TEST')
ERROR at line 1:
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at "SYS.UTL_TCP", line 17
ORA-06512: at "SYS.UTL_TCP", line 267
ORA-06512: at "SYS.UTL_SMTP", line 161
ORA-06512: at "SYS.UTL_SMTP", line 197
ORA-06512: at "IPCASICS.PKG_MAIL", line 240
ORA-06512: at "IPCASICS.PKG_MAIL", line 118
ORA-06512: at "IPCASICS.PKG_MAIL", line 333
ORA-06512: at "IPCASICS.EMAIL", line 30
ORA-06512: at line 1

Solution

从 11g 开始,要使用 UTL_MAIL 或 UTL_SMTP 发送邮件,需要在数据库中创建 ACL。
执行下面的查询,host部风为mail.yuyun.com,实际公司mail host已经变更为zsys.yuyun.com,看来问题出在这里

SELECT na.aclid,na.acl,nap.principal,nap.privilege,nap.is_grant,na.host FROM dba_network_acl_privileges nap
JOIN dba_network_acls na
ON nap.aclid=na.aclid
ACLID                            ACL                            PRINCIPAL                      PRIVILEGE               IS_GRANT             HOST
-------------------------------- ------------------------------ ------------------------------ ----------------------- -------------------- ------------------------------
77DAF452E0DF08C9E050007F01005A84 /sys/acls/UTL_SMTP.xml         IPCASICS                       connect                 true                 mail.yuyun.com

设置SMTP_OUT_SERVER 参数

SQL> alter system set smtp_out_server='zsys.yuyum.com' scope=both;
System altered.

创建ACLS

--- creating ACL as below
exec DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('send_mail.xml','Allow mail to be send', 'IPCASICS', TRUE, 'connect');
commit;
----Grant the connect and resource privilege as below
exec DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('send_mail.xml','IPCASICS',TRUE, 'connect');
exec DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE('send_mail.xml','IPCASICS',TRUE, 'resolve');
exec DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('send_mail.xml','ZSYS.YUYUN.COM',25);
commit;

验证

查看权限已经成功授予

SELECT na.aclid,na.acl,nap.principal,nap.privilege,nap.is_grant,na.host FROM dba_network_acl_privileges nap
JOIN dba_network_acls na
ON nap.aclid=na.aclid
ACLID                            ACL                            PRINCIPAL                      PRIVILEGE               IS_GRANT             HOST
-------------------------------- ------------------------------ ------------------------------ ----------------------- -------------------- ------------------------------
77DAF452E0DF08C9E050007F01005A84 /sys/acls/UTL_SMTP.xml         IPCASICS                       connect                 true                 mail.yuyun.com
18A4B8E845E61416E0634A0113AC8DBC /sys/acls/send_mail.xml        IPCASICS                       connect                 true                 zsys.yuyun.com
18A4B8E845E61416E0634A0113AC8DBC /sys/acls/send_mail.xml        IPCASICS                       resolve                 true                 zsys.yuyun.com

重新手动执行email发送成功

SQL> exec ipcasics.email('SYS.ADMIN@YUYUN.COM','BOB@YUYUN.COM','TEST','THIS A TEST');
PL/SQL procedure successfully completed.
  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ORA-00376是Oracle数据库的错误代码,表示在尝试打开或读取数据文件时发生了错误。这可能是由于数据文件已经损坏或丢失,或者由于数据库实例无法访问数据文件。 ORA-01110也是Oracle数据库的错误代码,表示在尝试打开数据库时发生了错误。这可能是由于数据库文件已经损坏或丢失,或者由于数据库实例无法访问数据库文件。 在处理这些错误时,需要检查数据库文件的完整性和可用性,并尝试修复或恢复任何损坏的文件。还可以尝试重新启动数据库实例或重新启动服务器以解决问题。如果问题仍然存在,请参考Oracle文档或联系Oracle支持团队以获取更多帮助。 ### 回答2: ORA-00376是Oracle数据库出现的错误代码,表示无法在指定的日志文件中找到数据块。这通常发生在数据库回滚或恢复过程中。当Oracle尝试读取日志文件时,发现某个数据块在日志文件中不存在,导致无法继续进行回滚或恢复操作。 解决ORA-00376错误的方法包括: 1. 确保数据库的日志文件完整且可用。可以检查日志文件的存储位置和状态。 2. 如果数据库已经关闭,可以尝试删除损坏的日志文件,然后重新启动数据库。Oracle会自动创建新的空白日志文件。 3. 如果数据库仍然打开,可以尝试切换到另一个日志文件组。可以使用ALTER DATABASE命令进行切换。 4. 如果以上方法都无效,可能需要进行数据库恢复操作。可以使用Oracle的恢复工具或备份来修复数据。 ORA-01110是Oracle数据库出现的错误代码,表示无法打开数据库文件。这通常发生在启动或恢复数据库时,Oracle无法找到或访问指定的数据文件。 解决ORA-01110错误的方法包括: 1. 确保数据文件的路径和名称是否正确。可以检查数据库参数文件(parameter file)中数据文件的配置。 2. 检查数据文件所在的磁盘或文件系统是否可用。确保数据库服务器可以正常访问数据文件所在的位置。 3. 如果数据文件已经存在且无法打开,可以尝试使用ALTER DATABASE命令指定新的数据文件。例如,ALTER DATABASE RENAME FILE 'oldfile' TO 'newfile'。 4. 如果数据文件损坏或丢失,可能需要进行数据库恢复操作。可以使用Oracle的恢复工具或备份来修复数据。 综上所述,ORA-00376和ORA-01110是Oracle数据库中常见的错误代码,分别表示无法在日志文件中找到数据块和无法打开数据库文件。解决这些错误通常需要检查和修复相关的日志文件和数据文件。 ### 回答3: ORA-00376和ORA-01110是Oracle数据库中的错误代码,表示数据库发生了一些问题。 ORA-00376错误代码表示无法读取文件。它通常出现在数据库打开和恢复过程中,可能是由于文件丢失、文件损坏或访问权限限制等问题导致的。要解决这个问题,可以检查文件路径是否正确,确保文件存在并且具有适当的访问权限。如果文件已损坏,则可以尝试进行修复或还原。 ORA-01110错误代码表示数据文件已经写满或无法写入。这通常是由于磁盘空间不足或文件系统错误导致的。要解决这个问题,需要检查磁盘空间是否足够,并确保文件系统没有出现错误。如果磁盘空间不足,则可以释放一些空间或重新分配空间。如果文件系统出现错误,则可以尝试修复文件系统或更换存储设备。 总之,ORA-00376和ORA-01110是Oracle数据库中常见的错误代码,表示数据库遇到了读取文件或写入文件时的问题。要解决这些问题,需要检查文件路径、访问权限、磁盘空间和文件系统等因素,并采取相应的措施修复或恢复数据库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值