关于oracle高版本到低版本导入ORA-39125
2014-05-03 20:32:00
1147533288
原创
682
问题及解决记录如下(导入数据库oracle 10.2.0.1.0):
1.首先oracle11使用exp方式导出dmp,导入oracle10时正常成功,结果统计表数据量发现核对不上,部分空表没有成功导出。
核对导出log后发现,原数据库用户下78张表,实际导出62张表,导入正常,但是缺表,影响后续使用。。
2.改采用oracle11使用expdp方式导出dmp,导入oracle10失败
ORA-39125: Worker unexpected fatal error in KUPW$WORKER.PUT_DDLS while calling DBMS_METADATA.CONVERT [TABLE_STATISTICS]
ORA-06502: PL/SQL: numeric or value error
LPX-00225: end-element tag "HIST_GRAM_LIST_ITEM" does not match start-element tag "EPVALUE"
在网上查了一些资料说是ORACLE的BUG,需要打补丁。
采用以下办法解决成功:
导入的时候加一个exclude=table_statistics
select 'exec dbms_stats.gather_table_stats(ownname=>''' || owner || ''',tabname=>''' || TABLE_NAME || ''',cascade=>TRUE);'
from dba_tables where owner = 'TEST';
获取并批量执行sql(先将数据导入,然后收集模式所有对象的统计信息)
-------------------------------------------------------------------
更新
关于oracle11exp无法导出空表的解决方案:
原因:11G中新特性,当表无数据时,不分配segment,以节省空间。
1.system用户登陆,查询你要修改的用户下的表,我这里修改6个用户对应空表(采集,正确,错误库等等)
select 'alter table '||owner||'.'||table_name||' allocate extent;' from dba_tables where num_rows=0 and owner in ('CJ','ZQ','CW','BF','SY','PZ');
2.批量执行sql,分配segment.
3.E:\soft>exp system/orcl@10.10.10.28/orcl owner=(cj,zq,cw,bf,sy,pz) file=di.dmp log=di.log buffer=409600000 feedback=10000 rows=n
导出多用户,空表结构(rows=n)