带有dba目录的Oracle外部表

时间:2012-03-21 12:27:01

标签: oracle oracle10g external-tables

我想创建一个外部表,但没有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;

(我通过向Toad询问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。

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

2 个答案:

答案 0 :(得分:1)

所有目录实际上都归SYS所有。这就是没有CREATE DIRECTORY特权的原因,只有CREATE ANY DIRECTORY。

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

答案 1 :(得分:0)

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

你确定它在那里吗?