导出 (0) 打印
全部展开

在 Azure SQL Database 中复制数据库

更新时间: 2014年6月

数据库复制操作可将 Microsoft Azure SQL Database 复制到新数据库。可以在相同或不同的逻辑服务器上创建副本。复制过程完成后,新数据库将完全正常工作,并独立于源数据库。完成复制时,新数据库的事务处理方式将与源数据库保持一致。副本的数据库服务层、大小和性能级别都与源数据库相同。

因为新数据库具有与数据库相同的服务层和性能级别,每个副本将会加入到数据库总数中,并按与源数据库相同的费率向你计费。有关详细信息,请参阅 SQL Database 定价详细信息

本主题内容:

以下方案需要将源数据库复制到新数据库。这些方案使用的方法取决于源数据库和目标数据库在同一服务器上还是不同服务器上、位于同一地区还是不同地区、属于同一订阅还是不同订阅。本主题后面的复制数据库的其他方法部分对这些方法进行了详细说明。

  • 应用程序开发和测试:将生产数据库复制到可用于开发和测试的新数据库。

  • 应用程序升级:在执行主要应用程序更新之前,请将应用程序数据库复制到使用不同名称的备份数据库。如果升级过程失败或虽然完成但存在错误,你只需将备份数据库重命名为应用程序数据库名称,即可恢复为升级之前的数据库版本。

  • 数据库迁移:你可能需要迁移应用程序,这个过程也包括移动数据库。

note备注
由复制功能创建的数据库将计入针对每个 Azure SQL Database 服务器 150 个数据库的 Azure SQL Database 数目限制中。有关成本和计费影响的信息,请参阅 Azure SQL Database 帐户和计费

[Top]

使用数据库复制功能时,数据库异步复制,因此在整个复制过程中都不需要与 Azure SQL Database 服务器的连接。你可以通过登录到目标服务器的 master 数据库并执行含 AS COPY OF 子句的 Transact-SQL CREATE DATABASE 语句,复制数据库。然后,你可以在目标服务器上使用 sys.dm_database_copiessys.databases 视图监视复制过程。

你可以使用不同数据库名称将数据库复制到同一 Azure SQL Database 服务器,或可以将数据库复制到不同 Azure SQL Database 服务器。本节考虑使用这两种方法。

在你复制数据库以便在同一 Azure SQL Database 服务器上生成新数据库时,可以对这两个数据库使用相同的登录名。你用于复制该数据库的安全主体将在创建新数据库时成为该数据库上的数据库所有者 (DBO)。下图阐释相同服务器复制:

在该图中,Database1A 将复制到同一 Azure SQL Database 服务器 Database1B 上的新数据库 Server1 中。复制了数据库的登录名将成为 Database1B 的 DBO。所有数据库用户、其权限及其来自 Database1A 的安全标识符 (SID) 都复制到 Database1B 中。因为用户 SID 在这两个数据库上是相同的,所以,来自 Server1 的登录名在这两个数据库上保持相同权限。

在完成该复制后,Database1B 将成为能够完全行使功能的独立数据库。Database1B 的登录名、用户和权限可独立于 Database1A 进行管理。

还可以在位于同一区域中的两台不同 Azure SQL Database 服务器之间复制数据库。因为是在不同 Azure SQL Database 服务器上创建新数据库,它与不同 master 数据库关联。新数据库中的所有用户都保持他们在源数据库中已有的权限。你用于复制该数据库的安全主体将在新数据库创建时成为该数据库上的数据库所有者 (DBO),并且将分配有新的安全标识符 (SID)。下图阐释了跨服务器复制:

在该图中,Database1A 将从 Server1 复制到不同 Azure SQL Database 服务器 Database2A 上的新数据库 Server2 中。复制了数据库的登录名将成为 Database2A 的 DBO。来自 Database1A 的所有数据库用户及其权限(但不是其 SID)将复制到 Database2A 中。来自 Server1 的登录名不能用于新数据库,因为这些登录名与某一其他 Azure SQL Database 服务器相关联,并且 Database2A 用户 SID 不同于 Database1A 用户 SID。

Important重要提示
一个 Azure SQL Database 区域可以包括多个物理群集。当前无法在两个不同的群集之间复制数据库。另外,无法在两个不同的订阅之间复制数据库。有关限制的详细信息,请参阅Restrictions

在完成跨服务器复制过程后,Database2A 的登录名、用户和权限可独立于 Database1A 进行管理。使用 DBO 登录名和 Transact-SQL ALTER USER 语句将新数据库中的用户映射到新 Azure SQL Database 服务器上的登录名。例如:ALTER USER userName WITH LOGIN='loginName'。有关详细信息,请参阅 ALTER USER

[Top]

使用数据库复制功能来复制数据库是最简单的方法,但考虑到在上文中所述的限制,在某些情况下,你可能需要考虑使用其他备选方法。.

关于支持的选项,需要注意以下几个问题:

使用时间点还原功能,你可以创建以往版本数据库的副本。例如,你需要创建上一次升级之前的数据库版本的副本。时间点还原功能仅在新服务层中提供。有关时间点还原的详细信息,请参阅 Azure SQL Database 备份和还原

活动地域复制功能仅在使用高级服务层的数据库上提供。它让你能够控制复制完成的时间。当你需要将复制完成时间与工作流中的其他操作密切协调时,应该使用该功能。有关详细信息,请参阅Azure SQL Database 的活动地域复制

如果你的特定方案中没有其他可用选项,应该考虑导入/导出服务。有关导入/导出的信息,请参阅如何导入和导出数据库 (Azure SQL Database)

下表列出了适用于不同使用案例的选项:

 

案例 订阅 区域 Server 支持的选项

案例 A

相同

相同

相同

  • 数据库复制(T-SQL、REST 或 PowerShell)

  • 时间点还原

案例 B

相同

相同

不同

  • 数据库复制 (T-SQL)

  • 数据库复制(T-SQL、REST 或 PowerShell)到同一服务器 + 导出/导入

  • 时间点还原到同一服务器 + 导出/导入

  • 活动地域复制

案例 B

相同

不同

不同

  • 数据库复制(T-SQL、REST 或 PowerShell)到同一服务器 + 导出/导入

  • 时间点还原到同一服务器 + 导出/导入

  • 活动的地域复制

案例 C

不同

相同

不同

  • 数据库复制(T-SQL、REST 或 PowerShell)到同一服务器 + 导出/导入

  • 时间点还原到同一服务器 + 导出/导入

案例 C

不同

不同

不同

  • 数据库复制(T-SQL、REST 或 PowerShell)到同一服务器 + 导出/导入

  • 时间点还原到同一服务器 + 导出/导入

使用案例 A
当源数据库和目标数据库位于同一服务器中时,最简单的方法是使用数据库复制或时间点还原功能来复制数据库。如上文所述,时间点还原功能让你能够创建过去某个时间点的数据库副本,而数据库复制功能则会复制当前的数据库。

用户案例 B
当源数据库和目标数据库属于同一订阅但位于不同服务器上时,使用 T-SQL 的数据库复制可将数据库复制到不同逻辑服务器。但是,如果逻辑服务器位于不同的物理群集中,复制将会失败。为了确定逻辑服务器是否位于同一群集中,请对两个服务器运行“Ping”命令,以检查它们是否共享相同的 IP 地址。如果目标服务器位于不同群集中,请执行以下步骤:

  1. 在源数据库所在的同一服务器中创建数据库的中间(过渡)副本,你可以使用数据库复制或时间点还原来执行此操作。

  2. 将副本导出到 Azure BLOB 存储中的 BACPAC 文件。

  3. 将在步骤 2 中创建的 BACPAC 文件导入到所需订阅/区域/服务器中的数据库。

  4. 删除在步骤 1 中创建的中间(过渡)数据库。

对于高级数据库:替代方法是选择使用 活动的地域复制 创建辅助数据库作为源数据库的副本。以下是创建数据库副本需要的步骤:

  1. 在目标服务器中创建辅助数据库。

  2. 当复制过程处于“追赶”状态时,停止辅助数据库。

  3. 新副本变成独立数据库,用于读取和写入操作。

  4. 如果副本必须具有与源数据库不同的名称,请重命名副本。

使用案例 C
如果源数据库和目标数据库属于同一订阅,则无论它们位于同一区域还是不同区域,你都可以使用用户案例 B 所述的过程,但 活动的地域复制 例外。活动的地域复制 不能跨越订阅使用。

以下部分介绍在将数据库复制到同一或不同逻辑服务器时,数据库复制功能如何运行。

另请参阅

显示:
© 2014 Microsoft