exp/imp
对于数据结构的复制和同步,还是比较理想的工具。
在数据量比较小的情况下,这个工具的性能要远远好于datapump,而且重点推荐,他对于各种常用数据类型的支持还是很不错的。
有一些特性,在某种程度上要好于datapump,在做数据迁移的时候,commit特性还是很重要的。因为通过datapump碰到了很多undo空间不足带来的问题。
datapump
在10g版本开始,就开始推荐使用的datapump,算是对exp/imp的补充说明。在使用数据量中等的数据迁移中,是比较好的方案,它有几个亮点的特性,一个就是并行,能够在数据导出导入的时候开启多个并行加速,还有direct选项,这一点上合exp没有太大的差别,个人比较喜欢的是remap选项,比如某个表中还有lob字段,从源库中导出的时候,表空间的信息就在dump文件里,如果导入的环境没有指定的表空间,那基本上就没有直接的解决方案了,要么临时创建需要的表空间,然后在导入成功后,尝试做move操作。
这一点在datapump而言,就不是事了,remap选项很轻松的解决了这个问题。
当然了,datapump是基于服务端的,需要一些其他的依赖因素,在做lob的数据导入的时候速度比imp至少快10倍以上。
sql*loader
可以理解sqlldr是基于客户端的,而言这个工具可能更具有通用性,因为一些数据在它面前都是可扩展的,我们可以尝试从sqlserver中导出数据,然后通过sqlldr来做为数据的导入,sql*loader最快的方式就是开启并行+direct,但是对于lob数据的处理还是需要做额外的工作,对于数据结构的复制而言,就无能为力了。如果作为纯粹的数据的导入,还是很好的工具。
比较纳闷的是,sqlldr作为可扩展的数据导入工具,oracle为什么没有出类似sqlldr这样的数据导出工具,因为exp/expdp导出的是二进制文件,生成平面文件还是有一定的距离,在tom的网站答疑中,他提供了一个简单的pl/sql版本的工具,大家有兴趣可以参考。
oracle_loader
外部表在较新的版本中开始出现,可能大家用的比较多的还是通过oracle_loader来读取alert日志的信息,其实在某种程度上而言,oracle_loader可以在某种程度上作为sqlldr的补充和加强。因为我们可以和快的创建一个外部表。而无须消耗额外的数据空间,相比于sqlldr生成的dump而言,基于oracle_loader创建的外部表更加的具体,我们可以在数据导入前做一些相关的数据检查和稽核工作。
oracle_datapump
oracle_datapump算是对datapump的一个加强版本,因为生成的dump文件类似datapump,但是生成的dump可移植性就好的多,我们可以直接copy dump到外部表相关的目录下,如果外部表定义中的dump文件名没有变化的话,直接拷贝dump,然后可以无需做其他操作就加载数据。
insert
不管怎么样,insert还是最终的数据加载方式,不过在条件允许的情况下,noogging+append+parallel还是个人认为最简洁,最直接的方式。
本文转自ICT时空 dbasdk博客,原文链接:数据迁移工具简单分析 ,如需转载请自行联系原博主。