你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用自动化大规模迁移数据库(预览版)

Azure Data Studio 的 Azure SQL 迁移扩展汇集了简化的评估、建议和迁移经验,可提供以下功能:

  • 增强式评估机制可以评估 SQL Server 实例,识别准备好迁移到不同 Azure SQL 目标的数据库。

  • SKU 建议引擎(预览版)从本地源 SQL Server 实例收集性能数据,根据 Azure SQL 目标生成适当大小的 SKU 建议。

  • 由 Azure 数据库迁移服务提供支持的可靠 Azure 服务,可以协调数据移动活动,提供无缝迁移体验。

  • 以联机(适用于需要最短停机时间的迁移)或脱机(适用于迁移期间持续停机的迁移)迁移模式的功能,可满足你的业务需求。

  • 可以灵活地创建和配置自承载集成运行时,以提供你自己的计算,用于访问源 SQL Server 和本地环境中的备份。

借助 PowerShell - Azure DataMigration 服务模块Azure CLI 等自动化工具,可以将 Azure SQL 迁移扩展的功能与 Azure 数据库迁移服务一起大规模迁移一个或多个数据库(包括跨多个 SQL Server 实例的数据库)。

在使用 Azure PowerShell 或 Azure CLI 时,可以参考以下示例脚本并根据你的迁移方案进行调整:

迁移方案 脚本语言
SQL Server 评估 PowerShell / Azure CLI
从 SQL Server 到 Azure SQL 托管实例(使用文件共享) PowerShell / Azure CLI
从 SQL Server 到 Azure SQL 托管实例(使用 Azure 存储) PowerShell / Azure CLI
从 SQL Server 到 Azure 虚拟机上的 SQL Server(使用文件共享) PowerShell / Azure CLI
从 SQL Server 到 Azure 虚拟机上的 SQL Server(使用 Azure 存储) PowerShell / Azure CLI
从 SQL Server 到 Azure SQL 数据库 PowerShell / Azure CLI
SKU 建议(预览版) PowerShell / Azure CLI
端到端迁移自动化 PowerShell / Azure CLI
针对多个数据库的端到端迁移自动化 PowerShell / Azure CLI

先决条件

使用 Azure PowerShell 或 Azure CLI 的所有受支持迁移方案共有的先决条件:

  • 有一个 Azure 帐户,该帐户已分配给下列内置角色之一:

    • 目标 Azure SQL 托管实例、Azure 虚拟机上的 SQL Server 或 Azure SQL 数据库以及用于从 SMB 网络共享上传数据库备份文件的存储帐户的参与者(不适用于 Azure SQL 数据库)。

    • 包含目标 Azure SQL 托管实例、Azure 虚拟机上的 SQL Server 或 Azure SQL 数据库的 Azure 资源组的读取者角色。

    • Azure 订阅所有者或参与者角色。

    Azure 帐户仅在运行迁移步骤时需要,在评估时和 Azure 建议步骤过程中不需要。

  • 创建目标 Azure SQL 托管实例Azure 虚拟机上的 SQL ServerAzure SQL 数据库

    如果你的目标是 Azure SQL 数据库,则必须使用 Azure Data Studio 的 SQL Server dacpac 扩展SQL 数据库项目扩展将数据库架构从源迁移到目标。

    如果使用现有的 Azure 虚拟机,则应将其注册到完全管理模式下的 SQL IaaS 代理扩展

  • 如果你的目标是 Azure 虚拟机上的 Azure SQL 托管实例或 SQL Server,请确保用于连接源 SQL Server 的登录名是 sysadmin 服务器角色的成员或具有 CONTROL SERVER 权限。

  • 如果你的目标是 Azure SQL 数据库,请确保用于连接源 SQL Server 的登录名是成员,并且目标 SQL Server 的 db_datareader 和登录名是 db_owner

  • 为完整数据库和事务日志备份文件使用以下存储选项之一:

    • SMB 网络共享

    • Azure 存储帐户文件共享或 blob 容器

      • 如果数据库备份文件在 SMB 网络共享中提供,请创建一个 Azure 存储帐户,该帐户允许 DMS 服务上传数据库备份文件。 请务必在创建 Azure 数据库迁移服务实例的同一区域创建 Azure 存储帐户。

      • 确保 Azure 存储帐户 blob 容器仅用于存储备份文件。 任何其他类型的文件(txt、png、jpg 等)都会干扰还原过程,导致失败。

      • Azure 数据库迁移服务不启动任何备份,而是使用现有备份进行迁移。你可能已经在灾难恢复计划中有了这些备份。

      • 可以将每个备份写入单个独立的备份文件或多个备份文件。 但是,不支持将多个备份(即完整备份和 t-log 备份)追加到单个备份介质中。

      • 使用压缩的备份来减少遇到与迁移大型备份相关的潜在问题的可能性。

  • 确保运行源 SQL Server 实例的服务帐户对包含数据库备份文件的 SMB 网络共享具有读取和写入权限。

  • 在迁移数据之前,必须将源 SQL Server 实例证书从受透明数据加密 (TDE) 保护的数据库迁移到目标 Azure SQL 托管实例或 Azure 虚拟机上的 SQL Server。 有关迁移已启用 TDE 的数据库的详细信息,请参阅教程:将已启用 TDE 的数据库(预览版)迁移到 Azure Data Studio 中的 Azure SQL

    提示

    如果数据库包含受 Always Encrypted 保护的敏感数据,则在 Azure Data Studio 中使用 DMS 的迁移过程会自动将你的 Always Encrypted 密钥迁移到目标 Azure SQL 托管实例或 Azure 虚拟机上的 SQL Server。

  • 如果数据库备份在网络文件共享中,请提供计算机以安装自承载集成运行时,以访问和迁移数据库备份。 Azure PowerShell 或 Azure CLI 模块提供用于注册自承载集成运行时的身份验证密钥。 在为迁移做准备时,请确保计划安装自承载集成运行时的计算机启用了以下出站防火墙规则和域名:

    域名 出站端口 说明
    公有云:{datafactory}.{region}.datafactory.azure.net
    *.frontend.clouddatahub.net
    Azure 政府版:{datafactory}.{region}.datafactory.azure.us
    中国:{datafactory}.{region}.datafactory.azure.cn
    443 自承载集成运行时连接到数据迁移服务时需要此端口。
    对于在公有云中新创建的数据工厂,请从自承载集成运行时密钥(格式为 {datafactory}.{region}.datafactory.azure.net)查找 FQDN。 对于旧数据工厂,如果在自承载集成密钥中找不到 FQDN,请改用 *.frontend.clouddatahub.net。
    download.microsoft.com 443 自承载集成运行时下载更新时需要此端口。 如果已禁用自动更新,则可以跳过对此域的配置。
    *.core.windows.net 443 由连接到 Azure 存储帐户的自承载集成运行时使用,用于从网络共享上传数据库备份

    如果数据库备份文件已在 Azure 存储帐户中提供,则在迁移过程中不需要自承载集成运行时。

  • 使用自承载集成运行时时,请确保安装了运行时的计算机可以连接到源 SQL Server 实例和备份文件所在的网络文件共享。

  • 应该启用出站端口 445,用于访问网络文件共享。

  • 如果是首次使用 Azure 数据库迁移服务,请确保在订阅中注册了 Microsoft.DataMigration 资源提供程序。 可以按照步骤注册资源提供程序

    如果迁移目标是 Azure SQL 数据库,无需备份即可执行此迁移。 迁移到 Azure SQL 数据库被视为涉及数据库预生成和数据移动(由 DMS 执行)的逻辑迁移。

自动执行数据库迁移

使用 Azure PowerShell Az.DataMigration 或 Azure CLI az datamigration,你可以通过自动创建 Azure 数据库迁移服务、为联机迁移配置数据库迁移以及执行直接转换来迁移数据库。 Azure 示例中还记录了其他几个命令和功能。

使用 Azure CLI 自动迁移 SQL Server 数据库的示例:步骤 1:创建 Azure 数据库迁移服务,它将协调数据库的迁移活动。

#STEP 1: Create Database Migration Service
az datamigration sql-service create --resource-group "myRG" --sql-migration-service-name "myMigrationService" --location "EastUS2"

步骤 2:配置并启动从本地 SQL Server(备份位于 Azure 存储中)到 Azure SQL 托管实例的联机数据库迁移。

#STEP 2: Start Migration
az datamigration sql-managed-instance create `
--source-location '{\"AzureBlob\":{\"storageAccountResourceId\":\"/subscriptions/mySubscriptionID/resourceGroups/myRG/providers/Microsoft.Storage/storageAccounts/dbbackupssqlbits\",\"accountKey\":\"myAccountKey\",\"blobContainerName\":\"dbbackups\"}}' `
--migration-service "/subscriptions/mySubscriptionID/resourceGroups/myRG/providers/Microsoft.DataMigration/SqlMigrationServices/myMigrationService" `
--scope "/subscriptions/mySubscriptionID/resourceGroups/myRG/providers/Microsoft.Sql/managedInstances/mySQLMI" `
--source-database-name "AdventureWorks2008" `
--source-sql-connection authentication="SqlAuthentication" data-source="mySQLServer" password="myPassword" user-name="sqluser" `
--target-db-name "AdventureWorks2008" `
--resource-group myRG `
--managed-instance-name mySQLMI

步骤 3:在所有备份都还原到 Azure SQL 托管实例后执行迁移直接转换。

#STEP 3: Get migration ID and perform Cutover
$migOpId = az datamigration sql-managed-instance show --managed-instance-name "mySQLMI" --resource-group "myRG" --target-db-name "AdventureWorks2008" --expand=MigrationStatusDetails --query "properties.migrationOperationId"
az datamigration sql-managed-instance cutover --managed-instance-name "mySQLMI" --resource-group "myRG" --target-db-name "AdventureWorks2008" --migration-operation-id $migOpId

如果你收到错误“订阅未注册以使用命名空间 'Microsoft.DataMigration'。请参阅https://aka.ms/rps-not-found以了解如何注册订阅”,请运行以下命令:

Register-AzResourceProvider -ProviderNamespace "Microsoft.DataMigration"