Oracle导出时报00904,exp导出出现:ORA-00904: : invalid identifier

相关文章:

《exp导出出现:ORA-00904: "POLTYP": invalid identifier》:http://blog.itpub.net/23135684/viewspace-680615/

客户反映将JFY用户下的某个表的字段由VARCHAR2(50)调整为VARCHAR2(100)之后,执行exp导出时收到如下的报错:

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export done in ZHS16GBK character set and AL16UTF16 NCHAR character set

Note: grants on tables/views/sequences/roles will not be exported

About to export specified users ...

. exporting pre-schema procedural objects and actions

. exporting foreign function library names for user JFY

. exporting PUBLIC type synonyms

EXP-00008: ORACLE error 904 encountered

ORA-00904: : 标识符无效<<<< 两个冒号之间是空格,并没有具体的标识符,这跟以前遇到过的ORA-00904报错不同。

EXP-00000: Export terminated unsuccessfully

客户的exp导出操作是在数据库服务器段完成的,且调度脚本已经稳定运行了1年多,在调整字段长度后出现该报错。脚本中exp的语句如下:

exp jfy/xxx BUFFER=8192 FILE=$bakdir$myfile.dmp ROWS=y COMPRESS=y CONSTRAINTS=y GRANTS=n INDEXES=y LOG=$bakdir$mylogfile

jfy是个DBA权限的用户。

根据以上的错误情况,在MOS中找到如下符合描述的文章:

Errors EXP-8 ORA-904 During Export (Doc ID 1091927.1)

In this Document

Applies to:

Oracle Database - Enterprise Edition - Version 10.2.0.4 and later

Information in this document applies to any platform.

***Checked for relevance on 27-Jun-2013***

Symptoms

You are attempting to perform an export as the SYSTEM user or a DBA. During export, the following errors occurred:

EXP-00008: ORACLE error 904 encountered

ORA-00904: : invalid identifier  <<<< 两个冒号之间是一个空格,这和上面的报错情况一致。

When performing a trace on the export, we see that the ORA-904 error is caused by the following statement:

PARSE ERROR #9:len=302 dep=0 uid=5 oct=3 lid=5 tim=778463694169 err=904

SELECT

SYNNAM, DBMS_JAVA.LONGNAME(SYNNAM), DBMS_JAVA.LONGNAME(SYNTAB), TABOWN,

TABNODE, PUBLIC$, SYNOWN, SYNOWNID, TABOWNID, SYNOBJNO FROM SYS.EXU9PTS

WHERE SYNOBJNO IN ( SELECT SYNOBJNO FROM SYS.EXU9TYPT WHERE TABOBJNO =

:1 ) ORDER BY SYNTIME

Cause

The PUBLIC privilege has been revoked from the DBMS_JAVA package.

Privileges

to the DBMS_JAVA package are needed for the export to succeed. However,

as there is concern about security issues due to privileges on the

DBMS_JAVA many have revoked the execute privilege to this package to

keep the database secure.

Solution

Explicitly grant EXECUTE on the DBMS_JAVA package to the DBA role:

SQL> grant execute on DBMS_JAVA to dba;

This will allow members of the DBA role to have the rights to

perform the export while keeping the DBMS_JAVA package out of the PUBLIC

role.

按照文章的提示,执行grant execute on DBMS_JAVA to dba;语句之后exp操作恢复正常。

出现这个问题的原因是PUBLIC的DBMS_JAVA包权限被回收,要想执行exp导出成功需要DBMS_JAVA的execute权限,然而担心到安全的问题,回收了DBMS_JAVA包的执行权限,以保证数据库的安全。

按照Oracle的解释,那么一定是某种不安全的操作触发了Oracle因为安全的原因回收了PUBLIC的DBMS_JAVA execute权限,从而导致的该报错。

--end--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值