如何将物理服务器上的Oracle数据库迁移至AWS Oracle RDS
高效Oracle到AWS RDS Oracle迁移方案及工具
如果你的源物理机Oracle和AWS RDS之间能打通低延迟网络(比如Direct Connect、VPN或VPC peering),完全可以跳过S3中转的繁琐流程,用以下几种高效方案:
一、AWS DMS(Database Migration Service)—— 最小停机时间首选
这是最省心的托管方案,适合需要分钟级停机或者持续数据同步的场景,比如TB级大库迁移。
- 核心操作:
- 在AWS上创建DMS复制实例(选和源/目标同区域、规格匹配的实例),确保它能访问源Oracle(开放1521端口)和RDS Oracle
- 配置源端点(填源Oracle的连接信息、有权限的账号)和目标端点(RDS Oracle的端点、账号),测试连通性
- 创建迁移任务:选择「全量迁移+持续增量同步(CDC)」,指定要迁移的schema或表
- 启动任务,等全量迁移完成后,切换业务到RDS,再停止增量同步即可
- 优势:全程托管,无需手动处理转储文件,停机时间极短,还能同步增量数据
二、Oracle Data Pump 网络直接传输—— 跳过所有中转
如果源和RDS网络延迟低(比如通过Direct Connect连通),直接用Data Pump的网络链接模式,不用生成本地转储文件,也不用碰S3。
- 适用场景:中等数据量,允许小时级停机
- 操作步骤:
- 在源Oracle上创建指向RDS的数据库链接:
CREATE DATABASE LINK rds_conn CONNECT TO rds_admin IDENTIFIED BY 'rds_password' USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=your-rds-endpoint)(PORT=1521))(CONNECT_DATA=(SID=your-rds-sid)))'; - 直接从源导入到RDS(无需生成本地dmp文件):
impdp rds_admin/rds_password@your-rds-endpoint schemas=your_target_schema network_link=rds_conn
- 在源Oracle上创建指向RDS的数据库链接:
- 优势:点对点传输,比S3中转至少节省一半时间,操作简洁
三、RDS原生客户端导入—— 小数据集快速迁移
如果是小到中等规模的库,直接用RDS提供的存储过程,从源服务器把数据推送到RDS,无需中转。
- 操作要点:
- 源服务器安装Oracle客户端,配置好RDS的连接字符串
- 用
sqlplus连接RDS,执行导入存储过程:BEGIN rdsadmin.rds_util.import_from_client( p_username => 'your_schema', p_directory => 'DATA_PUMP_DIR', p_dumpfile => 'local_dump.dmp', p_logfile => 'import_log.log' ); END; / - 在源服务器用
impdp把本地生成的小转储文件直接推给RDS:impdp your_schema/your_pwd@your-rds-endpoint dumpfile=local_dump.dmp logfile=import_log.log
- 优势:不用碰S3,几步就能完成小库迁移
四、离线迁移的优化方案(如果必须用转储文件)
如果源和AWS网络不通,只能用转储文件的话,也能优化S3中转的效率:
- 生成转储文件时用
EXPDP COMPRESSION=ALL参数,把文件体积压到最小 - 用
aws s3 cp --multipart-chunk-size 10GB上传,或者用s3 sync加速传输 - RDS端用
rdsadmin.rds_util.load_from_s3直接从S3导入,无需手动下载到RDS实例
必做前置检查
- 优先打通源和AWS的低延迟网络,公网传输会大幅拖慢迁移速度
- 源Oracle账号需授予
EXP_FULL_DATABASE权限,RDS账号需授予IMP_FULL_DATABASE权限 - 用AWS SCT(Schema Conversion Tool)扫描一遍,提前解决源和RDS的兼容性问题(比如某些Oracle特性RDS不支持)
内容的提问来源于stack exchange,提问作者Dung Phan
相关产品推荐
相关产品推荐

