【发布时间】: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