我已经设置了一个简单的Oracle外部表测试,我(与DBA和Unix管理员一起)无法工作.
以下内容基于Oracle的外部表概念.我们使用的数据库是11g.
这是外部表定义:
drop table emp_load;
CREATE TABLE emp_load
(employee_number CHAR(5),
employee_dob DATE,
employee_last_name CHAR(20),
employee_first_name CHAR(15),
employee_middle_name CHAR(15),
employee_hire_date DATE)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY defaultdir
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE
FIELDS (employee_number CHAR(2),
employee_dob CHAR(20),
employee_last_name CHAR(18),
employee_first_name CHAR(11),
employee_middle_name CHAR(11),
employee_hire_date CHAR(10) date_format DATE mask "mm/dd/yyyy"
)
)
LOCATION ('external_table_test.dat')
);
Run Code Online (Sandbox Code Playgroud)
这是"external_table_test.dat"的内容:
56november, 15, 1980 baker mary alice 09/01/2004
87december, 20, 1970 roper lisa marie 01/01/1999
Run Code Online (Sandbox Code Playgroud)
我能够运行创建"emp_load"的脚本,没有任何问题.我也可以很好地描述表格.当我尝试"select*from emp_load"时,我收到以下错误:
SQL> select * from emp_load;
select * from emp_load
*
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
error opening file /defaultdir/EMP_LOAD_29305.log
Run Code Online (Sandbox Code Playgroud)
编辑1
oracle对目录具有读/写权限.
编辑2
我能够通过使用以下外部表定义传递此错误:
CREATE TABLE emp_load
(employee_number CHAR(3),
employee_last_name CHAR(20),
employee_middle_name CHAR(15),
employee_first_name CHAR(15)
)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY defaultdir
ACCESS PARAMETERS
(RECORDS DELIMITED BY NEWLINE
BADFILE DHHSMAPSIS:'EMP.BAD'
LOGFILE DHHSMAPSIS:'EMP.LOG'
FIELDS TERMINATED BY ','
)
LOCATION ('external_table_test2.dat')
)
REJECT LIMIT UNLIMITED;
Run Code Online (Sandbox Code Playgroud)
我的.dat文件看起来像这样......
056,baker,beth,mary
057,smith,teddy,john
Run Code Online (Sandbox Code Playgroud)
我必须将"EMP.BAD","EMP.LOG"和"external_table_test2.dat"的权限设置为777才能使其正常工作.oracle用户不拥有这些文件,但与文件位于同一组中.
知道为什么当我将这些文件的权限设置为770时,我无法使其工作?同样,oracle与那些文件在同一组中,所以我认为770对于权限是可以的......
我们的 Oracle 版本在 Red Hat Enterprise Linux 上运行。我们尝试了几种不同类型的组权限,但没有成功。/defaultdir 目录有一个组,该组是 oracle 用户的辅助组。当我们更新 /defaultdir 目录以拥有一组“oinstall”(oracle 的主要组)时,我能够毫无问题地从该目录下的外部表中进行选择。
因此,对于其他可能遇到此问题的人,请将目录设置为 Oracle 的主要组作为组,它可能会像我们一样为您解决问题。我们能够将目录和文件的权限设置为 770,并且现在在外部表上选择工作正常。