ORA-24247′nın çözümü
Unix crontab da çalıştırdığım oracle scriptlerde sonucu mail olarak alabiliyordum. Bu defa crontab yerine oracle job tanımlayarak procedure leri çalıştırmak istedim. Oracle 11gR2 de tanımladığım job ile UTL_SMTP kullanarak e-posta göndermek için yazdığım oacle proceduru execute ettiğimde aşağıdaki hatayı aldım.
EXEC TEST.PROC_SEND_MAIL
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 246
ORA-06512: at “SYS.UTL_SMTP”, line 127
ORA-06512: at “SYS.UTL_SMTP”, line 150
ORA-06512: at ” TEST.TEST_MAIL_PKG”, line 47
ORA-06512: at “TEST.PROC_SEND_MAIL”, line 14
ORA-06512: at line 1
Sevdiğim bir başarılı network mühendisi arkadaşın “iyi mühendis iyi google kullanandır” söyleminden yola çıkarak google’a başvurduğumda bi kaç hatalı denemeden sonra konunun çözümünü buldum.
Öncelikle SYSDBA olarak veritabanına bağladıktan sonra aşağıdaki sql i çalıştırıyoruz. İnitial privilege ayarlıyarak bir access control list (ACL) oluşturuyoruz.
begin
dbms_network_acl_admin.create_acl (
acl => ’utlpkg.xml’,
description => ’ACL for user to connect to SMTP Server’,
principal => ’ORACLE_USERNAME’,
is_grant => TRUE,
privilege => ’connect’);
end;
/
Commit;
Daha sonra oluşturduğumuz acl’i mail serverımızın hostuna atıyoruz ve TCP port aralığı isteğe bağlı olarak belirtebiliyoruz.
BEGIN
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL (
acl => ’utlpkg.xml’,
host => ’mailserver.domain.name’, — yada mail server host ip
lower_port => 1,
upper_port => 10000);
END;
/
commit;
Son olarak ACL tanımlarken belirttiğimiz oracle_user’a network erişimi için izin veriyoruz.
begin
dbms_network_acl_admin.add_privilege (
acl => ’utlpkg.xml’,
principal => ’ ORACLE_USERNAME’,
is_grant => TRUE,
privilege => ’connect’);
end;
/
commit;
Bu 3 adımdan sonra, mail gönderemek için yazdığım proceduru çalıştırdığımda herhangi ORA hatası ile karşılaşmadan mail gönderebildim.
-bash-3.00$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Fri Nov 23 15:03:56 2012
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SQL>
SQL> exec TEST.PROC_SEND_MAIL;
PL/SQL procedure successfully completed.
SQL>