数据迁移通俗的说就是将数据从一个地方转移到另一个地方。主要使用场景有:根据正式系统搭建测试环境、从内网复制到外网、数据库服务器硬件升级等。根据需要迁移的数据量大小、系统架构,可采取不同的迁移方法。

Oracle数据迁移方案_第1张图片

注:以下所说方法,不考虑数据的增量更新、不考虑数据的实时同步、不考虑数据的逻辑转换。如果有这些需求,建议使用第三方ETL工具或使用Oracle的其他数据同步技术。


一、常用示例


1.1 如何在客户现场搭建测试环境?


常规方案,使用imp/exp工具,先在源库执行直接路径导出操作,然后在目标库执行导入操作。IMP/EXP的执行速度主要受限于磁盘及网络。


数据量:1.5G


导出用时:5分钟


导入用时:23分钟


导出文件大小:641M


导出导入环境:单CPU,700M内存。为力求最大速度,使用直接路径导出、设置最大I/O缓冲、导入导出文件都放在服务器上执行。


1.2 还有没有更快的办法?


有,仍然使用impdp/expdp。只是不再将数据导出后导入,而是直接将数据从源库导入到目的库。


CMD> Impdp  testi@目标库  directory=DMPDIR  schemas=TESTI


network_link=源库dblink  remap_schema=TESTI:TESTA


上面语句的操作是将源库的TESTI用户的数据,导入到目标库的TESTA用户下。


这个操作是局域网内迁移数据最方便的工具,不过也可能是速度最慢的工具。


1.3 有没有还快一点的方法?


有,换用impdp/expdp。同样在源库执行导出,在目标库执行导入。操作速度能得到极大提升。IMPDP/EXPDP速度主要受限于磁盘,与网络无关。


原数据大小:1.5G


expdp导出操作用时:5分钟


impdp导入操作用时:22分钟


导出文件大小:588M


导出导入环境:单CPU,700M内存,并行度 = 1


??你不是说这个会更快么?为什么速度跟3.1的imp/exp差不多啊?


请看第四部分总结的解释。


1.4 你还敢再快一点么?


使用表空间迁移。将表空间的元数据导出,和数据文件一起,复制到新库。执行元数据导入。一般来说,整个导入导出的数据量不到5M。速度相当快,但使用限制比较多。


导出时间:1分钟


导入时间:3分钟


导出文件:60M + 数据文件1.5G


1.5 如何将数据从linux环境转到windows环境?


查看v$transportable_platform,如果数据编码一致,可尝试直接复制数据文件。否则使用rman或impdp/expdp或imp/exp。


1.6 如果你有一个excel格式的数据表,需要远程更新到客户数据库上,怎么更新?


使用pl/sql developer,复制、粘贴、提交。


1.6 如果你需要将正式库的几张表,迁移到测试库来,怎么弄快些?


用dblink+脚本,或者使用impdp远程导入。