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 数据库是完全托管的平台即服务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 (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 之前将源数据库设置为只读模式,并从源数据库获取 二进制校验和。数据加载完成后,可以从目标数据库获取二进制校验和并比较源和目标的校验和值,以验证数据。
通过 Session ManagerAWS Systems Manager 的一项功能或 SSH 客户端 连接到 EC2 实例,运行以下命令以克隆 Smart Bulk Copy GitHub 仓库:
sudo su
git clone https//githubcom/AzureSamples/smartbulkcopygitcd smartbulkcopyls lrt
运行以下命令以构建 Smart Bulk Copy:
cd smartbulkcopy/client
dotnet build
要配置 smartbulkcopyconfig 文件,请完成以下步骤:
进入 smartbulkcopy 目录:cd /smartbulkcopy/client
从 config 目录中复制模板文件到 /smartbulkcopy/clientcp configs/smartbulkcopyconfigtemplatejson mv smartbulkcopyconfigtemplatejson smartbulkcopyconfig
更新 smartbulkcopyconfig 文件。
Smart Bulk Copy 配置灵活多变。如需了解每个参数的详细信息,请参考 配置选项。以下为示例 smartbulkcopyconfig 文件:

{ 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 进行数据迁移:
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
联系人:李总
邮箱:ascorbic@icloud.com
公司地址:芜湖市闪欲峡谷14号
微信扫一扫
手机官网