Saya memiliki pekerjaan yang dijadwalkan secara teratur di database Oracle RAC yang akan mengirimi saya email peringatan untuk suatu kondisi. Ini terjadi setiap 30 menit. Pekerjaan telah gagal di salah satu node, tetapi tidak pada yang lain. Pekerjaan mengeluarkan kesalahan ini:
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
Apa yang aneh tentang yang satu ini adalah bahwa berikut ini berfungsi pada semua contoh:
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.
Jadi ketika saya mengirim email pada instance, itu berfungsi dengan baik. Tetapi pemilik pekerjaan mendapatkan kesalahan. Jadi buat ACL dan tetapkan privs.
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.
Sekarang prosedurnya berjalan sesuai petunjuk.