我正在运行一个修补的 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
但查询抛出以下错误:
消息 3292,级别 16,状态 9,第 1 行
尝试使用指定的 URL 设备执行备份或还原时失败。有关详细信息,请查阅 Windows 事件日志。
消息 3013,级别 16,状态 1,第 1 行
备份数据库异常终止。
检查服务器的事件日志显示实际错误为:
SQLVDI:Loc=IdentifySQLServer。Desc=MSSQLSERVER。ErrorCode=(5)访问被拒绝。
. 进程=4668。线程=6596。客户。实例=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 denied”消息多得多的错误日志信息。