包含 dba 目录的 Oracle 外部表



我想创建一个外部表,但没有CREATE ANY DIRECTORY权限(无法授予)。公平地说,我要求DBA运行以下内容:

CREATE OR REPLACE DIRECTORY ext_data_files AS '/data/ext_data_files';
GRANT ALL ON DIRECTORY ext_data_files TO MYAPPUSER;

他们做到了,最终的对象有以下脚本:

CREATE OR REPLACE DIRECTORY 
EXT_DATA_FILES AS 
'/data/ext_data_files';
GRANT READ, WRITE ON DIRECTORY SYS.EXT_DATA_FILES TO MYAPPUSER;

(我从向蟾蜍询问desc中得到的)

然后我希望使用这个目录来创建我的外部表,脚本如下:

CREATE TABLE MYAPPUSER.MY_EXT_TABLE
(
  ID                VARCHAR2(100 BYTE),
  LOGIN             VARCHAR2(100 BYTE),
  CODE              VARCHAR2(100 BYTE),
  CREATED_AT        VARCHAR2(100 BYTE)
)
ORGANIZATION EXTERNAL
  (  TYPE ORACLE_LOADER
     DEFAULT DIRECTORY SYS.EXT_DATA_FILES
     ACCESS PARAMETERS 
       ( RECORDS DELIMITED BY NEWLINE
    NOBADFILE
    NOLOGFILE
    FIELDS TERMINATED BY ';'
    MISSING FIELD VALUES ARE NULL
    ( ID, LOGIN, CODE, CREATED_AT) )
     LOCATION (SYS.EXT_DATA_FILES:'the_external_file.txt')
  )
REJECT LIMIT 0
PARALLEL ( DEGREE DEFAULT INSTANCES DEFAULT )
NOMONITORING;

但当我SELECT * FROM MY_EXT_TABLE时,结果就是臭名昭著的

ORA-2913:执行ODCIEXTTABLEOPEN调用时出错
ORA-29400:数据盒式磁带错误
KUP-04040:未找到EXT_DATA_FILES中的_external_file.txt文件
ORA-06512:在"SYS.OORACLE_LOADER",第19行

我对语法很有信心,因为这与我们的DEV环境中使用的脚本完全相同。此外,还检查了所有相关文件和目录的权限,没有低于775的内容。

我在这里与DEV(它工作的地方)的唯一区别是目录EXT_DATA_FILES不是由MYAPPUSER创建的。我试图为它创建一个同义词,但没有效果。

也许值得一提的是,我们谈论的是Oracle10g。

我是不是错过了一些显而易见的东西?这是允许的吗?

所有目录实际上都归SYS所有。这就是为什么没有创建目录权限,只有创建任何目录。

因此,尝试该命令而不在目录名前面加上SYS模式,看看会发生什么。

错误消息如下:"未找到EXT_DATA_FILES中的_external_file.txt文件"

你确定它在那里吗?

相关内容

  • 没有找到相关文章

最新更新