备份到 Azure 存储 BLOB 时出现 SQLVDI 错误

标签 sql sql-server azure azure-storage database-backups

我正在运行修补的 SQL 2014,尝试使用以下方法将数据库备份到我们的 Azure 存储 BLOB 之一:

BACKUP DATABASE [DB]
TO URL = N'https://storage.blob.core.windows.net/server-mssqlserver/DB.bak'
WITH CREDENTIAL = N'AzureCredential'
    ,NOFORMAT
    ,NOINIT
    ,NAME = N'DBA_DB-Full Database Backup'
    ,NOSKIP
    ,NOREWIND
    ,NOUNLOAD
    ,COMPRESSION
    ,STATS = 5
GO

但是查询抛出以下错误:

Msg 3292, Level 16, State 9, Line 1
A failure occurred while attempting to execute Backup or Restore with a URL device specified. Consult the Windows Event Log for details.
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

检查服务器的事件日志显示实际错误为:

SQLVDI: Loc=IdentifySQLServer. Desc=MSSQLSERVER. ErrorCode=(5)Access is denied.
. Process=4668. Thread=6596. Client. Instance=MSSQLSERVER. VD=.

我已确保SQL Server代理服务的帐户具有创建全局对象策略,并确保SQL VSS编写器服务在本地系统帐户下运行。错误不断发生!

我可以做些什么来修复它,或者只是记录一些比上面的“SQLVDI: Loc=IdentifySQLServer”更详细的错误消息?

最佳答案

Crikey,这是“不知道我是如何解决它”的事情之一。

在去吃午饭之前,我可以通过运行提供的 T-SQL 可靠地生成有问题的错误,但是当我吃完午饭回来时,BACKUP 命令完成得很好!

我记得更改的主要内容是在 Azure 端,我在其中创建了一个SAS(共享访问签名)

对于 SQL 2014,这应该是不需要的,因为它使用实际的 Azure 凭据来连接到存储。实际上,我为 SQL Server 2016 实例创建了 SAS,我希望将其备份到同一个容器,并且可能也打开了 SQL Server 2014 容器的访问路径!

非常感谢Sean Gallardy推荐ProcMon ,它显示的错误日志信息比“ErrorCode=(5)Access is returned”消息多得多。

关于备份到 Azure 存储 BLOB 时出现 SQLVDI 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45567836/

相关文章:

sql - 在表级别启用 CDC 时出错

azure - PutBlock错误: The remote server returned an error: (400) Bad Request while uploading file to Azure

sql-server - 从 Firebird 到 SQL Server 的过程

C# Azure 和 IOT 对类型 'stream' 的引用声称在 'System.RunTime' 中定义,但找不到

azure - 手动运行计划的 Azure WebJob

mysql - 计算满足条件的记录

sql - 在 SQL Server 中创建全局静态变量?

mysql - 提取与一组值匹配且 ID 计数与该组值的长度匹配的行

mysql - 无法按原样插入值 - 需要任何数据库的答案 - Oracle、Sql Server、MySql 等

sql - 在一组两种可能性中选择唯一行