2

在运行 Windows 2008 R2 和 SQL 2012 Enterprise SP1 CU5 的 Windows Azure VM 上,我正在尝试使用新功能 RESTORE DATABASE FROM URL 将存储在 Azure 中的备份还原为页 blob。到目前为止,我已经多次使用高达 60GB 的备份(未压缩),它就像一个魅力。但是,有一个 32GB 的特殊备份我无法恢复。它失败并显示以下错误消息:

Msg 3013, Level 16, State 1, Line 2
RESTORE DATABASE is terminating abnormally.

没有提供有关失败原因的进一步信息。如果我从本地硬盘下载相同的备份,我可以毫无问题地恢复它。我尝试执行

dbcc traceon(3004,3605,-1) 

要获取更多信息,我可以看到数据库已成功恢复,然后它在日志文件中归零,完成后就是失败的时候。SQL 日志中没有任何错误消息,Windows 事件日志中也没有。该硬盘驱动器上有足够的可用空间。虚拟机和存储在同一个数据中心,我在构建环境时遵循了所有最佳实践。

编辑>我注意到事件查看器中的以下几行 AFTER 数据库被恢复并且在它开始恢复 LOG 文件之前(换句话说,当日志文件被清零时)

SQLVDI: Loc=CVDS::Close. Desc=Open devices!. ErrorCode=(0). Process=2900. Thread=1104. Client. Instance=MSSQLSERVER. VD=Global\https://url/stuff/xx.bak_SQLVDIMemoryName_0.
SQLVDI: Loc=SignalAbort. Desc=Client initiates abort. ErrorCode=(0). Process=2900. Thread=1104. Client. Instance=MSSQLSERVER. VD=Global\https://url/stuff/xx.bak_SQLVDIMemoryName_0. 
SQLVDI: Loc=TriggerAbort. Desc=invoked. ErrorCode=(0). Process=1508. Thread=2008. Server. Instance=MSSQLSERVER. VD=Global\https://url/stuff/xx.bak_SQLVDIMemoryName_0.

是否有可能在归零完成之前与 Azure 存储的连接超时,从而导致 RESTORE 失败?如果是这样,我该如何更改此超时?

4

2 回答 2

2

您可能希望尝试启用即时文件初始化(它为我解决了问题)。为此,您需要在安全策略中授予 SQL 服务帐户“执行卷维护任务”权限。

有关说明,请参阅:http:
//blogs.msdn.com/b/sql_pfe_blog/archive/2009/12/23/how-and-why-to-enable-instant-file-initialization.aspx

感谢这个“问题”提供了答案:
https ://stackoverflow.com/questions/20692592/restoring-large-database-backups-from-azure-blob-storage-to-sql-server-2012-in-一个

于 2014-01-20T11:17:21.073 回答
0

对于遇到此问题的任何人,我找到了不同的解决方法。

我没有创建备份日志文件以存储在 Azure blob 存储上,而是更改了执行前生成的那部分脚本以将其存储到本地磁盘。

我不确定为什么当 SQL 尝试将日志文件写入 blob 存储时未成功创建日志文件。

这是我修改后的一段脚本:-

USE [master]
BACKUP LOG [RealTime] TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL14\MSSQL\Backup\YourDb_LogBackup_2015-07-07_09-04-17.bak' 
WITH NOFORMAT, NOINIT,  NAME = N'YourDb_LogBackup_2015-07-07_09-04-17', NOSKIP, NOREWIND, NOUNLOAD,  NORECOVERY ,  STATS = 5

保留生成的脚本的其余部分以按原样还原数据库。

于 2015-07-07T08:57:03.997 回答