1

我想创建一个外部表,但没有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-29913:执行 ODCIEXTTABLEOPEN 标注时出错
ORA-29400:数据磁带错误
KUP-04040:未找到 EXT_DATA_FILES 中的文件 the_external_file.txt
ORA-06512:在“SYS.ORACLE_LOADER”第 19 行

(在谷歌上有很多点击,但似乎没有一个相关)

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

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

或许值得一提的是,我们说的是Oracle 10g。

我错过了一些明显的东西吗?这是允许的吗?

4

2 回答 2

1

所有目录实际上都归 SYS 所有。这就是为什么没有 CREATE DIRECTORY 权限,只有 CREATE ANY DIRECTORY。

因此,在不使用 SYS 模式作为目录名称前缀的情况下尝试该命令,看看会发生什么。

于 2012-03-21T12:42:04.477 回答
0

错误消息显示:“未找到 EXT_DATA_FILES 中的 the_external_file.txt 文件”

你确定它在那里吗?

于 2012-03-21T12:46:06.073 回答