备份和还原最佳做法 (Windows Azure Blob 存储服务)

本主题介绍 SQL Server 备份和还原到 Windows Azure Blob 服务的最佳做法和故障排除提示。

有关将 Windows Azure Blob 存储服务用于 SQL Server 备份或还原操作的详细信息,请参阅:

管理备份

下表列出了管理备份的一般建议:

  • 建议为每个备份使用唯一文件名以防止意外覆盖 blob。

  • 创建 Windows Azure Blob 容器时,建议将访问级别设置为**“私有”**,这样只有可提供必要身份验证信息的用户或帐户可读写容器中的 blob。

  • 对于在 Windows Azure 虚拟机中运行的 SQL Server 实例上的数据库,请使用与虚拟机相同区域中的存储帐户,以避免产生区域之间的数据传输成本。 使用同一区域还可以确保备份和还原操作具有最佳性能。

  • 失败的备份活动可能导致无效的备份文件。 我们建议定期标识失败的备份和删除 blob 文件。 有关详细信息,请参阅删除具有活动租约的备份 Blob 文件

  • 在备份期间使用 WITH COMPRESSION 选项可将存储成本和存储事务成本降至最低。 它也会减少完成备份过程所需的时间。

处理大型文件

  • SQL Server 备份操作使用多个线程来优化与 Windows Azure Blob 存储服务的数据传输。 但是性能取决于各种因素,如 ISV 带宽和数据库的大小。 如果您计划从内部 SQL Server 数据库备份大型数据库或文件组,建议您首先执行某些吞吐量测试。 Windows Azure 存储 SLA 限制了 BLOB 的最大处理时间,您需要考虑这个限制。

  • 使用在管理备份部分中建议的 WITH COMPRESSION 选项,在备份大型文件时这一点非常重要。

优化还原

要减小还原写入时间,请将**“执行卷维护任务”**用户权限添加到 SQL Server 用户帐户。 有关详细信息,请参阅数据库文件初始化

性能注意事项

备份和还原性能可能因网络带宽、数据库大小和 Windows Azure 存储服务的位置与内部位置的关系而异。 若要评估您所在环境的备份和还原性能,建议测试备份和还原并度量吞吐量和性能。 备份到 Windows Azure Blob 存储服务时应考虑以下各项:

  • 备份和还原时间与网络带宽成比例。

  • 备份的最低网络带宽为每秒 1 MB。 如果带宽低于每秒 1 MB,则备份可能会因超时错误而失败。

  • 还原时间还与网络延迟成比例,在从其尝试还原文件的 Windows Azure 区域在地理位置上与尝试还原到的 SQL Server 示例不同时尤为如此。 在此类情况下,测试对于确保可满足 RTO 要求变得非常重要。

解决备份到 Windows Azure Blob 存储服务或从中还原的问题

下面的一些方法可快捷地解决在备份到 Windows Azure Blob 存储服务或从中还原时发生的错误。

要避免由于不支持的选项或限制导致的错误,请参阅使用 Windows Azure Blob 存储服务进行 SQL Server 备份和还原文章,查看限制列表,以及 BACKUP 和 RESTORE 命令的支持信息。

身份验证错误:

  • WITH CREDENTIAL 是一个新选项,在备份到 Windows Azure Blob 存储服务或从中还原时需要该选项。 与凭据有关的失败可能包括:

    BACKUP 或 RESTORE 命令中指定的凭据不存在。 要避免此问题,如果备份语句中没有指定凭据,可以使用 T-SQL 语句来创建凭据。 以下是您可以使用的一个示例:

    IF NOT EXISTS
    (SELECT * FROM sys.credentials 
    WHERE credential_identity = 'mycredential')
    CREATE CREDENTIAL <credential name> WITH IDENTITY = 'mystorageaccount'
    ,SECRET = '<storage access key> ;
    
  • 凭据存在但是用于运行备份命令的登录帐户没有访问凭据的权限。 使用 db_backupoperator 角色中具有 Alter any credential 权限的登录帐户。

  • 验证存储帐户名称和密钥值。 在凭据中存储的信息必须与您在备份和还原操作中使用的 Windows Azure 存储帐户的属性值匹配。

备份错误/失败:

  • 并行备份到同一 blob 导致一个备份失败,发生**“初始化失败”**错误。

  • 使用以下错误日志帮助解决备份错误:

    • 设置跟踪标志 3051 以启用记录到具有以下格式的特定错误日志:

      BackupToUrl-<instname>-<dbname>-action-<PID>.log,其中 <action> 为以下值之一:

      • DB

      • FILELISTONLY

      • LABELONLY

      • HEADERONLY

      • VERIFYONLY

    • 您还可以查看 Windows 事件日志(位于应用程序日志之下,名为“SQLBackupToUrl”),查找相关信息。

  • 由于具有活动租约的 blob 导致的备份错误:失败的备份活动可能源自具有活动租约的 blob。

    如果重新尝试执行备份语句,备份操作可能失败,出现类似于以下的错误:

    “备份到 URL”收到来自远程端点的异常。异常消息:远程服务器返回了错误:(412)。blob 上当前有租约,请求中未指定租约 ID

    如果尝试对具有活动租约的备份 blob 文件执行还原语句,则还原操作失败,出现类似于以下的错误:

    异常消息:远程服务器返回了错误:(409)。有冲突。

    发生这种错误时,需要删除 blob 文件。 有关此情形和如何解决此问题的详细信息,请参阅删除具有活动租约的备份 Blob 文件

代理错误

如果您使用代理服务器访问 Internet,可能会发现以下问题:

代理服务器限制连接:

代理服务器可能具有限制每分钟连接次数的设置。 “备份到 URL”进程是一个多线程进程,因此可能超过此限制。 如果出现此情况,代理服务器将终止连接。 若要解决此问题,请更改代理设置,使 SQL Server 不使用该代理。 下面是一些您可能在错误日志中看到的类型或错误消息的示例:

  • 在“http://storageaccount.blob.core.windows. net/container/BackupAzurefile.bak”上写入失败:“备份到 URL”收到来自远程端点的异常。 异常消息: 无法从传输连接中读取数据: 连接已关闭。

  • 在文件“http://storageaccount.blob.core.windows. Net/container/BackupAzurefile.bak:”上发生不可恢复的 I/O 错误: 无法从远程端点收集错误。

    消息 3013,级别 16,状态 1,第 2 行

    备份数据库异常终止。

  • 在备份设备“http://storageaccount.blob.core.windows. net/container/BackupAzurefile.bak”上发生 BackupIoRequest::ReportIoError: 写入故障。 操作系统错误,“备份到 URL”收到来自远程端点的异常。 异常消息: 无法从传输连接中读取数据: 连接已关闭。

如果使用跟踪标志 3051 打开详细日志记录,您还可能在日志中看到以下消息:

HTTP 状态代码 502,HTTP 状态消息代理错误 (每分钟的 HTTP 请求数超出配置限制。 请与 ISA Server 管理员联系。 )

未选择默认代理设置:

有时,可能由于没有选择默认设置而导致如下代理验证错误:在文件“http://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak”上发生不可恢复的 I/O 错误:“备份到 URL”收到来自远程端点的异常。异常消息: 远程服务器返回错误: (407) 需要代理验证

若要解决此问题,请使用以下步骤创建一个配置文件,以允许“备份到 URL”进程使用默认代理设置:

  1. 使用以下 xml 创建一个名为 BackuptoURL.exe.config 的配置文件:

    <?xml version ="1.0"?>
    <configuration> 
                    <system.net> 
                                    <defaultProxy enabled="true" useDefaultCredentials="true"> 
                                                    <proxy usesystemdefault="true" /> 
                                    </defaultProxy> 
                    </system.net>
    </configuration>
    
  2. 将该配置文件置于 SQL Server 实例的 Binn 文件夹中。 例如,如果我的 SQL Server 安装在计算机上的 C 驱动器上,可将该配置文件置于此处:C:\Program Files\Microsoft SQL Server\MSSQL11.<InstanceName>\MSSQL\Binn