备份和还原最佳做法 (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”进程使用默认代理设置:
使用以下 xml 创建一个名为 BackuptoURL.exe.config 的配置文件:
<?xml version ="1.0"?> <configuration> <system.net> <defaultProxy enabled="true" useDefaultCredentials="true"> <proxy usesystemdefault="true" /> </defaultProxy> </system.net> </configuration>
将该配置文件置于 SQL Server 实例的 Binn 文件夹中。 例如,如果我的 SQL Server 安装在计算机上的 C 驱动器上,可将该配置文件置于此处:C:\Program Files\Microsoft SQL Server\MSSQL11.<InstanceName>\MSSQL\Binn。