产品展示

将 Microsoft Azure SQL 数据库迁移到 Amazon RDS for SQL Se

2026-01-27 14:04:35
9次

将 Microsoft Azure SQL 数据库迁移至 Amazon RDS for SQL Server

关键要点

使用 Smart Bulk Copy 工具可以简化并加速 Azure SQL 数据库向 Amazon RDS for SQL Server 的迁移过程,显著减少传统工具所需的迁移时间。该方法可以通过并行处理技术来优化数据迁移速度,减少停机时间。文章中详细列出了迁移过程的前期准备、迁移实施及后续步骤,以及最佳实践和注意事项。

Amazon Relational Database Service (Amazon RDS) for SQL Server 简化了在云中设置、操作和扩展 SQL Server 部署的流程。通过管理时间消耗的数据库管理任务,如资源配置、备份、软件补丁、监控和硬件扩展,Amazon RDS 使您能够集中精力优化数据库设计、容量规划和性能调优。

使用 Smart Bulk Copy,客户可以更快地将大型 Microsoft Azure SQL 数据库迁移至 Amazon RDS for SQL Server。该方法通过加速数据迁移,减少停机时间,超越了传统工具如 bcp 和 bacpac的效率。此外,Smart Bulk Copy 通过表分区进行并行处理来加快迁移过程,并自动化迁移任务,从而减少潜在的停机时间。

在本篇文章中,我们将概述使用 Smart Bulk Copy 将 Azure SQL 数据库迁移至 Amazon RDS for SQL Server 的步骤,该方法相比 SqlPackage 导出/导入方法有显著的更快迁移速度。此外,我们还将讨论最佳实践和优化策略,以在迁移过程中最小化停机时间。

解决方案概述

下图展示了我们在 Microsoft Azure Cloud 的私有子网中创建的 Azure SQL 数据库。我们在同一 AWS 区域Azure SQL 数据库所在的区域设置了 RDS for SQL Server 实例,采用 单个可用区 部署私有子网1。此外,我们在同一 VPC 中的另一个私有子网私有子网2中创建了一台 Amazon Elastic Compute Cloud (Amazon EC2) 实例。我们已在该 EC2 实例中克隆了 Smart Bulk Copy GitHub 仓库,并通过私有端点建立了对 Azure SQL 数据库的访问连接。

接下来,我们将讨论迁移前、迁移期间和迁移后要完成的任务。

前提条件

要实施此解决方案,请完成以下前提条件:

请确保安装了 NET SDK 31,因为 Smart Bulk Copy 工具是用 Net 编程语言编写的。请确保安装 Net SDK 60,以便使用 SqlPackage 迁移数据库架构。

使用以下代码下载并安装 Net SDK 在 Amazon EC2 上:

sudo su

wget https//downloadvisualstudiomicrosoftcom/download/pr/e89c4f005cbb4810897df5300165ee60/027ace0fdcfb834ae0a13469f0b1a4c8/dotnetsdk31426linuxx64targz

mkdir p HOME/dotnet ampamp tar zxf dotnetsdk31426linuxx64targz C HOME/dotnet

wget https//downloadvisualstudiomicrosoftcom/download/pr/01292c7ca1ec495790fc3f6a2a1e5edc/025e84c4d9bd4aeb003d4f07b42e9159/dotnetsdk60418linuxx64targz

tar zxf dotnetsdk60418linuxx64targz C HOME/dotnet

使用公共或私有端点设置 Azure 与 AWS 之间的连接。有关更多信息,请参考 设计 AWS 和 Microsoft Azure 之间的私有网络连接。创建 SQL Server DB 实例,选择单个可用区。在目标服务器上创建数据库。确保 Amazon RDS for SQL Server 数据库的管理员账户名与 Azure SQL 数据库不同。禁用 RDS 实例的自动备份。确保 Git 在 EC2Linux实例上安装。

迁移前的活动

在实际迁移前的一周,您可以执行以下迁移前活动,以减少生产停机时间。

创建登录和用户以迁移数据库架构和数据

此步骤是从 Azure SQL 数据库迁移架构和数据至 Amazon RDS for SQL Server 的必要条件。首先,您需要在主数据库中创建登录 awssbcuser,接着使用相同名称创建用户,并授予必要的权限以从源数据库提取架构定义和读取数据。在 master 数据库上运行以下 SQL 命令:

use [master]go

create login [awssbcuser] with password = gocreate user [awssbcuser] for login [awssbcuser] with defaultschema = [dbo]goalter role [loginmanager] add member [awssbcuser]go

在目标用户数据库上运行以下 SQL 命令将 lt@DBNAMEgt 替换为源 Azure SQL 数据库的名称:

use [@DBNAME]gocreate user [awssbcuser] for login [awssbcuser]goalter role [dbddladmin] add member [awssbcuser]goalter role [dbdatareader] add member [awssbcuser]go

grant view definition to [awssbcuser]gogrant view security definition to [awssbcuser]gogrant select on syssqlexpressiondependencies to [awssbcuser]gogrant view definition on database[@DBNAME] to [awssbcuser]gogrant view database performance state to [awssbcuser]gogrant view database state to [awssbcuser]go

从 Azure SQL 数据库迁移登录、用户和权限至 Amazon RDS

Azure SQL 数据库是完全托管的平台即服务PaaS数据库引擎。在迁移登录、用户和权限时,SqlPackage 工具可以完成此项工作,但由于 Azure 和 Amazon RDS 之间的 SID 不同,相同的密码在 Amazon RDS for SQL Server 中将无法使用。我们建议使用默认密码创建登录,并在目标 RDS for SQL Server 数据库中重置密码。

您可以趁此机会清理过时或未使用的登录、用户和权限,遵循最小权限安全最佳实践。

在 master 数据库中运行以下 SQL 命令以创建登录:对于所有有效的登录执行相同操作。将 lt‘ReplaceWithValidPassword’gt 替换为有效的默认密码。

use [master]go

IF NOT EXISTS (select [name] from syssqllogins where name =Ndbuser01 and typedesc = SQLLogin)BEGIN create login [dbuser01] with password = END

在 [@DBNAME] 用户数据库中运行 SQL 命令:

use [@DBNAME]go

IF NOT EXISTS (select [name] from syssysusers where name =Ndbuser01)BEGIN create user [dbuser01] for login [dbuser01] with defaultschema=[dbo]END

exec sysspaddrolemember @rolename=Ndbdatareader @membername=Ndbuser01

exec sysspaddrolemember @rolename=Ndbdatawriter @membername=Ndbuser01

grant connect to [dbuser01]

重置密码:

ALTER LOGIN dbuser01 WITH PASSWORD = ltenterStrongPasswordHeregt

ios苹果加速器

迁移数据库架构

您可以使用 SqlPackage 从源数据库迁移架构至目标数据库。此外,您也可以使用 SQL Server Management Studio (SSMS) 或其他工具完成架构迁移。使用以下代码从源 Azure SQL 数据库提取数据库架构:

mkdir p HOME/datasqlpackage /ActionExtract /TargetFileHOME/data/ltdatabasenamegtdacpac /DiagnosticsFileHOME/data/dacpacextractlog /pExtractAllTableData=false /pVerifyExtraction=true /pIgnoreUserLoginMappings=false /pIgnorePermissions=false /SourceConnectionStringServer=ltazuresqlservernamegt1433Initial Catalog=ltdatabasenamegtEncrypt=TrueTrustServerCertificate=TrueConnection Timeout=60User ID=ltsourceusernamegtPassword=ltsourceuserpasswordgt

使用以下代码将数据库架构发布至目标 RDS for SQL Server 数据库:

cd HOME/datasqlpackage /ActionPublish /SourceFileHOME/data/ltdatabasenamegtdacpac /DiagnosticsFileHOME/data/dacpacpublishlog /pVerifyDeployment=true /TargetConnectionStringServer=ltrdssqlservernamegt1433Initial Catalog=ltdatabasenamegtEncrypt=TrueTrustServerCertificate=TrueConnection Timeout=60User ID=lttargetusernamegtPassword=lttargetuserpasswordgt

请相应地替换占位符:

lt databasenamegt 数据库名称lt azuresqlservernamegt Azure SQL 服务器名称lt sourceusernamegt 源用户名lt sourceuserpasswordgt 源用户密码lt rdssqlservernamegt RDS for SQL Server 终端lt targetusernamegt 目标用户名lt targetuserpasswordgt 目标用户密码

请验证架构是否成功迁移。

启动 EC2 实例

您需要 启动一台 EC2 (Linux) 实例,以安装、配置和运行 Smart Bulk Copy 工具以迁移数据。

或者,您可以使用 Docker 镜像 通过 Docker 运行 Smart Bulk Copy。

删除对象

在运行 Smart Bulk Copy 进行数据迁移之前,您应该删除以下对象。我们建议在删除这些对象之前备份它们,以便在迁移数据后能够重新创建它们。

视图外键次级索引触发器大表上的主键和唯一约束

删除次级索引、主键和唯一约束将加快数据加载速度。

迁移活动

在这个阶段,您将使用 Smart Bulk Copy 将数据从 Azure SQL 数据库迁移至 Amazon RDS for SQL Server。确保在运行 Smart Bulk Copy 之前将源数据库设置为只读模式,并从源数据库获取 二进制校验和。数据加载完成后,可以从目标数据库获取二进制校验和并比较源和目标的校验和值,以验证数据。

克隆 Smart Bulk Copy 仓库

通过 Session ManagerAWS Systems Manager 的一项功能或 SSH 客户端 连接到 EC2 实例,运行以下命令以克隆 Smart Bulk Copy GitHub 仓库:

sudo su

git clone https//githubcom/AzureSamples/smartbulkcopygitcd smartbulkcopyls lrt

构建 Smart Bulk Copy

运行以下命令以构建 Smart Bulk Copy:

cd smartbulkcopy/client

dotnet build

配置 smartbulkcopyconfig

要配置 smartbulkcopyconfig 文件,请完成以下步骤:

进入 smartbulkcopy 目录:cd /smartbulkcopy/client

从 config 目录中复制模板文件到 /smartbulkcopy/clientcp configs/smartbulkcopyconfigtemplatejson mv smartbulkcopyconfigtemplatejson smartbulkcopyconfig

更新 smartbulkcopyconfig 文件。

Smart Bulk Copy 配置灵活多变。如需了解每个参数的详细信息,请参考 配置选项。以下为示例 smartbulkcopyconfig 文件:

将 Microsoft Azure SQL 数据库迁移到 Amazon RDS for SQL Se

{ source{ connectionstring Server=ltazuresqlservernamegt1433Initial Catalog=ltdatabasenamegtEncrypt=TrueTrustServerCertificate=TrueConnection Timeout=60User ID=ltsourceusernamegtPassword=ltsourceuserpasswordgt } destination{ connectionstring Server=ltrdssqlservernamegt1433Initial Catalog=ltdatabasenamegtEncrypt=TrueTrustServerCertificate=TrueConnection Timeout=60User ID=lttargetusernamegtPassword=lttargetuserpasswordgt } tables { include [] exclude [dboMEMOPTTABLE1 dboMEMOPTTABLE2] } options { compatibilitymode false commandtimeout 1800 tasks 8 logicalpartitions auto batchsize 100000 truncatetables true syncidentity false safecheck readonly stopif { secondaryindexes true temporaltable true } retryconnection { delayincrement 10 maxattempt 5 } }}

运行 Smart Bulk Copy

运行以下命令以触发 Smart Bulk Copy 进行数据迁移:

cd /smartbulkcopy/clientdotnet run

监控 dotnet run 命令的输出。

Smart Bulk Copy 首先读取 smartbulkcopyconfig 配置文件,并测试源和目标数据库的连接。然后,它分析所有表以确定是否应对每个表使用并行加载技术。

您可以观察并行加载的行为,如下图所示:对于 dbotesttablenew 表,尽管可用并行加载选项,但由于该表较小小于 1 GB,Smart Bulk Copy 并不会使用并行线程。

而对于 dboxxxxhistory 和 dboxxxxsession 表,则可见消息 “源和目标未分区,且两者均为堆。” Smart Bulk Copy 使用并行线程,并将表分别分割成五个和三个逻辑分区,因为这些表较大超过 1 GB。

对于 dboxxxx 表,您可以看到消息 “源未分区,但目标为堆。” Smart Bulk Copy 使用并行线程,因为该表也较大超过 1 GB。完成所有表加载后,Smart Bulk Copy 会打印源和目标表之间的行数校验。

2024/02/09 180434741INFOgt Table [dbo][testtablenew] has 0 rows both in source and destination2024/02/09 180434741INFOgt Table [dbo][uxxx

全国咨询热线

13594780017

轻云加速器【官网入口】|轻云加速器

联系电话:13594780017

联系人:李总

邮箱:ascorbic@icloud.com

公司地址:芜湖市闪欲峡谷14号


微信扫一扫

手机官网