手动迁移原创博客,原文发表在http://blog.itpub.net/20777547/viewspace-1408075/
操作系统版本:rhel 6.2 64
数据库版本:oracle 11.2.0.3.0执行exp的时候报ora-00904错误,也没提示到底是哪个标识错误,很是莫名。
exp xxx file=/home/oracle/aaa.dmp tables=BANK_ISSUER_INFO compress=n
About to export specified tables via Conventional Path ...
. . exporting table BANK_ISSUER_INFO
EXP-00008: ORACLE error 904 encountered
ORA-00904: : invalid identifier
Export terminated successfully with warnings.
之后网上查了一下有可能是客户端和服务器的版本差别引起的错误,但是我是直接在服务端运行的,所以不存在这个问题。
还有一种可能是数据库版本升级引起的数据字典问题,需要运行:
@?/rdbms/admin/catexp.sql;
但是我的问题依旧,任然没有解决。
最后实在想不出什么原因,决定trace个文件看看。通过运行
exec DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE('service name','exp.ext');
得到一个trace文件,并在itpub论坛上一个网友的帮助下找个一个错误:
PARSE ERROR #139846610951344:len=323 dep=0 uid=61 oct=3 lid=61 tim=1421724997747579 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.EXU9TYPTU WHERE TABOBJNO = :1 ) ORDER BY SYNTIME
WAIT #139846610951344: nam='SQL*Net message to client' ela= 1 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=1421724997747843
并提示没有动过dbms_java的权限。
这时猛然想到前任写过一份数据库安全加固的文档,里面的确有提到过数据库运行过:
revoke execute on dbms_java from public;
通过相应的grant操作之后一切就都正常了:
grant execute on dbms_java to xxx;