-24247 network error: network access denied by access control list(ACL)
-29260 network error : not Connected.
상기 에러에 대한 처리는 UTL_TCP 패키지의 open_conntect에서 host에 엑세스 컨트롤을 못해서 일어나는 현상입니다.
pl/sql 이나.. 토드 같은 것으로 하기 쿼리를 입력하여 실행합니다.
DECLARE
l_acl_name VARCHAR2(30) := 'utl_tcp.xml';
l_ftp_server_ip VARCHAR2(20) := '127.0.0.1';
l_ftp_server_name VARCHAR2(20) := 'localhostr';
l_username VARCHAR2(30) := 'xxxx'; -- user owner
BEGIN
DBMS_NETWORK_ACL_ADMIN.create_acl (
acl => l_acl_name,
description => 'Allow connections using UTL_TCP',
principal => l_username,
is_grant => TRUE,
privilege => 'connect',
start_date => SYSTIMESTAMP,
end_date => NULL);
COMMIT;
DBMS_NETWORK_ACL_ADMIN.unassign_acl (
acl => l_acl_name,
host => l_ftp_server_ip,
lower_port => NULL,
upper_port => null);
DBMS_NETWORK_ACL_ADMIN.assign_acl (
acl => l_acl_name,
host => l_ftp_server_name,
lower_port => NULL,
upper_port => null);
commit;
END;
/
assign_acl을 하나만 해도 되지만, localhost 또는 127.0.0.1 두가지 모두 사용하므로 두개 모두 assign 해줍니다. oracle ftp package의 내부 로직에 의해 도메인은 IP로 변환되어져 커넥트가 되기 때문입니다.
만약 host명만 assign했다면 login 의 connect에는 도메인 호스트명을 넣어서 접속 성공 하지만, put, get을 할 때에는 IP로 커넥팅이 되기 때문에, -29260 예외가 발생합니다.
P.S. 내부에서 서버끼리 전송을 한다면, IP만 assign 하시고, IP로 커넥팅을 하시면 됩니다.
저도, 이 문제 때문에, 며칠 고생하고, 그냥 Shell Script로 FTP를 만들었습니다.;;;;