【问题标题】:Oracle external table with dba's directory带有 dba 目录的 Oracle 外部表
【发布时间】:2012-03-21 12:27:00
【问题描述】:

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

我是否遗漏了一些明显的东西?这是否允许?

【问题讨论】:

  • 1.为什么在系统中? DBA 不能在正确的模式中创建它吗? 2.你的文件是否真的存在于目录中?
  • txt文件真的存在吗?
  • 嗯,这个目录应该被多个模式使用。我认为在 SYS 或所有用户共同的地方是有意义的。至于文件,是的,它存在,正如我提到的“检查了所有涉及的文件和目录的权限”。 ://
  • @Ben:目录没有模式,它们都属于 SYS(从 11gR2 开始)
  • 呸。真丢人。找到了。所有文件和权限都在那里,一个小问题想。他们移动了整个 friggn 数据库,并且在迁移后没有安装回一些较少使用的 FS(正如 Murphy 预测的那样,我为我的外部表选择了其中一个)。从我的应用程序 POV 一切正常,但 Oracle 没有要查询的 FS。很抱歉打扰你们..

标签: oracle oracle10g external-tables


【解决方案1】:

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

因此,请尝试不使用 SYS 架构作为目录名称前缀的命令,看看会发生什么。

【讨论】:

  • 没有 SYS 的结果相同。它实际上是原始脚本。我添加了 SYS 以使其在问题中明确。无论如何,很高兴知道这一点。错误应该在其他地方。
  • 刚刚发现了一些有趣的东西:在我的开发环境中。如果我这样做 desc EXT_DATA_FILES 它会显示对象的描述。现在,在产品环境中。如果我做同样的desc EXT_DATA_FILES 它不会工作,但是如果我添加 SYS,它将显示描述。对它,例如desc SYS.EXT_DATA_FILES。这会是一个线索吗? @VincentMalgrat 这对您也有意义吗?谢谢!
【解决方案2】:

错误信息如下: "在 EXT_DATA_FILES 中找不到文件 the_external_file.txt"

你确定它在那里吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    相关资源
    最近更新 更多