sql >> データベース >  >> RDS >> Oracle

ORA-24247:ネットワーク・アクセスがアクセス制御リスト(ACL)によって拒否されました

    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.

    これで、手順は指示どおりに機能します。


    1. 1つのパラメータで複数の値を渡す

    2. OracleDropグローバル一時テーブルを強制する

    3. MS-SQLServerのエイリアス列でGROUPBYを実行するにはどうすればよいですか?

    4. Oracle.DataAccessは、VisualStudio2013では選択できません