我有一个在本地 SQL Server 实例上运行的数据库。我设置了一个 SQL 代理来每晚备份数据库并将其存储在 Azure 的容器中。但是,作业运行后我看到以下错误:
Message
Executed as user: NT SERVICE\SQLSERVERAGENT. Cannot open backup device 'https://mystorageaccount.blob.core.windows.net/mystoragecontainer/20200102/MYDATABASE_0.bak'. Operating system error 50(The request is not supported.). [SQLSTATE 42000] (Error 3201) BACKUP DATABASE is terminating abnormally. [SQLSTATE 42000] (Error 3013)
Azure 存储帐户是存储(通用 v1)。
SQL Server 13.0.5233.0 微软 SQL Server 管理工作室 14.0.17213.0 Microsoft 分析服务客户端工具 14.0.1016.232 Microsoft 数据访问组件 (MDAC) 10.0.14393.0 微软MSXML 3.0 6.0 微软 Internet Explorer 9.11.14393.0 微软.NET框架4.0.30319.42000 操作系统6.3.14393
是否可以配置 NT SERVICE\SQLSERVERAGENT 以连接到 Azure 存储容器?
最佳答案
所有评论在一定程度上都是有效的。我最终修复了(宽松使用的术语)使用 SAS(共享访问签名)凭据将我的 SQL Server 数据库备份到 Azure 存储容器。
- 删除了 SQL Server 中的现有凭据(在“安全”>“凭据”下)
- 在 Azure 中,在存储帐户 > 容器下创建了访问策略。定义开始和到期日期/时间、时区以及读取、写入级别非常重要。
- 在 Azure 中,为容器生成 SAS token 。确保设置适当的开始和到期日期/时间以及时区。不要仅依赖 UTC。
- 将文件上传到容器以确保一切正常。
- 在 SQL Server 中,创建凭据。 secret 应该是 SAS token ,前面不带 ?,所以只需“sv=....”。
IF NOT EXISTS
(SELECT * FROM sys.credentials
WHERE name = 'https://mystorageaccount.blob.core.windows.net/mycontainer')
CREATE CREDENTIAL [https://mystorageaccount.blob.core.windows.net/mycontainer]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = 'sv=_my_sas_key_without_?';
- 备份数据库。 URL 和容器必须与凭据匹配 - 在本例中为 https://mystorageaccount.blob.core.windows.net/mycontainer .
BACKUP DATABASE [mydatabase]
TO URL = 'https://mystorageaccount.blob.core.windows.net/mycontainer/mydatabase_03012020120400.bak'
WITH FORMAT,
COMPRESSION,
STATS=5,
BLOCKSIZE=65536,
MAXTRANSFERSIZE=4194304;
GO
关于sql - 无法打开备份设备 - SQL Server 本地备份数据库到 Azure 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59567488/