1

Oracle 11g 中的外部表存在问题。我目前正在使用 DB Artisan 来运行我的查询。CREATE 和 ORGANIZATION 代码成功执行,但是当我运行 select 语句时出现错误。我的 .csv 文件的设置方式与带有标题的 EXTERNAL_TABLE 的布局相同。

CREATE TABLE EXTERNAL_TABLE
(
    COL1 NUMBER(14),
     COL2 VARCHAR2(10),
     COL3 VARCHAR2(3),
     COL4 VARCHAR2(3),
     COL4 VARCHAR2(4),
     COL6 NUMBER(4,0),
     COL7 VARCHAR2(20),
     COL8 VARCHAR2(20),
     COL9 NUMBER(3)    
)
ORGANIZATION EXTERNAL 
(
    TYPE ORACLE_LOADER
    DEFAULT DIRECTORY FOLDER1
    ACCESS PARAMETERS
    (   
        RECORDS DELIMITED BY NEWLINE
        FIELDS TERMINATED BY ','
        MISSING FIELD VALUES ARE NULL
        (COL1 CHAR(14),
    COL2 CHAR(10),
    COL3 CHAR(3),
    COL4 CHAR(3),
    COL4 CHAR(4),
    COL6 CHAR(4),
    COL7 CHAR(20),
    COL8 CHAR(20),
    COL9 CHAR(3)                      
                )
    )
    LOCATION ('FILENAME.csv') --Name of flat file.
)
REJECT LIMIT 0;

跑步:

SELECT * FROM EXTERNAL_TABLE

给出这个错误:

ORA-29913: 执行 ODCIEXTTABLEOPEN 标注时出错
ORA-29400: 数据磁带错误
KUP-04027:文件名检查失败:A:\job\job\FILENAME_1234_5566.log
4

3 回答 3

4

KUP-04027:file name check failed表示文件位置无效。

所以,给定这个文件名......

A:\job\job\FILENAME_1234_5566.log

......出现了几个想法:

  1. 正如@jonearles 指出的那样,A: 传统上是为软盘驱动器保留的。您的数据库服务器(即托管您的数据库的机器)是否有 A: 驱动器?如果不是,你应该纠正它。
  2. 该驱动器真的有一个名为的根目录和一个名为job的子目录job吗?还是您的 DIRECTORY 对象路径中的拼写错误folder1
  3. 此外,您的示例代码将文件名指定为“FILENAME.csv”。显然这与错误消息中的文件名不匹配。您实际上为外部表定义中的文件名指定了什么?
  4. 的确切原因因KUP-04027操作系统而异,因为文件命名约定因每个操作系统而异。我的猜测是您的数据库确实驻留在远程 Unix 服务器上,但您正试图从本地 Windows PC 读取文件。如果这是您的方案,它将不起作用:您需要将文件上传到数据库服务器。
于 2013-08-24T05:53:01.520 回答
2

好的,这个问题很久以前就被问过了,但是我最近自己也遇到了这个问题。

问题是 Oracle 外部表不完全支持引用远程网络位置的硬链接。
我所做的就是创建一个专门使用 UNC 路径的目录对象(如 '\remoteserver\proxy' 来指向远程网络位置。这对我来说神奇地工作。

于 2016-02-26T10:12:09.527 回答
0

如果您在 RAC 中并且文件在 ACFS 中,请使用:

DISABLE_DIRECTORY_LINK_CHECK 

修复它!

https://www.realdbamagic.com/using-external-table-windows-rac-acfs/

于 2018-06-02T00:27:22.583 回答