导出 (0) 打印
全部展开

针对 Azure SQL Database 的高可用性和灾难恢复注意事项

更新时间: 2014年4月

在将本地 SQL Server 数据库迁移到 Azure SQL Database (SQL Database) 时经常会被问及的一个问题是:如何实现备份和还原策略以便在发生用户错误、应用程序错误、硬件故障、由于自然灾难导致的数据中心关闭以及其他数据库灾难时对数据进行保护。与本地部署不同,SQL Database 旨在使数据库管理员不再束缚于物理数据库文件管理和操作。请注意,SQL Database 服务器是定义一组数据库的逻辑服务器。与你的 SQL Database 服务器相关联的数据库可以驻留在 Microsoft 数据中心的单独物理计算机上。单独的逻辑数据库可与其他逻辑数据库共享单个物理数据库空间。在多租户 Azure 环境中,传统的 SQL Server 备份和还原工具不起作用。

作者:Kun Cheng、Selcin Turkarslan
审校:Steve Howard、Adrian Bethune

每个 SQL Database 实例都具有三个副本,分别驻留在一个数据中心内的三个不同的物理计算机上,其中一个是主副本,另外两个是辅助副本。所有读取和写入均对主副本进行,并且所有更改都将以异步方式复制到辅助副本中。

SQL Database 使用基于仲裁的提交方案,在这个方案中,必须首先完成向主副本和一个辅助副本的写入,然后才能考虑事务的提交。如果硬件在主副本上发生故障,则 SQL Database 结构将检测到这种故障,并故障转移到某个辅助副本。因此,数据中心内至少有两个在事务处理方式上保持一致的物理数据副本。在每次发生服务器、设备或网络连接故障时,每个 Microsoft Azure SQL Database 实例的三个副本可保护你的数据。除了冗余副本之外,Microsoft Azure SQL Database 结构还针对数据中心内的所有数据库维护特定数目的备份,这些备份是以 5 分钟为时间增量生成的。这些备份存储于数据中心中,作为对同时发生的或灾难性的硬件和系统故障的安全防范措施。

SQL Database 环境旨在维护服务器的可用性并在发生硬件故障时维护数据完整性。在故障转移事件中,SQL Database 实例可能会在很短暂的时间中无法访问。你的应用程序需要具有用来处理此类故障转移事件的重试逻辑。但是,你可以在故障转移到辅助副本后使用相同的连接字符串重新建立连接。有关如何处理连接断开错误的详细信息,请参阅 TechNet Wiki 中的文章 Azure SQL Database 资源管理

在许多软件应用程序中,用户或应用程序错误是最常见的数据丢失或损坏情况之一。用户可能会误删除某个表或应用程序,或将某个事务提交两次。这些类型的错误很难控制和恢复。可以使用以下服务和工具来处理此类问题:

  • 自助还原服务(适用于高级/标准/基本 SKU)

  • 数据库复制

  • SQL Database 导入/导出服务

  • Bcp 和 SQL Server Integration Services

自助还原。使用 SQL Database 的最新预览版时,你可以将单个数据库还原到特定时间范围内的某个时间点。时间范围最短为每日,最长为 35 天。有关更多详细信息,请阅读 Azure SQL Database 备份和还原

数据库复制允许你在同一个数据中心的相同服务器中或不同服务器中创建你的数据库的副本。此操作是联机、异步并且在事务上一致的操作。由于这是一个异步操作,因此你可以发出复制命令,然后通过查询 sys.dm_database_copies (SQL Database) 系统视图来监视进度。

要复制某一 SQL Database 实例,你的登录名必须是目标服务器上服务器级别 dbmanager 角色的成员,并且必须是源服务器上源数据库的 DBO。该登录名必须在两台 SQL Database 服务器(源服务器和目标服务器)上具有相同的登录名称和密码。你选择的数据库复制的频率根据业务需要而定。若要从用户或应用程序错误中恢复,我们建议你创建一个每日副本,并且通过在新副本完成后每天删除最旧的副本,循环维护两个或三个正在运行的副本。

请注意,尽管我们建议每日副本,但你可以更频繁地复制数据库。不过,我们建议你执行数据库复制操作的频率不要比每小时复制一次还频繁。每个数据库复制过程(尽管执行独立于所有其他数据库复制过程)将在该复制过程结束时生成事务上一致的数据库副本。每个副本都将计入针对各 SQL Database 服务器的 150 个数据库的数据库限制中,并且将按照单独数据库计费。因此,过于频繁地复制会导致这样一种情况:你可能会用尽你的帐户中的可用数据库,并且为近乎于完全相同的数据库副本不必要地付费。有关详细信息,请参阅 SQL Database MSDN 库中的如何:复制数据库主题。

除了数据库复制之外,你还可以使用 SQL Database Import/Export Service。此服务允许你在带有 .bacpac 扩展名的包中导入或导出数据和架构。该包采用压缩格式,包含所有 SQL Database 兼容对象,例如表、视图、索引、约束、触发器、存储过程、登录名和用户等。这项服务可以在 SQL Database 实例和 Azure Blob 存储之间直接导入或导出 BACPAC 文件。可以通过 Azure 管理门户来访问该导入/导出服务。如果你想要在本地 SQL Server 和 SQL Database 之间不使用 Azure Blob 存储空间直接导入或导出数据,则可以使用在 Microsoft.SqlServer.Dac Namespace 中提供的类。

与数据库复制不同,该导入/导出服务不生成在事务上一致的备份。要进行备份,我们建议你锁定你的数据库,并且在导出数据和架构之前停止事务。或者,使用“数据库复制”首先创建事务一致的副本并从该副本导出。有关导入/导出的详细信息,请参阅如何:导入和导出数据库

Bulk copy utility (BCP.exe)SQL Server Integration Services (SSIS)System.Data.SqlClient.SqlBulkCopy 也与Import/Export Service相似。当前,SQL Database 支持 BCP、大容量复制 API 和 SSIS 来移动数据。你需要在加载数据前在 SQL Database 中创建架构对象。通过使用 BCP 或 SSIS 作为大容量复制机制,你可以控制从某一数据库内移动的对象以及从这些对象移动的数据。你还可以指定不同的参数,如批处理大小、包大小以及根据网络带宽和延迟用于实现最佳吞吐量的流的数目。

为了帮助避免在灾难时出现任何数据中心丢失,你需要创建数据库备份在数据中心(你的数据库应用程序部署于其中)外的脱机存储。为实现此目的,我们建议你使用:

  • 地域复制(针对高级和标准 SKU)。

  • 还原到备用的 Azure 区域(针对基本 SKU)。

  • 数据库复制和 SQL Database 导入/导出服务(如前一部分中所述,针对 Web 或企业 SKU)。

有关地域复制的更多详细信息,请阅读 Azure SQL Database 的活动地域复制。对于 Web 和企业版的 Azure 数据库,我们建议你使用以下推荐工具来管理整个备份和还原策略:

  • 实现备份和还原策略,以便使用以下方法处理用户和应用程序:

    • 数据库复制

    • SQL Database 导入/导出服务

    • Bcp 或 SQL Server Integration Services

  • 实现高级的备份和还原策略,以便使用以下方法处理数据中心设施的大范围数据丢失情况:

    • 导入/导出服务,用于将数据库副本迁移到一个或多个辅助数据中心,或者也可以选择迁移到你自己的本地 SQL Server 中。

有关 Microsoft Azure 中的备份、还原和灾难恢复选项的详细信息,请参阅 MSDN 库中的文章 Azure SQL Database 业务连续性Microsoft Azure 业务连续性技术指南

显示:
© 2014 Microsoft