
您的组织中是否有无法承受停机的关键Oracle OLTP数据库?您是否希望在尽量缩短停机时间或不停机的情况下将Oracle数据库迁移到AWS?在当今应用程序和数据库24/7全天候可用的快节奏世界中,将本地数据库迁移到云时,某些应用程序可能无法承受大量停机时间。
本博文讨论了使用AWS Database Migration Service(AWS DMS)及其更改数据捕获(CDC)功能将本地Oracle数据库迁移到Oracle的Amazon Relational Database Service(RDS)的解决方案,以最大程度地缩短停机时间。
AWS DMS概述
AWS DMS是一项云服务,可帮助您将数据库迁移到AWS。AWS DMS可以将关系数据库、数据仓库、NoSQL数据库和其他类型的数据存储迁移到AWS云中。AWS DMS支持不同数据库平台之间的同质和异类迁移。您可以执行一次迁移,也可以复制正在进行的更改,以使源数据库和目标数据库保持同步。要使用AWS DMS,至少一个数据库端应位于AWS中,即源数据库或目标数据库。
当仅使用AWS DMS复制数据更改时,必须指定一个时间或系统更改号(SCN),AWS DMS将从该时间或系统更改号开始读取数据库日志更改。请务必在服务器上保留这些日志一段时间,以确保AWS DMS可以访问这些更改。
迁移LOB
如果您的源数据库具有大型二进制对象(LOB),并且您必须将其迁移到目标数据库,则AWS DMS提供以下选项:
·完全LOB模式–AWS DMS将所有LOB从源数据库迁移到目标数据库,无论其大小如何。尽管迁移速度较慢,但优势是数据不会被截断。为了获得更好的性能,您应该在新的复制实例上创建一个单独的任务,以迁移LOB大于数兆字节的表格。
·受限LOB模式–您指定LOB列数据的最大大小,使AWS DMS可以预分配资源并批量应用LOB。如果LOB列的大小超过任务中指定的大小,则AWS DMS会截断数据,并将警告发送到AWS DMS日志文件。如果您的LOB数据大小在受限LOB大小以内,则可以通过使用受限LOB模式来提高性能。
·内联LOB模式–通过复制小型和大型LOB,您可以迁移LOB,而不用截断数据或降低任务性能。首先,为InlineLobMaxSize参数指定一个值,该值仅在完全LOB模式设置为true时可用。AWS DMS任务以内联方式传输小型LOB,此方式更加高效。然后,AWS DMS通过从源表执行查找来迁移大型LOB。但是,内联LOB模式仅在完全加载阶段有效。
解决方案概览
本博文使用Amazon EC2 for Oracle数据库实例作为源数据库,并假设您的本地数据库和Amazon RDS for Oracle数据库作为目标数据库。本博文还使用Oracle Data Pump将数据从源Oracle数据库导出和导入到目标Oracle RDS for Oracle数据库,并使用AWS DMS将CDC更改从源Oracle数据库复制到Amazon RDS for Oracle数据库。本博文假设您已在AWS云环境中预置Amazon RDS for Oracle数据库作为目标数据库。
下图展示了我们的解决方案架构。
该解决方案包括以下步骤:
·设置带有源和目标终端节点的AWS DMS复制实例
·使用Oracle Data Pump从本地Oracle数据库导出架构
·使用Oracle数据泵将架构导入到Amazon RDS for Oracle数据库中
·使用CDC创建AWS DMS复制任务以执行实时复制
·在目标Amazon RDS for Oracle数据库上验证数据库架构
先决条件
根据应用程序,在确定要迁移到Amazon RDS for Oracle数据库的Oracle数据库架构之后,必须在启动迁移之前收集一些架构详细信息,例如架构大小、基于对象类型的对象总数和无效对象。
要使用AWS DMS CDC功能,请在源Oracle数据库上启用数据库级和表格级补充日志记录。完成前提条件后,您可以预置AWS DMS实例。
预置AWS DMS实例
使用DMS_instance.yaml AWS CloudFormation模板来配置AWS DMS复制实例及其源和目标终端节点。请执行以下步骤:
1.在AWS管理控制台的服务下,选择CloudFormation。
2.选择创建堆栈。
3.对于指定模板,选择上传模板文件。
4.选择选择文件。
5.选择DMS_instance.yaml文件。
6.选择下一步。
7.在指定堆栈详细信息页面上,根据需要编辑预定义参数:
·对于堆栈名称,输入您的堆栈名称。
·在AWS DMS实例参数下,输入以下参数:
·DMSInstanceType–为AWS DMS复制实例选择所需的实例。
·DMSStorageSize–输入AWS DMS实例的存储大小。
·在源Oracle数据库配置下,输入以下参数:
·SourceOracleEndpointID–Oracle数据库的源数据库服务器名称
·SourceOracleDatabaseName–源数据库服务名称或适用的SID
·SourceOracleUserName–源数据库用户名。默认为系统。
·SourceOracleDBPassword–源数据库用户名的密码
·SourceOracleDBPort–源数据库端口
·在“目标RDS for Oracle“数据库配置下,输入以下参数:
·TargetRDSOracleEndpointID–目标RDS数据库终端节点
·TargetRDSOracleDatabaseName–目标RDS数据库名称
·TargetRSOracleUserName–目标RDS数据库名称
·TargetRDSOracleDBPassword–目标RDS密码
·TargetOracleDBPort–目标RDS数据库端口
在VPC、子网和安全组配置下,输入以下参数:
VPCID–复制实例的VPC
VPCSecurityGroupId–复制实例的VPC安全组
DMSSubnet1–可用区1的子网
DMSSubnet2–可用区2的子网
1.选择下一步。
2.在配置堆栈选项页上的标签”中,输入任何可选值。
3.选择下一步。
4.在Review页面上选中I acknowledge that AWS CloudFormation might create IAM resources with custom names(我确认AWS CloudFormation可能会使用自定义名称创建IAM资源)。
5.选择创建堆栈。预置应在大约5到10分钟内完成。当AWS CloudFormation Stacks控制台显示Create Complete时,此操作完成。
6.在AWS管理控制台中,选择服务。
7.选择数据库迁移服务。
8.在资源管理下,选择复制实例。以下屏幕截图显示复制实例页面,可用于检查输出。
1.在资源管理下,选择终端节点。以下屏幕截图显示终端节点页面,您可以在其中看到源终端节点和目标终端节点。
源终端节点和目标终端节点的状态显示为“活动”后,应测试连接。为每个终端节点选择运行测试,以确保状态显示为成功。
现在,您已经创建AWS DMS复制实例及其源和目标终端节点,并执行了终端节点连接测试,确保其可以成功建立连接。
将源数据库架构迁移到目标数据库
现在,您可以使用Oracle Data Pump将Oracle数据库架构迁移到Amazon RDS for Oracle数据库。Oracle Data Pump提供了服务器端基础结构,可在Oracle数据库之间快速进行数据和元数据移动。对于大型数据库而言,它是理想的选择,可通过高性能数据移动为数据库管理员节省大量时间。Data Pump自动管理多个并行的卸载和加载流,以实现最大吞吐量。
导出数据
当源数据库处于联机状态并且正在被应用程序使用时,请使用Oracle Data Pump从源本地Oracle数据库开始数据导出。您还必须从源数据库生成SCN,以在数据泵导出中使用SCN,从而确保数据一致性,并在AWS DMS中将SCN用作更改数据捕获的起点。
要导出数据库模式,请完成以下步骤:
6.记录生成的SCN,以便在导出数据和用于AWS DMS时使用。
7.创建一个参数文件以导出架构。查看参数文件的内容:
8.#Use the generated SCN in step#1 for the flashback_scn parameter and create the required database directory if default DATA_PUMP_DIR database directory is not being used.
9.
10.
11.$cat export_sample_user.par
12.userid=dms_sample/dms_sample
13.directory=DATA_PUMP_DIR
14.logfile=export_dms_sample_user.log
15.dumpfile=export_dms_sample_data_%U.dmp
16.schemas=DMS_SAMPLEflashback_scn=7097405
17.使用expdp实用程序执行导出。请参阅以下代码:
将转储文件传输到目标实例
有多种方法可以将Oracle Data Pump导出文件传输到Amazon RDS for Oracle实例。您可以使用DBMS_FILE_TRANSFER实用程序或Amazon S3集成功能来传输文件。
使用DBMS_FILE_TRANSFER传输转储文件
您可以使用DBMS_FILE_TRANSFER实用程序将数据泵文件直接传输到RDS实例。您必须在本地和Amazon RDS for Oracle数据库实例之间创建数据库链接。
以下代码创建一个数据库链接ORARDSDB,该链接连接到目标数据库实例上的RDS主用户:
以下脚本使用名为oradsdb的数据库链接将名为export_dms_sample_data_01.dmp的转储文件从源实例复制到目标Amazon RDS for Oracle数据库。
借助S3集成传输转储文件
借助S3集成,您可以将Oracle数据转储文件直接传输到Amazon RDS for Oracle实例。从源数据库实例导出数据后,可以将数据泵文件上传到S3存储桶,将文件从S3存储桶下载到Amazon RDS for Oracle实例,然后执行导入。您还可以使用此集成功能将数据转储文件从Amazon RDS for Oracle DB实例传输到本地数据库服务器。
Amazon RDS for Oracle实例必须具有S3存储桶的访问权限才能与Amazon RDS for Oracle S3集成和S3结合使用。创建IAM策略和角色使用GetObject、ListBucket、PutObject授予您的IAM策略。创建IAM角色,并将策略附加到该角色。
要使用Amazon RDS for Oracle与S3集成,您的Amazon RDS for Oracle实例必须与包含S3_INTEGRATION选项的选项组关联。
要创建Amazon RDS选项组,请完成以下步骤:
1.在Amazon RDS控制台上的选项组下,选择创建
2.在选项组详细信息下的名称下,输入选项组的名称。输入rds-oracle12r2-option-group。
3.对于描述,输入您的组的描述。
4.对于引擎,选择要迁移的目标Amazon RDS for Oracle数据库的引擎。本博文选择oracle-ee。
5.对于“主要引擎版本”,选择引擎版本。本博文选择12.2。
6.选择创建。
创建选项组后,必须将S3_Integration选项添加到选项组。请执行以下步骤:
1.在RDS控制台上,选择选项组。
2.选择您创建的组。
3.选择添加选项。
4.对于选项,选择S3_INTEGRATION。
5.对于版本,选择1.0。
6.对于立即申请,选择是。
7.选择添加选项。
在将S3_Integration添加到选项组之后,您必须将目标Amazon RDS for Oracle数据库修改为使用新的选项组。完成以下步骤,将选项组添加到现有Amazon RDS for Oracle数据库:
1.在RDS控制台的数据库下,选择要修改的数据库实例。
2.选择修改。出现修改数据库实例页面
3.在数据库选项下,对于选项组,选择您新创建的选项组。
1.选择继续。
2.在安排修改下,选择立即应用。
3.选择修改数据库实例。
当适用于Amazon RDS for Oracle数据库反映了新的选项组时,您必须将IAM角色和S3_Integration功能与数据库实例相关联。请执行以下步骤:
1.在RDS控制台上,选择您的数据库实例。
2.在连接性和安全性标签下,选择管理IAM角色。
3.对于将IAM角色添加到此实例,选择RDS_S3_Integration_Role(您创建的角色)。
4.对于功能,选择S3_INTEGRATION。
5.选择添加角色。
在将IAM角色和S3集成功能与Amazon RDS for Oracle数据库关联之后,您就完成了S3与Amazon RDS for Oracle数据库的集成。现在,您可以使用以下代码将数据转储文件从本地Oracle数据库实例上传到S3:
开始导入
数据转储文件可用后,在启动导入之前,在目标Amazon RDS for Oracle数据库上创建角色、架构和表空间。
使用RDS主用户帐户连接到目标Amazon RDS for Oracle数据库以执行导入。将Amazon RDS for Oracle数据库tns-entry添加到tnsnames.ora,并使用连接字符串的名称执行导入。
如果要导入另一个表空间或使用另一个架构名称,则可以相应地添加表空间和架构的重映射。
使用以下代码所示的连接字符串名称,从本地开始将导入到Amazon RDS for Oracle:
$impdp admin orardsdb directory=DATA_PUMP_DIR logfile=import.log dumpfile=export_dms_sample_data_01.dmp
Import:Release 12.2.0.1.0-Production on Wed Oct 2 01:52:01 2019
Copyright(c)1982,2017,Oracle and/or its affiliates.All rights reserved.
Connected to:Oracle Database 12c Enterprise Edition Release 12.2.0.1.0-64bit Production
Master table”ADMIN”.”SYS_IMPORT_FULL_01″successfully loaded/unloaded
Starting”ADMIN”.”SYS_IMPORT_FULL_01″:admin/******** orardsdb directory=DATA_PUMP_DIR logfile=import.log dumpfile=export_dms_sample_data_01.dmp
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/TABLE/PROCACT_INSTANCE
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
.
.
.
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/PACKAGE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/PROCEDURE/PROCEDURE
Processing object type SCHEMA_EXPORT/PACKAGE/COMPILE_PACKAGE/PACKAGE_SPEC/ALTER_PACKAGE_SPEC
Processing object type SCHEMA_EXPORT/PROCEDURE/ALTER_PROCEDURE
Processing object type SCHEMA_EXPORT/VIEW/VIEW
Processing object type SCHEMA_EXPORT/PACKAGE/PACKAGE_BODY
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
导入后检查和验证
要验证导入是否已成功完成,请查看导入日志文件中是否有任何错误。另外,比较详细信息,例如源数据库对象和目标数据库对象、行数和无效对象,如果存在无效对象,则重新编译。
导入成功完成后,为避免数据不一致,请在相关架构的目标Amazon RDS for Oracle数据库上禁用触发器和外键,以为AWS DMS复制准备目标数据库。
创建AWS DMS迁移任务
通过以下步骤创建AWS DMS迁移任务:
·在AWS DMS控制台上的转换和迁移下,选择数据库迁移任务。
·在任务配置下,为任务标识符输入您的任务标识符。
·对于复制实例,选择您创建的DMS复制实例。
·对于源数据库终端节点,选择您的源终端节点。
·对于目标数据库终端节点,选择目标Amazon RDS for Oracle数据库。
·对于迁移类型,选择仅复制数据更改。
·在任务设置下,选择指定日志序列号。
·对于系统更改号,输入您从源Oracle数据库生成的Oracle数据库SCN。
·选择启用验证。
·选择启用CloudWatch Logs。这使您可以验证数据和Amazon CloudWatch日志来查看AWS DMS复制实例日志。
·在选择规则下,完成以下操作:
·对于架构,选择输入架构。
·对于架构名称,输入DMS_SAMPLE。
·对于表名称,输入%。
·对于操作,选择包括
·在转换规则下,完成以下操作:
·对于目标,选择表。
·对于架构名称,选择输入架构。
·对于架构名称,输入DMS_SAMPLE。
·对于操作,选择重命名为。
·选择创建任务。
创建任务后,它会将CDC从您在CDC启动模式下提供的SCN迁移到Amazon RDS for Oracle数据库实例。您还可以通过查看CloudWatch Logs进行验证。以下屏幕截图显示了迁移的日志详细信息。
数据验证
AWS DMS进行数据验证,以确认您的数据已成功将源数据库迁移到目标数据库。您可以查看表统计信息页面,以确定在AWS DMS任务启动后发生的DML更改。在数据验证期间,AWS DMS比较源数据库与目标数据库中对应的每一行,验证这些行包含的数据相同。为此,AWS DMS发出适当的查询以检索数据。
以下屏幕截图显示了表统计信息页面及其相关条目。
您还可以对源数据库和目标数据库中的记录数进行计数和比较,以确认CDC数据已从源数据库复制到目标数据库。
在计划的维护窗口中,可以使用以下代码关闭所有指向源数据库的应用程序,并启用触发器和外键约束:
—Run the below statement to generate list of triggers to be enabled
select‘alter trigger‘||owner||’.’||trigger_name||‘enable;’from dba_triggers where owner=’DMS_SAMPLE’;
—Run the below statement to generate list of constraints to be enabled
select‘alter table‘||owner||’.’||table_name||’enable constraint‘||constraint_name||’;’from dba_constraints
where owner=’DMS_SAMPLE’and constraint_type=’R’;
由于DMS不会在CDC期间从源数据库复制增量序列号,因此您将需要从源生成所有序列的最新序列值,并将其应用于目标Amazon RDS for Oracle数据库,以避免序列值不一致。
现在,通过修改连接详细信息,将应用程序指向目标Amazon RDS for Oracle数据库。在启动应用程序之后,您应该看到现在已在目标Amazon RDS for Oracle数据库上建立所有应用程序连接。确认源数据库上不再存在连接后,可以停止源数据库。
小结
本博文演示了如何通过使用Oracle数据泵和AWS DMS将本地Oracle数据库迁移到Amazon RDS for Oracle数据库,同时最大程度地缩短停机时间甚至无停机。您可以使用AWS DMS及其CDC功能将关键数据库无缝迁移和复制到Amazon RDS。
我们鼓励您尝试此解决方案,并充分发挥AWS DMS与Oracle数据库结合使用带来的所有优势。
本篇作者
Sagar PatelAmazon:Web Services专业服务团队的数据库专业架构师。他是数据库迁移专家,负责提供技术指导,并帮助Amazon客户将其本地数据库迁移到AWS。
Sharath Lingareddy:Amazon Web Services专业服务团队的数据库架构师。他提供使用Oracle、PostgreSQL、Amazon RDS的解决方案。他的专注的领域是本地数据库到Amazon RDS和Aurora PostgreSQL的同质和异类迁移。
Jeevith Anumalla:Amazon Web Services专业服务团队的Oracle数据库云架构师。他担任数据库迁移专家,帮助内部和外部Amazon客户将其本地数据库环境移至AWS数据存储。
对于不懂财务工作的企业经营者来说,不会处理税务是很麻烦的一件事。找一家代理记账公司必然是不错的选择,处理报税流程也更清晰专业。那么一家代理公司的记账报税流程是怎样的? 1、签订合同 接受委托签订财务外包代理记账合同,确定服务项目及费用。 2、接票 届时客户将当…
码刀科技(www.lekshop.cn)是国内知名企业级电商平台提供商,为企业级商家提供最佳的电商平台搭建(多种模式电商平台搭建:B2B/B2B2C/B2C/O2O/新零售/跨境等)、平台管理系统开发及互联网采购解决方案服务, 联系客服了解更多.