一. 问题场景描述:
今天在做项目过程中,需要将别人机子里面的Oracle数据库数据复制一份到自己本地机子上,因为之前专门总结过一篇关于Oracle数据库导入与导出(exp/imp)的文章即:《Oracle导出/导入数据》,所以这次想必应该so easy!
可去执行操作的时候,发现不管导出的是.sql文件还是.dmp文件,都会报错。即使最后尝试使用Oracle SQL Developer进行复制操作,依然会报错。而报错内容花样还挺多,有说是表或视图不存在的,也有说是语法不正确的。
一直没搞清楚是什么原因,直到脑子一个机灵,估计是Oracle数据库版本不同的缘故。查了一下,发现果然不一样。一个是Oracle11g,一个是Oracle10g,再查看一下规则,果然是因为版本不同造成的。
二. Oracle 的exp/imp特性:
Oracle的imp/exp组件的一个操作原则就是向下兼容,且有一些规则:
规则1:低版本的exp/imp可以连接到高版本(或同版本)的数据库服务器,但高版本的exp/imp不能连接到低版本的数据库服务器。
规则2:高版本exp出的dmp文件,低版本无法imp(无法识别dmp文件);低版本exp出的dmp文件,高版本可以imp(向下兼容)。
规则3:从Oracle 低版本Export的数据可以Import到Oracle高版本中,但限于Oracle的相邻版本,如从Oracle 7 到 Oracle 8。对于两个不相邻版本间进行转换,如从Oracle 6 到 Oracle 8,则应先将数据输入到中间版本Oracle