2014-09-23 71 views
0

我使用外部表從系統中的文件夾中讀取文件。在Oracle中關閉文件外部表

閱讀文件後,當我嘗試將讀取的文件移動到存檔時,出現FILE IN USE錯誤。

是否有一種機制來關閉文件或外部表中的某些內容。

+0

它總是有益的,如果你提供的實際ORA-錯誤號。 – APC 2014-09-23 05:10:43

+0

和確切的Oracle版本和平臺(操作系統)。 – 2014-09-23 06:33:02

回答

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會話中,我移動文件:

早在數據庫
[[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> 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> 

備選方案中,從數據庫中的文件操作,仍未重現。

復位:

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 2014-09-23 06:50:46