sql - 无法打开备份设备 - SQL Server 本地备份数据库到 Azure 存储

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

我有一个在本地 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 存储容器。

  1. 删除了 SQL Server 中的现有凭据(在“安全”>“凭据”下)
  2. 在 Azure 中,在存储帐户 > 容器下创建了访问策略。定义开始和到期日期/时间、时区以及读取、写入级别非常重要。
  3. 在 Azure 中,为容器生成 SAS token 。确保设置适当的开始和到期日期/时间以及时区。不要仅依赖 UTC。
  4. 将文件上传到容器以确保一切正常。
  5. 在 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/

    相关文章:

    mysql - 如何在没有 'id' 列的 MySql 中获取最后插入的记录?

    sql - 如何在 SQL Server 中重置表的 IDENTITY 列?

    mysql - SQL 查询 - 按工作日从两个表中计数

    c# - 如何将sql查询重写为linq

    python - 如何使用 python 列出我的 azure 帐户中的所有资源组?

    连接到数据库的 Azure Function App 无法正常工作

    azure - 访问有状态服务

    mysql - 如果目标表在 from 子句中,是否可以删除 MySQL 中的多行?

    mysql - Html-Entity 编码的空 HTML 标签

    sql - 将 SQL 文件包含到另一个 SQL 文件中