0

外部テーブルを使用して、システム内のフォルダーからファイルを読み取ります。

ファイルを読み取った後、読み取ったファイルをアーカイブに移動しようとすると、FILE IN USEエラーが発生します。

外部テーブルのファイルまたは何かを閉じるメカニズムはありますか。

4

1 に答える 1

2

あなたの経験を再現することはできません。オペレーティング システムなどの関連する詳細や、番号を含む完全な Oracle エラー メッセージを含む、より詳細なテスト ケースを提供してください。

OSディレクトリへの読み取り/書き込みアクセスが与えられた...

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 セッションでファイルを移動します。

[oracle@localhost ~]$ cd drop_zone
[oracle@localhost drop_zone]$ ls
data20140923.txt  T42_EXT_3295.log
[oracle@localhost drop_zone]$ mv data20140923.txt ../data_archive
[oracle@localhost drop_zone]$ ls
T42_EXT_3295.log
[oracle@localhost 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> 
于 2014-09-23T05:38:09.247 に答える