您的位置:首页 > 其它

运行外部表报ORA-06512(权限问题)与实例

2011-12-06 17:42 357 查看
ERROR at line 1:

ORA-29913: error in executing ODCIEXTTABLEOPEN callout

ORA-29400: data cartridge error

KUP-04063: unable to open log file EXTAIKI_4981.log

OS error Permission denied

ORA-06512: at "SYS.ORACLE_LOADER", line 19

将目录的权限o+x(具有执行权限)

再次运行,ok!

---------------------------------------------------------//注意实例中去掉空行以及在create语句中的空格要去掉,否则报错;

 外部表定义:结构被存放在数据字典,而表数据被放在OS文件中的表

  作用:在数据库中查询OS文件的数据,还可以将OS文件数据装载到数据库中

  与其它表的区别:在外部表上不能执行DML操作,也不能在外部表上建索引,只能执行select操用

  二.建一个简单的外部表

  1.建一个OS上的文件

  因为外部表主要是查看OS上的文件,首先在OS上建一个文件

  mkdir -p /oracle/ext

  vi /oracle/ext/ext.dat

  10,20,30

  40,50,60

  70,80,90

  2.授予用户权限,并建立目录对象

  在此我们先建一个新用户

  create user test identified by “123” default tablespace test quota unlimited on test;

  用户授权

  SQL> grant create any directory to test;

  建立目录对象

  SQL> conn test / 123

  Connected.

  SQL> create directory ext as '/oracle/ext';

  Directory created.

  3.建立外部表

  SQL> create table exttable(

  id number,name varchar2(10),i number

  )organization external

  (type oracle_loader

  default directory ext

  Access parameters

  (records delimited by newline

  fields terminated by ','

  )location('ext.dat')

  );

  SQL> select * from exttable;

  ID NAME I

  ---------- ---------- ----------

  10 20 30

  40 50 60

  70 80 90

  测试成功,可见在数据库中可以查询OS文件的数据

二. 使用外部表查看oracle报警日志

  由于在上面实验中已建立了一个用户,并赋相应的权限,而且也有了OS文件(即报警文件alert_SID.log),所以在此直接建立目录对象并建立外部表就可以了。

  1.建立目录对象

  SQL> conn test / 123

  Connected.

  SQL> create directory bdump as '/oracle/u01/app/oracle/admin/DB2/bdump';

  Directory created.

  2.建立外部表

  SQL> create table alert_log(

  text varchar2(400)

  )organization external

  (type oracle_loader

  default directory bdump

  access parameters

  (records delimited by newline

  )location('alert_db2.log')

  );

  3.测试

  首先查看能否查到alert_db2.log的内容

  SQL> select * from alert_log where rownum < 10;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: