缘起

oracle的导出问题一直困恼我很久,我一直没法找到一个非常好的解决方案,每次都是要么手动复制数据,要么部分导出等等,很难有一键导出的解决方案,今天得空,特意搜罗了百度和google.来对Oracle的导出做个总结。

吐槽

我不知道为什么oracle的导出问题一直没有得到解决,我在导出的时候遇到过多个保存,比如下面这样。table auto form contains one or more CLOB。还有其他的比如版本不匹配啊,字符集不匹配啊等等的错误,真的很难用

Oracle导入和导出,table auto form contains one or more CLOB的解决方案_Oracle导出导入

这个问题的​​解决方案​

关于导入和导出

其实导入和导出是一个问题,困恼我的并不是如何操作导入和导出,而是在操作过程中的各种报错,我相信,如果你导出不报错,那么你导入应该也不是太大的问题。那么下面就详细说一下导出。

Oracle中的导出一般可以采用cmd命令的形式导出或者采用PL/SQL工具来进行导出,但PL/SQL工具的导出其实最终也是采用了cmd命令来进行导出的,只是对命令进行了一次封装。比如我们采用PL/SQL导出的时候是需要选择一个exp.exe文件的,而命令行导出也是借助了这个文件。

Oracle导入和导出,table auto form contains one or more CLOB的解决方案_Oracle的远程导出_02

那么问题来了,这个文件是什么东西?我们去哪里找这个文件??

我相信上面的问题困恼了很多人,因为它曾经困恼着我。后来经过多方查阅资料大概得出的结论是,这个文件是Oracle的功能,是需要安装了Oracle才有的,而笔者在开发过程中一般是装个精简版的客户端,就是下面这个东东辣。。

Oracle导入和导出,table auto form contains one or more CLOB的解决方案_Oracle的远程导出_03

这个东西啊,是没有exp.exe这个文件的,那么也就是说啊,如果你不装Oracle,你就没法用这个功能,你装Oracle,那更恶心,5-6个服务启在你电脑上,关键卸载贼难卸载,要删注册表什么的,而且各个版本注册表又不太一样,经常卸载不干净,很烦。

那么怎么办呢??

我们可以用SQL导出啊。怎么导出?看下面

PL/SQL导出的三种方式区别

Oracle导入和导出,table auto form contains one or more CLOB的解决方案_exp.exe文件在哪_04

我们在PL/SQL导出的时候有三种方式可以选


  • Oracle Export:导出.dmp文件,它是二进制文件,通用性比较好,可以跨平台使用。也是平常使用最多的,但是缺点很明显,就是要装了Oracle才可以,涂简单装个精简版客户端只能远程连接上数据库,想导出是行不通的。
  • SQL Inserts:看名字就知道,这是通过SQL导出,它的好处在于可以看见sql语句。终于有个肉眼能看懂的了。但是他的缺点也非常明显,首先适合数据量小的情况,而且不能有大字段内容(blob、clob、long)。不然会报错table auto form contains one or more CLOB。
  • PL/SQL Developer:导出.pde文件,它是plsql特殊格式,只有plsql认识它,其它编译器不认识。而且有大字段内容(blob、clob、long)也会报错table auto form contains one or more CLOB。

说了这么多,三种方式都有缺点,那么就没有办法解决了??。

终极方案

某互联网公司程序员:DBA大哥,能不能帮我导出一份数据,在线等,急。

if(DBA大哥==“好的”){
//在线等吧
}else if(DBA大哥==“滚”){
//在你的机器上装个Oracle吧,然后用Oracle Export这种方式导出。BUT,这个方式好像需要你的账号有导出权限,不然,你还是要求DBA大哥
}

关于其他方案的讨论

不知道各位读者有没有其他更好的办法呢,有的话下面留言讨论吧。