Tôi có một công việc thường xuyên được lên lịch trên cơ sở dữ liệu Oracle RAC. Cơ sở dữ liệu này sẽ gửi cho tôi một email thông báo về tình trạng này. Điều này xảy ra sau mỗi 30 phút. Công việc đã không thành công ở một trong các nút, nhưng không phải các nút khác. Công việc đưa ra những lỗi sau:
ORA-12012: error on auto execute of job "OWNER"."JOB_NAME" 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 "SYS.UTL_MAIL", line 386 ORA-06512: at "SYS.UTL_MAIL", line 599 ORA-06512: at line 41
Điều kỳ lạ ở cái này là cái sau hoạt động trên tất cả các trường hợp:
SQL> exec utl_mail.send(sender=>'[email protected]', - > recipients=>'[email protected]', - > subject=>'test from orcl1', - > message=>'test from orcl1', - > mime_type=>'text; charset=us-ascii');
PL/SQL procedure successfully completed.
Vì vậy, khi tôi gửi email trên ví dụ, nó hoạt động tốt. Nhưng chủ sở hữu công việc đang nhận lỗi. Vì vậy, hãy tạo một ACL và chỉ định các priv.
SQL> exec dbms_network_acl_admin.create_acl ( - > acl=>'utl_mail_acl.xml', - > description=>'ACL for using UTL_MAIL', - > principal=>'OWNER', - > is_grant=>TRUE, - > privilege=>'connect', - > start_date=>SYSTIMESTAMP, - > end_date=>NULL);
PL/SQL procedure successfully completed.
SQL> exec dbms_network_acl_admin.assign_acl( - > acl=>'utl_mail_acl.xml', - > host=>'smtprelay.acme.com', - > lower_port=>25, upper_port=>NULL);
PL/SQL procedure successfully completed.
SQL> commit;
Commit complete.
Bây giờ thủ tục hoạt động theo chỉ dẫn.