数据的导入导出
(4)Oracle的exp工具有一个query参数可以指定一个where条件来有条件地导出记录, 对于不经常用这个选项的人来说, 经常会遇到这样的错误:
LRM-00112: multiple values not allowed for parameter 'query'
EXP-00019: failed to process parameters, type 'EXP HELP=Y' for help
EXP-00000: Export terminated unsuccessfully
exp ... query='where deptno=10'
exp ... query='where deptno=''10'''
exp ... query='where deptno"<"10'
exp ..... query=\"where col1 \< 1000\"
exp ..... query=\"where col1 \< '1000'\"
(5) EXP数据时出现exp-00003错误
原因:用低版本导高版本数据库数据造成的
EXP导出10203数据的时候,出现了EXP-3错误:EXP-00003: no storage definition found for segment(41, 6024)
查询了一下METALINK,发现9205版本之前的EXP客户端,导出9205以上版本的数据时,如果表中包含LOB字段,或者表中的EXTENT超过一个,则会导致EXP-00003错误。
造成问题的原因是由于Oracle在9205及以上版本中,解决了一个查询DBA_SEGMENTS的BYTES/EXTENTS/BLOCKS列速度缓慢的错误。而解决这个bug的代价就是9204及以下版本在导出高版本数据时会碰到EXP-3这个错误。
具体的相关信息可以查询METALINK:
Bug 2948717 : Queries against DBA_SEGMENTS can be slow accessing BYTES/BLOCKS/EXTENTS columns;
Bug 3593227 "EXP-3 WHEN EXPORTING A TABLE WITH MORE THAN 1 EXTENT USING EXP BELOW 9.2.0.5"
Bug 3784697 "EXPORT OF LOB FROM 9205 WITH PRE-9205 EXP GIVES EXP-3 (NO STORAGE DEF FOUND)"
解决问题的方法到是不算复杂:
如果导出不包含LOB字段,那么可以将EXP语句中的COMPRESS参数设置为Y,重新执行导出即可。
如果包含LOB字段,或者上面的方法无效,那么需要对导出库修改exu9tne视图。在导出完成后,再将该视图恢复。
服务器和客户端两边连接都很正常,百思不得解,难道是导出版本的问题?不至于啊,1024导出1023的库,之前操作过,没发现过这个问题,而且看提示不像啊,众所周知版本错误会提示ORA-06550。实在无法,最后报着死马当活马医的想法尝试换了一个同版本的客户端执行exp,结果顺利执行。
后来又经过多番尝试,发现出错的均是含lob字段的表,看来一方面oracle在执行exp时对版本的处理非常严格,即使大版本相同,小版本有略微差异也会导致exp时报错,另一方面是处理规则也存在版本延续的情况,如果不涉及到处理规则的变化,即使exp时客户端版本与服务器不符,导出时也有可能不报错(运气好的话)。
将此次事件记录下来以加强记忆,以后执行导出还是都尽可能确保版本一致吧(起码exp的客户端版本不能高于服务器)。推荐阅读
-
了解 HTTP 协议中的多art/表单数据
-
用于查询图形数据库的 ISO 新标准 GQL
-
031.查看 SAP 上的所有用户账户,并查询 SAP 用户账户的后台数据库表
-
揭开高斯数据库(Influx)的神秘面纱:让智能电网中的定时数据处理更高效
-
PDMan-2.1.0 正式发布:用心打造开源、免费的国产数据库建模工具
-
DolphinScheduler 调度 DataX for MySQL 到 ElasticSearch 的增量数据同步实践
-
如何处理微服务之间的通信和数据一致性?
-
基于云的物联网大数据智能服务
-
物联网堆栈 2.0 升级了对象模型和数据交互协议,大大提高了物联网解决方案的交付速度
-
用于 Docker 的数据管理、网络通信和 dockerfile