通过可传输表空间和 AWS DMS 在将 Oracle 数据库迁移到 Amazon RDS for

5

在使用可传输表空间和 AWS DMS 将 Oracle 数据库迁移到 Amazon RDS for Oracle 时最小化停机时间

作者:Manash Kalita、Sudip Acharya 和 Viqash Adwani日期:2024年5月7日分类:先进 (300),Amazon RDS,RDS for Oracle,技术指南

关键要点

采用 RMAN 跨平台可传输表空间备份和 AWS DMS 的组合策略,可以在 Oracle 数据库迁移过程中显著减少停机时间。物理迁移方法在处理大量数据时效率更高,而逻辑迁移方法则可使源系统保持可用,适合小范围的数据变化。在迁移过程中,将源数据库的表空间设置为只读模式,可以保证数据的一致性。利用 AWS DMS 的增量数据同步能力,可以在减少停机的情况下,将数据持续迁移到目标数据库。

在今天的数字化世界中,组织都希望将他们的关键 Oracle 工作负载迁移到Amazon Relational Database Service (Amazon RDS) for Oracle,以实现更高的灵活性、弹性和创新。在这篇文章中,我们探讨了如何利用RMAN 跨平台可传输表空间备份集XTTS和AWS 数据库迁移服务AWS DMS将 Oracle 数据库从传统平台如 HPUX、AIX、SOLARIS 等迁移到 Amazon RDS for Oracle。

物理与逻辑迁移

利用 XTTS 进行的 Oracle 数据库迁移是一种物理迁移策略,它在块级别复制 Oracle 数据。与数据库大小无关,停机时间主要取决于需要迁移的元数据对象例如表和索引的数量。相比之下,使用 AWS DMS 进行的数据库迁移是一种逻辑迁移策略,只对源数据库中的更改数据进行捕获和应用,因此源系统在整个过程中仍可为应用工作负载提供服务。

通常,物理迁移方法在处理大量数据时更高效,但需要更多的停机时间。因此,我们提出的解决方案结合了这两种方法:使用 RMAN 跨平台可传输表空间备份集进行全量迁移,再结合 AWS DMS 进行增量数据同步,以最小化停机时间。

解决方案概述

通过仅使用 XTTS 方法,可以显著降低停机时间,因为源数据库在最终增量备份期间可以保持读写模式,直到需要将表空间设为只读步骤 D。

使用 XTTS 进行迁移的步骤如下:

(A) 设置 Oracle 源数据库和目标 RDS for Oracle 数据库。(B) 在源上进行全量备份Level=0并在目标上进行恢复。(C) 在源上进行增量备份并在目标上恢复,这是一个可重复的过程,直到您准备将源数据库上的表空间设置为只读。(D) 将源数据库的表空间设置为只读,进行最终增量备份,同时通过 Oracle 数据泵完成元数据导出。(E) 在目标上恢复最终增量备份,并使用 Oracle 数据泵导入元数据对象。将目标 RDS for Oracle 数据库的表空间设为读写。

在停机窗口步骤 D 和 E期间,我们观察到元数据导入阶段步骤 E所花费的时间更多,因为元数据导入是单线程操作,导入时间与元数据对象的数量成正比。

国外加速器官网

通过将 AWS DMS 与 XTTS 相结合,可以进一步减少停机时间。在这种方法中,源数据库在导出完成后立即恢复表空间的读写模式,从那时起我们使用 AWS DMS 进行数据迁移。

使用 XTTS 和 AWS DMS 进行迁移的步骤如下步骤 A 到 D 与之前的架构相同:

(A) 设置 Oracle 源数据库和目标 RDS for Oracle 数据库。(B) 在源上进行全量备份Level=0并在目标上进行恢复。(C) 在源上进行增量备份并在目标上恢复。这是可重复的过程,直到您准备将源数据库上的表空间设置为只读。(D) 将源数据库表空间设置为只读,进行最终增量备份,同时通过 Oracle 数据泵完成元数据导出。(X) 捕获源数据库的 SCN,以便通过 AWS DMS 复制持续变化。将源数据库中的表空间更改为读写模式。(E) 在目标上恢复最终增量备份,并使用 Oracle 数据泵导入元数据对象。将目标 RDS for Oracle 数据库的表空间状态更改为读写。(Y) 配置 AWS DMS 从步骤 X 记录的 SCN 开始复制持续变化。(Z) 完成小规模停机以将生产数据库切换到 Amazon RDS for Oracle。

有关可传输表空间的完整设置、配置和迁移详细信息,请参阅Amazon RDS for Oracle 可传输表空间使用 RMAN。本文不再涵盖这些细节,而是重点讨论如何集成 AWS DMS 以实现近乎零停机时间的迁移。

在测试过程中完成了以下步骤,因此表空间和表名被相应设置。进行实际数据库迁移时,必须根据您的现有源数据库环境更新这些内容。

先决条件

在开始迁移之前,您必须满足以下先决条件:

具有运行在现有本地或Amazon Elastic Compute CloudAmazon EC2环境上的源 Oracle 数据库。具有目标 RDS for Oracle 数据库。具有Amazon Elastic File SystemAmazon EFS已挂载到源数据库和目标 Oracle RDS 实例。有关详细信息,请参阅Amazon EFS 集成。设置 Oracle 作为变更数据捕获CDC的源数据库,使用 AWS DMS。列出源数据库上的数据文件并进行记录。确保目标数据库与源数据库具有相同的字符集。如果系统表空间中有任何对象,请将其移动到其他表空间以进行 TTS。确定要传输到目标数据库的表空间特别是包含迁移所需的实际数据对象的表空间。确保所选表空间是自包含的,并且未启用 TDE。在目标数据库中创建所需的架构,以便获取可传输表空间,而不包含对象。

本文中使用的基础设施如下:

源数据库:19c 在 EC2 上Oracle Linux r52xlarge目标数据库:RDS for Oracle 19cdbr52xlarge

设置源数据库

完成以下步骤以准备您的源数据库:

创建一个将使用 XTTS 迁移的表空间:

sqlSQLgt create tablespace XTTDMS datafile /u01/oradata/ORCLOEM/xttdms1dbf size 100M autoextend on next 128M maxsize 200M

确保数据库用户对表空间具有写入权限:

sqlSQLgt alter user dmssample quota unlimited on XTTDMS

在表空间中创建一个表:

sqlSQLgt create table dmssampletablextts (a int primary key b varchar2(20)) tablespace XTTDMS

向表中插入一些记录:

sqlSQLgt insert into dmssampletablextts values (1BeforeLevel0)

在源数据库上进行全量备份

完成以下步骤从源数据库采取一级可传输表空间备份Level 0:

更新xttsproperties文件中的表空间名称:

properties

linux system

platformid=13

list of tablespaces to transport

tablespaces= XTTDMS

location where backup will be generated

srcscratchlocation=/mnt/efs/fs1/datapump1/xtt/xttsscratch

RMAN command for performing backup

This should be set if using 12c or higher

usermantransport=1

初始化通过 xtts 脚本进行 Level 0 备份:

bashcd /mnt/efs/fs1/datapump1/xttexport TMPDIR=/mnt/efs/fs1/datapump1/xtt/xttstmpORACLEHOME/perl/bin/perl xttdriverpl backup debug 3

该脚本会检查这些表空间是否存在之前的备份。如果没有,它会自动发起 Level 0 备份。备份的输出如下所示:

plaintextRecovery Manager Release 190000  Production on Mon Dec 4 010654 2023Version 193000Copyright (c) 1982 2019 Oracle and/or its affiliates All rights reservedRMAN06005 connected to target database ORCLOEM (DBID=3703663678)RMANgt #PLANXTTDMS13429769RMAN03091 Finished backup at 04DEC23Recovery Manager complete

备份脚本还会在 xttstmp 文件夹中生成名为 restxt 的文件,其中记录了 Level 0 备份文件和 SCN 的名称。 restxt 文件内容如下:

plaintext

通过可传输表空间和 AWS DMS 在将 Oracle 数据库迁移到 Amazon RDS for

01413XTTDMS141c2d57dg11bkp013429769000XTTDMSXTTDMS14dbf

将restxt复制到与备份文件生成相同的位置(/mnt/efs/fs1/datapump1/xtt/xttsscratch/):

bashcp /mnt/efs/fs1/datapump1/xtt/xttstmp/restxt /mnt/efs/fs1/datapump1/xtt/xttsscratch/

确保备份文件和restxt文件的权限设置为 777:

bashcd /mnt/efs/fs1/datapump1/xtt/xttsscratchchmod 777

备份是在一个已创建的 Amazon EFS 文件夹位置上进行的。由于同一 EFS 文件系统已挂载到 Amazon RDS for Oracle,因此您无需将备份文件复制到目标数据库服务器。这减少了从源到目标数据库服务器复制文件的开销。

将备份恢复到目标数据库

完成以下步骤以使用 XTTS 将备份恢复到目标 RDS for Oracle 数据库:

更新表空间名称并在目标 RDS for Oracle 实例上运行脚本以恢复 Level 0 备份:

sqlVAR taskid CLOB BEGIN taskid=rdsadminrdsadmintransportutilimportxttstablespaces(XTTDMSDATAPUMPDIRXTTS pplatformid =gt13)END /

PRINT taskid

记录下 TASKID。

检查任务状态,以确保在目标 RDS for Oracle 数据库上运行恢复命令时没有错误发生:

sqlSELECT FROM rdsadminrdsxttsoperationinfo where xttsjobname = 1701652158158651 order by xttsoperationendutc

恢复命令成功完成后,XTTSOPERATIONSTATE 列的值应为 COMPLETED。如果出现错误,该列将更新为 FAILED。要确定失败原因,会在 Amazon EFS 上与物理文件路径相同的文件夹中创建一个名为 FAILED 的文件。您需要查看故障原因并在再次运行restore命令之前修复它。

在恢复元数据备份之前,您将无法在目标 RDS for Oracle 数据库上看到任何表空间或数据。此时,Level 0 备份已成功恢复到目标 RDS for Oracle 数据库。

在开始 Level 1 备份之前插入一些记录。或者您可以继续由源数据库执行正常操作,直到准备好开始下一个增量 Level 1 备份:

sqlSQLgt insert into dmssampletablextts values (2BeforeLevel1)

在源数据库上进行增量备份

您需要运行相同的 XTTS perl 脚本,它将自动检测到已经进行的 Level 0 备份并启动 Level 1 备份。从此时开始,您可以尽可能多地进行 Level 1 备份,XTTS 将验证数据的一致性。确保在每次增量备份之后将最新的 restxt 文件复制到目标 EFS 目录。

将增量备份恢复到目标数据库

完成以下步骤,以使用 XTTS 将 Level 1 备份恢复到目标 RDS for Oracle 数据库:

更新表空间名称并在目标 RDS for Oracle 实例上运行脚本,以恢复 Level 0 备份:

sqlVAR taskid CLOB BEGIN taskid=rdsadminrdsadmintransportutilimportxttstablespaces(XTTDMSDATAPUMPDIRXTTS) END/ PRINT taskid

记录下 TASKID。

检查任务状态,确保在目标 RDS for Oracle 数据库上运行恢复命令时没有错误发生:

sqlSELECT FROM rdsadminrdsxttsoperationinfo where xttsjobname = 1701652640394651 order by xttsoperationendutc

同一备份文件夹(/mnt/efs/fs1/datapump1/xtt/xttsscratch)将包含名为xttnewdatafilestxt的文件,其中记录将在 Amazon RDS for Oracle 中创建的数据文件的位置。该文件的内容如下:

plaintext14/rdsdbdata/db/ORCLA/datafile//XTTDMS14dbf

将包含在 xttsproperties 文件中列出的所有表空间的数据文件信息。

将此文件复制到与元数据导出备份文件夹相同的位置:

bashcd /mnt/efs/fs1/datapump1/xtt/xttsscratchcp xttnewdatafilestxt /mnt/efs/fs1/datapump1/

如果您在同一文件夹中创建元数据备份文件和 XTTS 备份文件,则此步骤不是必需的。

确保元数据备份文件和xttnewdatafilestxt文件的权限为 777:

bashcd /mnt/efs/fs1/datapump1/chmod 777 xttdumpdmpchmod 777 xttnewdatafilestxt

在目标数据库上恢复最终备份

此时停机时间开始。完成以下步骤以使用 XTTS 在目标 RDS for Oracle 数据库上恢复最终的 Level 1 备份:

将要迁移的表空间设置为只读:

sqlSQLgt alter tablespace XTTDMS read only

运行脚本以进行 Level 1 备份:

bashcd /mnt/efs/fs1/datapump1/xttexport TMPDIR=/mnt/efs/fs1/datapump1/xtt/xttstmpORACLEHOME/perl/bin/perl xttdriverpl backup debug 3

该脚本检测到 Level 0 备份只启动增量备份。备份脚本成功运行的输出

设计无服务器解决方案作者:Luca Mezzalira Federica Ciuffo Laura Hyatt Vittorio Denti 和 Zamira Jaupaj 日期:2023年5月10日关键要点AWS无服务器服务简化了事件驱动架构的设计。深入探讨AWS Lambda及其在无服务器架构中的应用。分享无服务器设计模式的研讨会,帮助开发者掌握最佳实践。实际案例展示如何结合AWS服务和AI技...