本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 Oracle Bystander 和 AWS DMS 将本地 Oracle 数据库迁移到 Amazon RDS for PostgreSQL
创建者:Cady Motyka(AWS)
摘要
此模式描述了如何在最短的停机时间内将本地 Oracle 数据库迁移到以下任一与 PostgreSQL 兼容的 AWS 数据库服务:
Amazon Relational Database Service (Amazon RDS) for PostgreSQL
Amazon Aurora PostgreSQL 兼容版
该解决方案使用 AWS Database Migration Service(AWS DMS)迁移数据,使用 AWS Schema Conversion Tool(AWS SCT)来转换数据库架构,使用 Oracle Bystander 数据库来帮助管理迁移。在此实施中,停机时间仅限于在数据库上创建或验证所有外键所需时间。
该解决方案还使用带有 Oracle 旁观者数据库的亚马逊弹性计算云 (Amazon EC2) 实例,帮助控制通过 AWS DMS 的数据流。您可以暂时暂停从本地 Oracle 数据库到 Oracle Bystander 的流式复制,以激活 AWS DMS 以赶上数据验证或使用其他数据验证工具。当 AWS DMS 完成当前更改的迁移后,Amazon RDS for PostgreSQL 数据库实例或 Aurora PostgreSQL-Compatible 数据库实例和 Bystander 数据库将具有相同的数据。
先决条件和限制
先决条件
一个有效的 Amazon Web Services account
本地数据中心中的 Oracle 源数据库,配置了 Active Data Guard(ADG)备用数据库
AWS Direct Connect 配置在本地数据中心和 AWS Secrets Manager 之间,用于存储数据库机密
AWS SCT 连接器的 Java 数据库连接 (JDBC) 驱动程序,安装在本地计算机上或安装了 AWS SCT 的 EC2 实例上
限制
数据库大小限制:64 TB
产品版本
AWS DMS 支持版本为 10.2 及更高版本(对于版本 10.x)、11g 直至 12.2、18c 以及 19c 的所有 Oracle 数据库版本。有关支持版本的最新列表,请参阅使用 Oracle 数据库作为 AWS DMS 的源。建议使用最新版本的 AWS DMS,以获得最全面的版本和功能支持。关于 AWS SCT 支持的 Oracle 数据库版本的信息,请参阅 AWS SCT 文档。
AWS DMS 支持版本为 9.4 和更高版本(对于版本 9.x)、10.x、11.x、12.x 和 13.x 的 PostgreSQL。有关最新信息,请参阅 AWS 文档中的使用 PostgreSQL 数据库作为 AWS DMS 的目标。
架构
源技术堆栈
本地 Oracle 数据库
一个EC2 包含 Oracle 数据库旁观者的实例
目标技术堆栈
Amazon RDS for PostgreSQL 或 Aurora PostgreSQL 实例,PostgreSQL 9.3 及更高版本
目标架构
下图显示了使用 AWS DMS 和 Oracle Bystander 将 Oracle 数据库迁移至与 PostgreSQL 兼容的 AWS 数据库的示例工作流程:

工具
AWS Database Migration Service (AWS DMS) 可帮助您将数据存储迁移到 Amazon Web Services Cloud,或者在云和本地设置的组合之间迁移。
AWS Schema Conversion Tool(AWS SCT) 通过以下方法来简化异构数据库的迁移工作:将源数据库架构和大部分的自定义代码自动转换成与目标数据库兼容的格式。
Amazon Relational Database Service (Amazon RDS) 可帮助您在 Amazon Web Services Cloud 中设置、操作和扩展关系数据库。
操作说明
Task | 描述 | 所需技能 |
---|---|---|
设置 AWS SCT。 | 创建新报告,然后连接到 Oracle 作为源,将 PostgreSQL 作为目标。在项目设置中,转到 SQL 脚本选项卡。将目标 SQL 脚本更改为多个文件。这些文件将在以后使用,命名如下:
| 数据库管理员 |
转换 Oracle 数据库架构。 | 在操作选项卡中,选择生成报告。然后,选择转换架构,然后选择另存为 SQL。 | 数据库管理员 |
修改脚本。 | 例如,如果源架构中的数字已转换为 PostgreSQL 中的数字格式,则可能需要修改脚本,但要改用 BIGINT 以提高性能。 | 数据库管理员 |
Task | 描述 | 所需技能 |
---|---|---|
创建 Amazon RDS 数据库实例。 | 在正确的 AWS 区域中,创建一个新 PostgreSQL 数据库实例。有关更多信息,请参阅 Amazon RDS 文档中的创建 PostgreSQL 数据库实例并连接到 PostgreSQL 数据库实例上的数据库。 | AWS SysAdmin、DBA |
配置数据库实例规格。 | 指定数据库引擎版本、数据库实例类、多可用区部署、存储类型和分配的存储空间。输入数据库实例标识符、主用户名和主密码。 | AWS SysAdmin、DBA |
配置网络和安全。 | 指定虚拟私有云(VPC)、子网组、公共可访问性、可用区首选项和安全组。 | 数据库管理员, SysAdmin |
配置数据库选项。 | 指定数据库名称、端口、参数组、加密和 KMS 密钥。 | AWS SysAdmin、DBA |
配置备份。 | 指定备份保留期、备份窗口、开始时间、持续时间以及是否将标签复制到快照。 | AWS SysAdmin、DBA |
配置监控选项。 | 激活或停用增强的监控和性能见解。 | AWS SysAdmin、DBA |
配置维护选项。 | 指定次要版本自动升级、维护窗口以及开始日期、时间和持续时间。 | AWS SysAdmin、DBA |
运行 AWS SCT 中的预迁移脚本。 | 在 Amazon RDS 实例上,运行以下由 AWS SCT 生成的脚本:
| AWS SysAdmin、DBA |
Task | 描述 | 所需技能 |
---|---|---|
为 Amazon 设置网络 EC2。 | 创建新 VPC、子网、互联网网关、路由表和安全组。 | AWS SysAdmin |
创建实 EC2 例。 | 在相应的 AWS 区域中,创建一个新 EC2 实例。选择亚马逊机器映像(AMI),选择实例大小并配置实例详细信息:实例数量 (1)、您在上一个任务中创建的 VPC 和子网、自动分配公有 IP 地址以及其他选项。添加存储、配置安全组并启动。出现提示时,创建并保存密钥对,以供下一步使用。 | AWS SysAdmin |
将 Oracle 源数据库连接到实 EC2 例。 | 将 IPv4 公有 IP 地址和 DNS 复制到文本文件中,然后使用 SSH 进行连接,如下所示:ssh -i “your_file.pem” ec2-user@<your-ip--DNS>。address-or-public | AWS SysAdmin |
在 Amazon 中为旁观者设置初始主机。 EC2 | 设置 SSH 密钥、bash 配置文件、ORATAB 和符号链接。创建 Oracle 目录。 | AWS SysAdmin,Linux 管理员 |
在 Amazon 中为旁观者设置数据库副本 EC2 | 使用 RMAN 创建数据库副本、启用补充日志记录和创建备用控制文件。复制完成后,将数据库置于恢复模式。 | AWS SysAdmin、DBA |
设置 Oracle Data Guard。 | 修改 listener.ora 文件并启动侦听器。设置新的存档目标。将旁观者置于恢复模式,替换临时文件以避免将来损坏,必要时安装 crontab 以防止存档目录空间不足,并编辑源和备用目录的 manage-trclog-files-oracle.cfg 文件。 | AWS SysAdmin、DBA |
准备 Oracle 数据库以同步传送。 | 添加备用日志文件并更改恢复模式。在源主服务器和源备用服务器上都将日志传送更改为 SYNC AFFIRM。将日志切换到主日志上,通过 Amazon EC2 旁观者警报日志确认您正在使用备用日志文件,并确认重做流正在同步流动。 | AWS SysAdmin、DBA |
Task | 描述 | 所需技能 |
---|---|---|
在 AWS DMS 中创建 AWS DMS 复制实例。 | 填写名称、实例类别、VPC(与 Amazon EC2 实例相同)、多可用区和公共可访问性字段。在高级下方,指定分配的存储空间、子网组、可用区、VPC 安全组和 AWS Key Management Service(AWS KMS)密钥。 | AWS SysAdmin、DBA |
创建源数据库端点。 | 指定终端节点名称、类型、源引擎 (Oracle)、服务器名称(Amazon EC2 私有 DNS 名称)、端口、SSL 模式、用户名、密码、SID、VPC(指定具有复制实例的 VPC)和复制实例。要测试连接,请选择运行测试,然后创建端点。您还可以配置以下高级设置:maxFileSize和 Sc numberDataTypeal e。 | AWS SysAdmin、DBA |
将 AWS DMS 连接到 Amazon RDS for PostgreSQL。 | 为跨连接创建迁移安全组 VPCs。 | AWS SysAdmin、DBA |
创建目标数据库端点。 | 指定端点名称、类型、源引擎 (PostgreSQL)、服务器名称(Amazon RDS 端点)、端口、SSL 模式、用户名、密码、数据库名称、VPC(指定具有复制实例的 VPC)和复制实例。要测试连接,请选择运行测试,然后创建端点。您还可以配置以下高级设置:maxFileSize 和 Sc numberDataTypeal e。 | AWS SysAdmin、DBA |
创建 AWS DMS 复制任务。 | 指定任务名称、复制实例、源端点和目标端点以及复制实例。对于迁移类型,选择迁移现有数据并复制持续更改。取消勾选创建时启动任务复选框。 | AWS SysAdmin、DBA |
配置 AWS DMS 复制任务设置。 | 对于目标表格准备模式,请选择什么都不做。完全加载完成后停止任务(创建主键)。指定受限或完整 LOB 模式,然后激活控制表。或者,您可以配置CommitRate高级设置。 | 数据库管理员 |
配置表映射。 | 在表映射部分,为迁移中包含的所有架构中的所有表创建包含规则,然后创建排除规则。添加三个转换规则,将架构、表和列名转换为小写,并添加此特定迁移所需任何其他规则。 | 数据库管理员 |
启动任务。 | 启动复制任务。确保全负载正在运行。在 Oracle 主数据库上运行 ALTER SYSTEM SWITCH LOGFILE 以启动任务。 | 数据库管理员 |
运行 AWS SCT 中的迁移中脚本。 | 在 Amazon RDS for PostgreSQL 上,运行由 AWS SCT 生成的以下脚本:
| 数据库管理员 |
重新启动任务以继续更改数据捕获 (CDC)。 | 在 Amazon RDS for PostgreSQL 数据库实例上运行 VACUUM,然后重启 AWS DMS 任务以应用缓存的 CDC 更改。 | 数据库管理员 |
Task | 描述 | 所需技能 |
---|---|---|
查看 AWS DMS 日志和验证表中是否存在任何错误。 | 检查并修复所有复制或验证错误。 | 数据库管理员 |
停止所有 Oracle 依赖项。 | 停止所有 Oracle 依赖项,关闭 Oracle 数据库上的侦听器,然后运行 ALTER SYSTEM SWITCH LOGFILE。当 AWS DMS 任务没有显示任何活动时,将其停止。 | 数据库管理员 |
运行 AWS SCT 中的迁移后脚本。 | 在 Amazon RDS for PostgreSQL 上,运行由 AWS SCT 生成的以下脚本:
| 数据库管理员 |
完成 Amazon RDS for PostgreSQL 的其他步骤。 | 如果需要,增量序列以匹配 Oracle,运行 VACUUM 和 ANALYZE,然后拍摄合规性快照。 | 数据库管理员 |
打开 Amazon RDS for PostgreSQL 的连接。 | 从 Amazon RDS for PostgreSQL 中移除 AWS DMS 安全组,添加生产安全组,并将应用程序指向新数据库。 | 数据库管理员 |
清理 AWS DMS 对象。 | 移除终端节点、复制任务、复制实例和 EC2 实例。 | SysAdmin,DBA |