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

复制 Azure SQL 数据库中数据库的事务一致性副本

适用于:Azure SQL 数据库

Azure SQL 数据库提供了几种方法,用于在同一 Azure SQL 数据库逻辑服务器或其他逻辑服务器上创建现有 数据库 的副本。 可以使用 Azure 门户、PowerShell、Azure CLI 或 Transact-SQL 复制数据库。

注意

Microsoft Entra ID 以前称为 Azure Active Directory (Azure AD)。

概述

数据库副本是源数据库在发起复制请求时的某个时间点的事务一致快照。 可以为副本选择同一个逻辑服务器或不同的逻辑服务器。 此外,你还可以选择保留源数据库的备份冗余和计算大小,或在相同服务层中使用不同的备份存储冗余和/或计算大小。 还可以将“标准”服务层中的数据库复制到“标准”层或“常规用途”层,将“高级”服务层中的数据库复制到“高级”层或“业务关键”层。

复制完成后,新数据库是一个具有完整功能且独立于源数据库的数据库。 复制的数据库中的登录名、用户和权限独立于源数据库进行管理。 副本使用异地复制技术创建。 副本种子设定完成后,异地复制链接会自动终止。 使用异地复制的所有要求都适用于数据库复制操作。 有关详细信息,请参阅活动异地复制概述

注意

Azure 门户、PowerShell 和 Azure CLI 不支持将数据库复制到其他订阅。

超大规模数据库的数据库副本

对于“超大规模”服务层中的数据库,由目标数据库确定副本是快速副本还是数据大小副本:

  • 快速复制:当复制在与源的同一区域中完成时,会从 blob 快照创建复制,无论数据库大小如何,此复制都是一项快速操作。

  • 数据复制大小:如果目标数据库与源数据库位于不同的区域,或者目标数据库的数据库备份存储冗余(本地、区域、异地)与源数据库不同,则复制操作将是数据操作大小。 复制时间不会与大小成正比,因为页服务器 blob 是并行复制的。

数据库副本中的登录名

将数据库复制到同一逻辑服务器时,可以在两个数据库上使用相同的登录名。 用于复制该数据库的安全主体将成为新数据库上的数据库所有者。

将数据库复制到其他逻辑服务器时,在目标逻辑服务器上启动复制操作的安全主体将成为新数据库的所有者。

无论目标服务器如何,所有数据库用户、权限及安全标识符 (SID) 都会复制到数据库副本中。 使用包含的数据库用户进行数据访问可以确保复制的数据库具有相同的用户凭据,这样在复制完成后,你可以使用相同的凭据立即进行访问。

如果使用服务器级登录名进行数据访问并将数据库复制到其他服务器,则基于登录名的访问可能无法工作。 发生这种情况可能是因为目标逻辑服务器上不存在登录名,或者这些密码和安全标识符(SID)不同。 有关将数据库复制到其他服务器时管理登录名的详细信息,请参阅配置和管理用于异地还原或故障转移的 Azure SQL 数据库安全性。 将操作成功复制到其他逻辑服务器后,在重新映射其他用户之前,只有与数据库所有者关联的登录名,或者服务器管理员可以登录到复制的数据库。 若要在复制操作完成后解析登录名并建立数据访问权限,请参阅解析登录名

使用 Azure 门户复制

要使用 Azure 门户复制数据库,请打开数据库页面,然后选择“复制”以打开“创建 SQL 数据库 - 复制数据库”页。 填写要将数据库复制到的目标逻辑服务器的值。

显示数据库概述页的 Azure 门户屏幕截图,其中突出显示了数据库“复制”选项。

复制数据库

可以使用 PowerShell、Azure CLI 和 Transact-SQL (T-SQL) 复制数据库。

对于 PowerShell,请使用 New-AzSqlDatabaseCopy cmdlet。

重要

PowerShell Azure 资源管理器 (RM) 模块仍受 Azure SQL 数据库支持,但所有未来的开发都是针对 Az.Sql 模块的。 AzureRM 模块至少在 2020 年 12 月之前将继续接收 bug 补丁。 Az 模块和 AzureRm 模块中的命令参数大体上是相同的。 若要详细了解其兼容性,请参阅新 Azure PowerShell Az 模块简介

New-AzSqlDatabaseCopy -ResourceGroupName "<resourceGroup>" -ServerName $sourceserver -DatabaseName "<databaseName>" `
    -CopyResourceGroupName "myResourceGroup" -CopyServerName $targetserver -CopyDatabaseName "CopyOfMySampleDatabase"

数据库复制是一个异步操作,但在接受请求后会立即创建目标数据库。 如果需要取消仍在进行的复制操作,请使用 Remove-AzSqlDatabase cmdlet 删除目标数据库。

有关完整的 PowerShell 脚本示例,请参阅 使用 PowerShell 将数据库复制到新的逻辑服务器

监视复制操作的进度

可以通过查询 sys.databasessys.dm_database_copiessys.dm_operation_status 视图来监视复制过程。 当复制正在进行时,新数据库的 state_desc 视图的 sys.databases 列被设置为 COPYING

  • 如果复制失败,新数据库的 state_desc 视图的 sys.databases 列将设置为 SUSPECT。 对新数据库执行 DROP 语句并稍后重试。
  • 如果复制成功,新数据库的 state_desc 视图的 sys.databases 列将设置为 ONLINE。 复制已完成并且新数据库是一个常规数据库,可独立于源数据库进行更改。

注意

如果决定在复制过程中取消复制,请对新数据库执行 DROP DATABASE 语句。

重要

如果需要使用比源小得多的服务目标创建副本,那么目标数据库可能没有足够的资源来完成种子设定过程,这可能会导致复制操作失败。 在此场景中,可发起异地还原请求,以便在不同的逻辑服务器和/或不同的区域中创建副本。 有关详细信息,请参阅使用数据库备份恢复 Azure SQL 数据库

权限

若要创建数据库副本,需要具有以下角色:

  • “订阅所有者”或
  • “SQL Server 参与者”角色或
  • 源逻辑服务器上的自定义角色具有以下权限:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write
  • 目标逻辑服务器上的自定义角色具有以下权限:
    • Microsoft.Sql/servers/read
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write

若要取消数据库副本,需要具有以下角色:

  • “订阅所有者”或
  • “SQL Server 参与者”角色或
  • 对目标数据库具有以下权限的自定义角色:
    • Microsoft.Sql/servers/databases/delete

若要使用 Azure 门户管理数据库副本,还需要以下权限:

  • Microsoft.Resources/subscriptions/resources/read
  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/operationstatuses/read

若要查看门户上资源组中部署下的操作、跨多个资源提供程序的操作(包括 SQL 操作),还需要以下权限:

  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read
  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read

解析登录名

在将新数据库联机至目标逻辑服务器后,使用 ALTER USER 语句将新数据库中的用户重新映射到目标逻辑服务器上的登录名。 若要解析孤立用户,请参阅孤立用户疑难解答。 另请参阅为异地还原或故障转移配置和管理 Azure SQL 数据库安全性

新数据库中的所有用户都保持他们在源数据库中已有的权限。 启动数据库复制过程的用户成为新数据库的数据库所有者。 复制成功之后,重新映射其他用户之前,只有数据库所有者才能登录到新数据库。

若要了解如何在将数据库复制到其他逻辑服务器时管理用户和登录名,请参阅 配置和管理用于异地还原或故障转移的 Azure SQL 数据库安全性。

数据库复制错误

在 Azure SQL 数据库中复制数据库时,可能会发生以下错误。 有关详细信息,请参阅在 Azure SQL 数据库中复制事务一致性的数据库副本

错误代码 严重性 说明
40635 16 IP 地址为“%.*ls”的客户端暂时禁用。
40637 16 创建数据库副本当前处于禁用状态。
40561 16 数据库复制失败。 源数据库或目标数据库不存在。
40562 16 数据库复制失败。 源数据库已删除。
40563 16 数据库复制失败。 目标数据库已删除。
40564 16 数据库复制由于内部错误而失败。 请删除目标数据库,并重试。
40565 16 数据库复制失败。 不允许来自同一源的多个并发数据库复制。 请删除目标数据库,并重试。
40566 16 数据库复制由于内部错误而失败。 请删除目标数据库,并重试。
40567 16 数据库复制由于内部错误而失败。 请删除目标数据库,并重试。
40568 16 数据库复制失败。 源数据库已变得不可用。 请删除目标数据库,并重试。
40569 16 数据库复制失败。 目标数据库已变得不可用。 请删除目标数据库,并重试。
40570 16 数据库复制由于内部错误而失败。 请删除目标数据库,并重试。
40571 16 数据库复制由于内部错误而失败。 请删除目标数据库,并重试。