Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-16
제목 UTL_FILE PACKAGE 사용 시 발생하는 INVALID OPERATION ERROR (HP,
UTL_FILE PACKAGE 사용 시 발생하는 INVALID OPERATION ERROR (HP, SUN)
==================================================================


Utl_file package 를 이용해서 OS에 file을 write하기 위해서 다음과 같은
script 를 사용할 때 Invalid Operation 이 발생할 수 있다.

declare
file_handle UTL_FILE.FILE_TYPE;
begin
file_handle:=utl_file.fopen('/tmp','myfile','a');
end;
/
This will return:
declare
*
ERROR at line 1:
ORA-6510: PL/SQL: unhandled user-defined exception
ORA-6512: at "SYS.UTL_FILE", line 85
ORA-6512: at "SYS.UTL_FILE", line 120
ORA-6512: at line 4

Oracle7 Server Application Developers's Guide 에서는 다음처럼 기술하고 있다.

Note: If you open a file that does not exist using the 'a' value for
OPEN_MODE, the file is created in write ('w') mode. (A32536-1)

그러나, 실제로 HP 와 SUN Machine 에 install 된 Oracle 7.3.x 에서는 file 이
존재하지 않을 경우 open_mode 를 'a' 로 지정하면 위에서 처럼 unhandled
exception 이 발생한다. 물론 file 이 이미 존재하는 경우엔 내용이 append 가
되며 error 가 발생하지는 않는다.
따라서, 위와 같은 에러가 발생할 때에는 UTL_FILE.FOPEN 의 file mode 를
반드시 'w' 로 지정해야 한다.
그리고, Oracle DB 나 Listener Process 가 restart 되기 전에 지정한
UTL_FILE_DIR parameter 의 directory 가 실재 존재할 경우에도
Oracle user 가 해당 directory 에 대한 적절한 permission 을 부여받을 때까지는
error 가 계속될 것이므로 이를 반드시 확인해야 한다.

Windows NT 에서는 위에서 설명한 OPEN_MODE 에 따른 error 가 발생하지는 않는다.
그러나, 일반적인 utl_file package 를 사용할 때 Invalid Operation exception
error 가 발생할 수 있는데 이 때는 제어판의 서비스에서 OracleService 가 어떤
logon account 로 시작되었는지를 확인해 보아야 한다. 만약, SYSTEM account 가
OracleService 를 시작했다면 SYSTEM account 는 반드시 UTL_FILE.FOPEN 에서
지정되는 target directory 에 대한 permission 을 가지고 있어야 한다.
OracleService 가 Administrator 나 다른 account 로 시작되었다면 다른 Oracle
Service 들도 모두 같은 account 로 시작되어야 하며 마찮가지로 target
directory 에 대한 permission 도 받아야 한다.
Comment
등록된 코멘트가 없습니다.