2014-09-23 3 views
0

외부 테이블을 사용하여 시스템의 폴더에서 파일을 읽습니다.Oracle 외부 테이블에서 파일 닫기

파일을 읽은 후 읽은 파일을 아카이브로 이동하려고하면 FILE IN USE 오류가 발생합니다.

외부 테이블의 파일 또는 일부를 닫을 수있는 메커니즘이 있습니까?

+0

당신이 실제 ORA- 오류 번호를 제공하는 경우 그것은 항상 도움이됩니다. – APC

+0

정확한 Oracle 버전 및 플랫폼 (운영 체제). –

답변

2

경험을 재현 할 수 없습니다. 운영 체제 및 번호를 포함한 전체 Oracle 오류 메시지와 같은 관련 세부 정보를 포함하여보다 자세한 테스트 사례를 제공하십시오.

운영체제 디렉토리에

감안할 때 읽기 쓰기 액세스 ...

SQL> select * from all_directories 
    2 where directory_name like 'DATA%' 
    3/

OWNER DIRECTORY_NAME DIRECTORY_PATH 
------ --------------- ------------------------ 
SYS DATA_DROP  /home/oracle/drop_zone 


SQL> 

... 나는 조회 할 수 있습니다이 테이블 ...

create table t42_ext (
    field1 number, 
    field2 varchar2(20) 
) 
organization external 
(
     type oracle_loader 
     default directory data_drop 
     access parameters 
     (
       records delimited by newline 
       fields terminated by ',' 
       missing field values are null 
     ) 
     location ('data20140923.txt') 
) 
reject limit unlimited; 

... 작성 :

SQL> select * from t42_ext; 

    FIELD1 FIELD2 
---------- -------------------- 
     23 'some data' 

SQL> 

그런 다음 별도의 OS 세션에서 파일을 이동합니다.

여전히 재생되지, 데이터베이스 내에서 조작 파일,

SQL> r 
    1* select * from t42_ext 
select * from t42_ext 
       * 
ERROR at line 1: 
ORA-29913: error in executing ODCIEXTTABLEOPEN callout 
ORA-29400: data cartridge error 
KUP-04040: file data20140923.txt in DATA_DROP not found 

SQL> 

대체 시나리오 :

[[email protected] ~]$ cd drop_zone 
[[email protected] drop_zone]$ ls 
data20140923.txt T42_EXT_3295.log 
[[email protected] drop_zone]$ mv data20140923.txt ../data_archive 
[[email protected] drop_zone]$ ls 
T42_EXT_3295.log 
[[email protected] drop_zone]$ 

위로 데이터베이스에 나는 더 이상 테이블을 조회 할 수 있습니다.

리셋 :

SQL> select * from t42_ext; 

    FIELD1 FIELD2 
---------- -------------------- 
     23 'some data' 

SQL> begin 
    utl_file.frename(
      src_location  => 'DATA_DROP', 
      src_filename  => 'data20140923.txt', 
      dest_location => 'DATA_ARCH', 
      dest_filename => 'data20140923.txt', 
      overwrite  => FALSE); 
end; 
/
    2 3 4 5 6 7 8 9 
PL/SQL procedure successfully completed. 

SQL> select * from t42_ext; 
select * from t42_ext 
       * 
ERROR at line 1: 
ORA-29913: error in executing ODCIEXTTABLEOPEN callout 
ORA-29400: data cartridge error 
KUP-04040: file data20140923.txt in DATA_DROP not found 


SQL> 
+0

액세스 권한이 문제였습니다. 지금 해결되었습니다. – theDbGuy

관련 문제