Oracle RACデータベースで定期的にスケジュールされたジョブがあり、条件に関する電子メールアラートが送信されます。これは30分ごとに発生します。ジョブはノードの1つで失敗していますが、他のノードでは失敗していません。ジョブはこれらのエラーを吐き出します:
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
これについて奇妙なのは、以下がすべてのインスタンスで機能することです。
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.
そのため、インスタンスでメールを送信すると、正常に機能します。しかし、ジョブの所有者はエラーを受け取ります。したがって、ACLを作成し、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.
これで、手順は指示どおりに機能します。