钢哥注:本文是对AWS官方博文《使用Oracle Data Pump将数据库迁移到AWS的RDS Oracle数据库》的整理,原文请点击 这里。
关键假设
生产数据库的业务有足够的停机时间,在迁移过程中数据不会变化。
准备本地数据库
使用docker镜像在本地快速创建Oracle数据库实例,Oracle数据库版本11.2.0.4
1 | # 下载数据库镜像 |
初始化数据库
创建一些表和数据,作为数据库迁移的模拟数据。
1 | # 创建数据库导出目录 |
1 | -- 连接到数据库 |
用expdp命令导出数据库
1 | # 使用expdp命令导出test用户所有表 |
配置目标RDS数据库
在源数据库的 tnsnames.ora
文件中配置目标RDS数据库信息
1 | rdsorcl=(description=(address_list=(address=(protocol=TCP)(host=orcl.cr72zlp5vle5.ap-northeast-1.rds.amazonaws.com)(port=1517)))(connect_data=(SID=orcl))) |
1 | # 如果连接有错误,用tnsping检查RDS连接信息。正常情况下应返回"OK (xxx msec)"类似的字样 |
1 | -- 在目标RDS数据库中创建directory对象 |
将导出文件上传到目标RDS数据库
1 | -- sqlplus登录源数据库,创建指向目标RDS数据库的db link |
通过impdp命令导入数据
1 | impdp test@rdsorcl dumpfile=test.dmp directory=dpump_dir full=y |
执行完后检查RDS中的表和数据是否导入成功。
总结
从上面的过程我们可以看到,将一个Oracle数据库迁移到RDS的过程并不复杂,如果源数据库很大,由于需要导出数据、将数据上传到RDS的Data Pump目录、导入数据,迁移的过程也会比较长。
上述过程假设了我们生产数据库的业务有足够的停机时间,在迁移过程中数据不会变化。 如果迁移过程中,源数据库会发生变化,那么我们就需要同步数据中心和RDS数据库间的日志了。
如果源数据库很大,可以在AWS上启动一台中间服务器,并在中间服务器上安装Oracle的客户端软件,将源数据库的 Data Pump 导出文件分片然后scp复制、Tsunami UDP 加速上传等方式将文件上传到中间服务器,然后再上传到RDS的 Data Pump 目录中,这样能加速迁移的过程。