SQL Server 2016 Web 备份到 URL

SQL Server 2016 Web 备份到 URL

我最近建立了一个带有 SQL Server 2016 Web 版的新 Windows Server 2012 R2 实例,并尝试设置自动备份到 Azure,但没有任何成功。我首先在 Azure 上创建了存储帐户,然后创建了共享访问签名 (SAS),这就是我开始迷失的地方。从这里开始,我尝试了:

  • 使用此脚本创建本地凭证:

    CREATE CREDENTIAL [BlobUrlWithContainerName]
    WITH IDENTITY = '[FriendlyName]', 
    SECRET = '[SAS Token]'`
    

    上述脚本未报告任何错误,但是向 URL 发出 BACKUP DATABASE 命令会导致不受支持的命令(完整错误为:Cannot open backup device 'https://[storagename].blob.core.windows.net/[containername]/AdventureWorks2016.bak'. Operating system error 50(The request is not supported.)

  • 然后,我尝试通过 SSMS 上的单个数据库备份选项,右键单击数据库,选择Tasks ==> Back Up..,将备份更改为 URL,然后单击添加。当我这样做时,我收到以下提示:

    SQL 备份提示

    没有注册的容器(我也没有找到任何有关如何注册容器的详细信息),因此我单击“新建容器”,弹出一个Connect to a Microsoft Subscription对话框。我使用 Azure 帐户登录,看到两个订阅(免费试用版,已过期,以及按用量付费,这是正确的订阅),选择按用量付费,然后当我选择我的存储帐户时,对话框关闭,出现“索引超出范围”错误,这意味着找不到任何容器。以下是相关屏幕截图:

    Microsoft 订阅提示

    索引超出范围错误

我不知道接下来该去哪里。有什么想法吗?

答案1

两个备份选项:使用凭据将数据库备份到 URL - 生成 blob,创建时需要凭据才能使用令牌,而不是 SAS [无法跨多个文件进行条带备份]

将数据库备份至 URL [无凭证] - 生成块,要求凭证名称与 URL [存储帐户 + 容器] 匹配,SAS 保密,[可跨多个文件进行条带备份]

删除前导的“?”几乎从未被提及过,并且会干扰到所有人。

即使一切正确,也可能出现操作系统错误 50(对我来说是 Windows Server 2012 R2;sql server SQL Server 2016):我有一份工作,将数据库跨文件条带化备份到 Azure - 星期五 1 个数据库失败,星期六同一个数据库成功而没有更改任何内容...只是火上浇油。

可能是您的身份验证导致您无法找到容器。

   USE master  
   CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] -- this name must match the container path, start with https and must not contain a trailing forward slash.  
  WITH IDENTITY='SHARED ACCESS SIGNATURE' -- this is a mandatory string and do not change it.   
     , SECRET = 'sharedaccesssignature' –- this is the shared access signature token   
  GO    

来源:https://docs.microsoft.com/en-us/sql/t-sql/statements/create-credential-transact-sql

/* 将其保留为历史背景 */ 参考“MSDN:SQL Server 备份到 URL 最佳实践和故障排除”

我找到了你的帖子,因为我也遇到了 50 个错误,即使读过之后“MSDN:教程:将 Microsoft Azure Blob 存储服务与 SQL Server 2016 数据库结合使用”

我认为你应该访问http://portal.azure.com然后登录到您的 Azure 订阅。您可以在屏幕右上角将“目录”从试用版更改为即用即付...

顺便说一句,我认为您可能需要 SQL 2016 中的共享访问签名,因为当我将 SQL 2012 脚本 {使用凭据 Y 备份 DB X} 复制到 2016 实例时,它失败了(禁止)尽管他们说您可以使用凭据...

此外,操作系统错误 50(不支持请求)让我认为服务器 2012 r2 可能是错误...目前在我的笔记本电脑(Windows 8)上测试出现同样的错误。

祝你好运。

答案2

对我来说,除了 SAS 令牌之外,其他一切都是正确的。 SAS 令牌不应以“?”问号字符开头。

SAS 令牌示例(凭据机密/密码)

sv=2017-01-02&ss=abcd&srt=abc&sp=rwdlacup&se=2027-09-11T05:00:00Z&st=2017-09-11T04:55:00Z&spr=https&sig=randomcharactersandnumbers

答案3

我遇到了类似的问题 ( Operating System error 50 (The request is not supported)),对我来说,使用存储帐户身份和访问密钥(而不是 SAS 密钥)很有帮助。并非在所有情况下都是最佳选择,但解决了我的问题。

https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/sql-server-backup-to-url#credential

创建凭证:

IF NOT EXISTS  
(SELECT * FROM sys.credentials   
WHERE name = '<mycredentialname>')  
CREATE CREDENTIAL [<mycredentialname>] WITH IDENTITY = '<mystorageaccountname>'  
,SECRET = '<mystorageaccountaccesskey>';

使用凭证:

BACKUP DATABASE AdventureWorks2016  
TO URL = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>/AdventureWorks2016.bak'   
      WITH CREDENTIAL = '<mycredentialname>'   
     ,COMPRESSION  
     ,STATS = 5;  
GO   

相关内容