ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

exp导出出现:ORA-00904: : invalid identifier

2021-04-10 10:02:12  阅读:233  来源: 互联网

标签:00904 DBMS JAVA execute invalid export exp PUBLIC




    客户反映将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


Symptoms

Cause

Solution


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--  
 

标签:00904,DBMS,JAVA,execute,invalid,export,exp,PUBLIC
来源: https://blog.51cto.com/lhrbest/2696555

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有