SQL 服务器备份到 URL 间歇性失败

SQL Server Backup To URL failing intermittently

SQL Server 2014 SP2,Windows Server 2012 R2(完整更新)运行 在 DS13 Azure VM 上。

我正在 运行 对 Azure 存储帐户进行完整备份,但间歇性失败,没有太多信息。

有问题的数据库未压缩不到 100GB,压缩不到 9GB。

使用 dbcc traceon(3051,-1) 我可以看到日志内容。出现问题的唯一迹象是以下一些:

2016 年 7 月 12 日 3:45:16 下午:结果记录异常消息:基础连接已关闭:服务器关闭了预期保持活动状态的连接。 2016 年 7 月 12 日 3:45:16 下午:HTTP 状态代码 -1,HTTP 状态消息

7/12/2016 3:45:25 下午:记录结果异常消息:无法从传输连接读取数据:连接已关闭。 2016 年 7 月 12 日 3:45:25 下午:HTTP 状态代码 -1,HTTP 状态消息

7/12/2016 3:45:25 下午:结果记录异常消息:无法将数据写入传输连接:远程主机强行关闭了现有连接。 2016 年 7 月 12 日 3:45:25 下午:HTTP 状态代码 -1,HTTP 状态消息

终于看到了:

7/12/2016 3:45:39 PM:遇到限制状态:允许 ParallelThreads 1,未完成的 Ops 16,throttleDelta 1

它在 1 个 ParallelThread 停留了一会儿,然后慢慢开始恢复正常结果,直到日志结束:

7/12/2016 3:49:29 下午:在 VDI 通道上通信期间发生意外异常。 2016 年 7 月 12 日 3:49:29 下午:异常信息:刷新操作期间发生不可恢复的错误 2016 年 7 月 12 日 3:49:29 PM:堆栈:在 Microsoft.SqlServer.VdiInterface.VDI.AsyncIOCompletion(BlobRequestOptions 选项,List`1 asyncResults,CloudPageBlob pageBlob,Boolean onFlush) 在 Microsoft.SqlServer.VdiInterface.VDI.PerformPageDataTransfer(CloudPageBlob pageBlob,AccessCondition leaseCondition,Boolean forBackup) 2016 年 7 月 12 日 3:49:29 PM:活动队列有 0 个请求,直到我们得到一个 clearerror 7/12/2016 3:49:29 PM: Engine Communication 发生致命错误,异常信息如下 2016 年 7 月 12 日 3:49:29 下午:异常信息:刷新操作期间发生不可恢复的错误 2016 年 7 月 12 日 3:49:29 PM:堆栈:在 Microsoft.SqlServer.VdiInterface.VDI.PerformPageDataTransfer(CloudPageBlob pageBlob,AccessCondition leaseCondition,Boolean forBackup) 在 BackupToUrl.Program.MainInternal(字符串[] 参数)

在任务管理器中,我可以看到 BackupToUrl.exe 消失了,但是 SQL 查询仍然执行了一段时间。 Azure 存储帐户仍将数据库显示为 1TB 大小(与通常在上传过程中一样)。最终 SQL 查询 returns 出现以下错误,并更新 Azure 存储帐户以删除 .bak 文件:

为文件 1 上的数据库“”、文件“”处理了 7056520 页。 已处理数据库“”的 3 页,文件 1 上的文件“_log”。 消息 3271,级别 16,状态 1,第 1 行 文件“https://<removed>.blob.core.windows.net/<removed>/<removed>.bak”发生不可恢复的 I/O 错误:备份到 URL 从远程端点收到异常。异常消息:刷新操作期间发生不可恢复的错误。 消息 3013,级别 16,状态 1,第 1 行 备份数据库异常终止。

有人知道如何诊断和解决这个问题吗?

原来这是由于 Azure VM 的主机在与存储帐户通信时出现 IO 错误。将虚拟机重新部署到新硬件后,问题就解决了。据称这是由平台错误引起的。