可以使用 Azure 门户、Azure CLI、PowerShell 或 Transact-SQL 将 Azure SQL 数据库中的现有超大规模数据库迁移到常规用途服务层。
反向迁移到“常规用途”服务层级支持最近将 Azure SQL 数据库中的现有数据库转换为“超大规模”的客户在超大规模无法满足其需求时,将数据库紧急迁回。 虽然反向迁移是由服务层级更改发起的,但它本质上是不同体系结构之间的数据规模的移动。
反向迁移的限制
反向迁移在以下条件下适用:
- 反向迁移仅在原始迁移到“超大规模”后的 45 天内可用。
- 最初在“超大规模”服务层级中创建的数据库不符合反向迁移的条件。
- 只能反向迁移到常规用途服务层级。 可以针对无服务器或预配的计算层,从“超大规模”迁移到“常规用途”。 如果要将数据库迁移到另一个服务层级(例如业务关键或基于 DTU 的服务层级),请先反向迁移到“常规用途”服务层级,然后更改服务层级。
- 不支持反向迁移到少于 2 个 vCore 的数据库。 迁移完成后,可以将数据库缩减到少于 2 个 vCore。
- 不支持直接从/向弹性池反向迁移。 只能将超大规模单一数据库反向迁移到常规用途单一数据库。
- 如果超大规模数据库是超大规模弹性池的一部分,则必须先将其从超大规模弹性池中删除,然后再进行反向迁移。
- 反向迁移完成后,可以选择将常规用途的单一数据库添加到常规用途弹性池(如果需要)。
- 对于不符合反向迁移条件的数据库,从“超大规模”迁移到非“超大规模”服务层级的唯一方法是,使用 bacpac 文件或其他数据移动技术(批量复制、Azure 数据工厂、Azure Databricks、SSIS 等)进行导出/导入。不支持从 Azure 门户、PowerShell(使用 New-AzSqlDatabaseExport 或 New-AzSqlDatabaseImport)、Azure CLI(使用 az sql db export 和 az sql db import)以及从 REST API 进行 bacpac 导出/导入。 支持使用 SSMS 和 SqlPackage 版本 18.4 及更高版本对较小的超大规模数据库(最多 150 GB)进行 bacpac 导入/导出。 对于较大的数据库,bacpac 导出/导入可能需要很长时间,并且可能会因各种原因失败。
持续时间和停机时间
与“超大规模”中的常规服务级别目标更改操作不同,迁移到“超大规模”和反向迁移到“常规用途”是数据规模的操作。
反向迁移操作的持续时间主要取决于数据库的大小以及在迁移期间发生的并发写入活动数量。 你分配给目标常规用途数据库的 vCore 数目也会影响反向迁移的持续时间。 我们建议,为目标常规用途数据库预配的 vCore 数目大于或等于分配给源超大规模数据库的 vCore 数目,以维持类似的工作负载。
在反向迁移期间,如果负载很大,源超大规模数据库可能会出现性能下降。 具体而言,系统可能会降低(限制)事务日志速率,以确保反向迁移正常进行。
在最终切换至新的常规用途数据库期间,您会经历一个较短的停机时间,通常为几分钟。
先决条件
在启动从“超大规模”到“常规用途”服务层级的反向迁移之前,必须确保数据库符合反向迁移的限制,并且:
- 数据库没有启用异地复制。
- 数据库没有命名副本。
- 数据库(分配的大小)足够小以装入目标服务层。
- 如果为目标常规用途数据库指定了最大的数据库大小,请确保数据库的已分配大小足够小,可以适应该最大大小。
在反向迁移操作开始之前,会进行先决条件检查。 如果不满足先决条件,反向迁移操作将立即失败。
备份策略
在配置的保持期内,你将为所有现有数据库备份支付使用常规定价收取的费用。 你将为超大规模备份存储快照和必须保留的数据大小存储 blob 支付费用,这样才能还原备份。
可以将数据库转换为“超大规模”,并多次反向迁移回“常规用途”。 只有数据库当前层级和上一层级的备份才可用于还原。 如果你已从“常规用途”服务层级迁移到“超大规模”,然后又迁移回“常规用途”,那么只有来自当前常规用途数据库和上一个“超大规模”数据库的备份可用。 这些保留的备份根据 Azure SQL 数据库的计费方式计费。 以前尝试的任何层级都没有可用备份,并且不会计费。
例如,可以在超大规模和非超大规模服务层级之间迁移:
- 常规用途
- 转换为“超大规模”
- 反向迁移到“常规用途”
- 服务层级更改为“业务关键”
- 转换为“超大规模”
- 反向迁移到“常规用途”
在这种情况下,唯一可用的备份来自时间线的第 5 步和第 6 步(如果备份仍在配置的保留期内)。 以前的步骤中的任何备份都不可用。 尝试在“超大规模”和“常规用途”服务层级之间反复迁移相同的数据库时,请慎重考虑备份的可用性。 启动反向迁移后,早于上一个数据库的数据库备份会立即变得不可用,即使取消迁移,仍然不可用。
如何将超大规模数据库反向迁移到“常规用途”服务层级
若要将 Azure SQL 数据库中的现有超大规模数据库反向迁移到“常规用途”服务层级,请先确定“常规用途”服务层级中的目标服务目标,以及是否要迁移到预配的或无服务器计算层。 如果不确定哪个服务目标适合数据库,请查看 单一数据库的资源限制。
如果要在反向迁移到常规用途后执行其他服务层级更改,请确定最终目标服务目标。 确保数据库的分配大小足够小,以适应该服务目标。
选择你的首选方法的选项卡来反向迁移数据库:
使用 Azure 门户,可以通过修改数据库的定价层反向迁移到“常规用途”服务层级。
- 在 Azure 门户中导航到数据库。
- 在左侧导航栏中,选择“计算 + 存储”。
- 选择 服务层 下拉列表以展开服务层级的选项。
- 从下拉列表菜单中选择“常规用途(可缩放的计算和存储选项)”。
- 查看列出的 硬件配置。 如果需要,请选择 更改配置,以选择适合您工作负荷的硬件配置。
- 如果要更改“常规用途”服务层级下适用于数据库的 vCore 数目,请选择“vCores”滑块。
- 选择 应用。
- 在 Azure 门户中监视转换。
- 在 Azure 门户中导航到数据库。
- 在左侧导航栏中,选择 概述。
- 查看右窗格底部 通知 章节。 如果操作正在进行,将显示一个通知框。
- 若要查看详细信息,请选择通知框。
- 此时将打开正在进行的操作窗格。 查看正在进行的作业的详细信息。
此代码示例调用 az sql db update,将现有超大规模数据库反向迁移到“常规用途”服务层级。 必须同时指定版本和服务目标。 可以选择 Provisioned
或 Serverless
作为目标计算模式。
运行以下代码示例之前,请将 resourceGroupName
、serverName
、databaseName
和 serviceObjective
替换为相应的值:
resourceGroupName="myResourceGroup"
serverName="server01"
databaseName="mySampleDatabase"
serviceObjective="GP_Gen5_2"
computeModel="Provisioned"
az sql db update -g $resourceGroupName -s $serverName -n $databaseName \
--edition GeneralPurpose --service-objective $serviceObjective \
--compute-model $computeModel
可以选择包含 maxsize
参数。 如果 maxsize
值超过目标服务目标的有效最大大小,系统会返回一个错误。 如果没有指定 maxsize
参数,操作将默认为适合给定服务目标的最大大小。 以下示例指定 maxsize
:
resourceGroupName="myResourceGroup"
serverName="server01"
databaseName="mySampleDatabase"
serviceObjective="GP_Gen5_2"
computeModel="Provisioned"
maxsize="200GB"
az sql db update -g $resourceGroupName -s $serverName -n $databaseName \
--edition GeneralPurpose --service-objective $serviceObjective \
--compute-model $computeModel --max-size $maxsize
使用 az sql db op list 监视正在进行的操作。 若要返回 Azure SQL 数据库中数据库的最近或正在进行的操作,请执行以下操作:
resourceGroupName="myResourceGroup"
serverName="server01"
databaseName="mySampleDatabase"
az sql db op list -g $resourceGroupName -s $serverName -n $databaseName
此代码示例使用 Set-AzSqlDatabase cmdlet 将现有数据库从“超大规模”反向迁移到“常规用途”服务层级。 必须同时指定版本和服务目标。 可以选择 Provisioned
或 Serverless
作为目标计算层级。
在运行此代码示例之前,将 $resourceGroupName
、$serverName
、$databaseName
、$serviceObjective
和 $computeModel
替换为相应的值:
$resourceGroupName = "myResourceGroup"
$serverName = "server01"
$databaseName = "mySampleDatabase"
$serviceObjective = "GP_Gen5_2"
$computeModel = "Provisioned"
Set-AzSqlDatabase -ResourceGroupName $resourceGroupName -ServerName $serverName `
-DatabaseName $databaseName -Edition "GeneralPurpose" -computemodel $computeModel `
-RequestedServiceObjectiveName $serviceObjective
可以选择包含 maxsize
参数。 如果 maxsize
值超过目标服务目标的有效最大大小,系统会返回一个错误。 如果没有指定 maxsize
参数,操作将默认为适合给定服务目标的最大大小。 以下示例指定 maxsize
:
$resourceGroupName = "myResourceGroup"
$serverName = "server01"
$databaseName = "mySampleDatabase"
$serviceObjective = "GP_Gen5_2"
$computeModel = "Provisioned"
$maxSizeBytes = "268435456000"
Set-AzSqlDatabase -ResourceGroupName $resourceGroupName -ServerName $serverName `
-DatabaseName $databaseName -Edition "GeneralPurpose" -computemodel $computeModel `
-RequestedServiceObjectiveName $serviceObjective -MaxSizeBytes $maxSizeBytes
使用 Get-AzSqlDatabaseActivity cmdlet 监视正在进行的操作,该 cmdlet 返回 Azure SQL 数据库中的一个数据库的近期或当前正在进行的操作。 运行示例代码之前,请将 $resourceGroupName
、$serverName
和 $databaseName
参数设置为数据库的相应值:
$resourceGroupName = "myResourceGroup"
$serverName = "server01"
$databaseName = "mySampleDatabase"
Get-AzSqlDatabaseActivity -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName
若要使用 Transact-SQL 将超大规模数据库反向迁移到常规用途服务层,请先master
使用 SQL Server Management Studio(SSMS)、Azure Data Studio 连接到逻辑 SQL 服务器上的数据库。
必须在 ALTER DATABASE 语句中指定版本和服务目标。
此示例语句使用 mySampleDatabase
服务目标将名为 GP_Gen5_4
的数据库迁移到“常规用途”服务层级。 在执行语句之前,将数据库名称和服务目标替换为相应的值。
ALTER DATABASE [mySampleDatabase]
MODIFY (EDITION = 'GeneralPurpose', SERVICE_OBJECTIVE = 'GP_Gen5_2');
GO
可以选择包含 maxsize
参数。 如果 maxsize
值超过目标服务目标的有效最大大小,系统会返回一个错误。 如果没有指定 maxsize
参数,操作将默认为适合给定服务目标的最大大小。 以下示例指定 maxsize
:
ALTER DATABASE [mySampleDatabase]
MODIFY (EDITION = 'GeneralPurpose', SERVICE_OBJECTIVE = 'GP_Gen5_2', MAXSIZE = 200 GB);
GO
若要监视超大规模数据库的操作,请使用SQL Server Management Studio(SSMS)、Visual Studio Code 的 mssql 扩展或所选客户端连接到您的逻辑服务器的master
数据库,并运行 Transact-SQL 命令。
查询 sys.dm_operation_status 动态管理视图,以查看有关最近在逻辑服务器上对数据库进行的操作的信息。
sys.dm_operation_status
动态管理视图返回按最新项排序的操作。 在运行代码示例之前,将数据库名称替换为相应的值。
SELECT *
FROM sys.dm_operation_status
WHERE major_resource_id = 'mySampleDatabase'
ORDER BY start_time DESC;
GO
相关内容