WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606
全部博文(599)
分类: Oracle
2010-07-29 11:03:39
今天在用11GR2客户端全库导出10GR2版本的数据库时报ORA-00904错误。
C:\>exp file=full.dmp full=y buffer=10485760
Export: Release 11.2.0.1.0 - Production on 星期四 7月 29 10:24:05 2010
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Produc
tion
With the Partitioning, Oracle Label Security, OLAP, Data Mining Scoring Engine
and Real Application Testing options
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
服务器使用 AL32UTF8 字符集 (可能的字符集转换)
即将导出整个数据库...
. 正在导出表空间定义
EXP-00008: 遇到 ORACLE 错误 904
ORA-00904: "MAXSIZE": 标识符无效
EXP-00000: 导出终止失败
而在本地导出是没问题的。
初步怀疑是版本的问题。
打一个SQLPLUS在会话级启用模块级别的跟踪。
SQL> exec dbms_monitor.serv_mod_act_trace_enable('uatdb2','exp.exe');
PL/SQL procedure successfully completed.
在客户端重新运行:
C:\>exp file=full.dmp full=y buffer=10485760
在跟踪文件中,执行到下面就执行不下去了。
=====================
PARSING IN CURSOR #5 len=37 dep=1 uid=0 oct=3 lid=0 tim=4846799102675 hv=1398610540 ad='df1eea8'
select text from view$ where rowid=:1
END OF STMT
PARSE #5:c=0,e=27,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=4846799102673
EXEC #5:c=0,e=24,p=0,cr=0,cu=0,mis=0,r=0,dep=1,og=4,tim=4846799102771
FETCH #5:c=0,e=30,p=0,cr=2,cu=0,mis=0,r=1,dep=1,og=4,tim=4846799102821
STAT #5 id=1 cnt=1 pid=0 pos=1 obj=63 op='TABLE ACCESS BY USER ROWID VIEW$ (cr=1 pr=0 pw=0 time=21 us)'
=====================
PARSE ERROR #6:len=173 dep=0 uid=5 oct=3 lid=5 tim=4846799103471 err=904
SELECT ID, OWNER, NAME, ISONLINE, CONTENT, INIEXT, SEXT, PCTINC, MINEXT, MAXEXT, MINLEN, DEFLOG, EXT_MGT, ALLOC_TYPE,
BLOCKSIZE, MAXSIZE FROM SYS.EXU9TBS
WAIT #6: nam='SQL*Net message to client' ela= 1 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=4846799103578
WAIT #6: nam='SQL*Net message from client' ela= 3524 driver id=1413697536 #bytes=1 p3=0 obj#=-1 tim=4846799107140
XCTEND rlbk=0, rd_only=1
其中SELECT ID, OWNER, NAME, ISONLINE, CONTENT, INIEXT, SEXT, PCTINC, MINEXT, MAXEXT, MINLEN, DEFLOG, EXT_MGT,
ALLOC_TYPE, BLOCKSIZE, MAXSIZE FROM SYS.EXU9TBS 这条SQL语句里面有个MAXSIZE最为可疑。
拿出来到SQLPLUS下执行以下:
SQL> SELECT ID, OWNER, NAME, ISONLINE, CONTENT, INIEXT, SEXT, PCTINC, MINEXT, AXEXT, MINLEN, DEFLOG, EXT_MGT, ALLOC_TYPE,
BLOCKSIZE, MAXSIZE FROM SYS.EXU9TBS;
SELECT ID, OWNER, NAME, ISONLINE, CONTENT, INIEXT, SEXT, PCTINC, MINEXT, AXEXT, MINLEN, DEFLOG, EXT_MGT, ALLOC_TYPE, BLOCKSIZE,
MAXSIZE FROM SYS.EXU9TBS
*
ERROR at line 1:
ORA-00904: "MAXSIZE": invalid identifier
果然报了相同的错误。 查看了一下这个表的结构,根本没有MAXSIZE这个字段。
SQL> desc sys.EXU9TBS
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
ID NOT NULL NUMBER
OWNER CHAR(6)
NAME NOT NULL VARCHAR2(30)
ISONLINE VARCHAR2(7)
CONTENT VARCHAR2(9)
INIEXT NOT NULL NUMBER
SEXT NOT NULL NUMBER
PCTINC NOT NULL NUMBER
MINEXT NOT NULL NUMBER
MAXEXT NOT NULL NUMBER
MINLEN NUMBER
DEFLOG NOT NULL NUMBER
EXT_MGT NOT NULL NUMBER
ALLOC_TYPE NOT NULL NUMBER
BLOCKSIZE NOT NULL NUMBER
这个表里记录的是和表空间相关的信息。
而在11G的版本中,这个字段是有的。
ORACLE的客户端竟然不向下兼容,不知道这个算不算BUG。
解决方法还是用相同版本的客户端导出或者在服务端导出。