본문 바로가기
Development/Oracle

ORA-24247, ORA-29260 network error

by 로젠크로와싱 2012. 9. 20.
반응형

-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를 만들었습니다.;;;;


반응형