在运行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事件日志中也没有。 该硬盘上有足够的可用空间。 虚拟机和存储位于同一数据中心,我遵循了构建环境的所有最佳实践。
编辑>在数据库恢复之后,我注意到事件查看器中的以下行,并且在它开始恢复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失败?如果是这样,我该如何更改此超时?
答案 0 :(得分:2)
您可能希望尝试启用即时文件初始化(它为我解决了问题)。为此,您需要在安全策略中授予SQL服务帐户“执行卷维护任务”权限。
感谢这个'问题'提供答案:
https://stackoverflow.com/questions/20692592/restoring-large-database-backups-from-azure-blob-storage-to-sql-server-2012-in-a
答案 1 :(得分: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
保留生成的其余脚本以按原样恢复数据库。