我最近用SQL Server 2016 Web Edition站起来了一个新的Windows Server 2012 R2实例,并试图将自动备份设置为Azure,但没有任何运气。 我先在Azure上创build了存储帐户,然后创build了共享访问签名(SAS),这就是我开始迷失的地方。 从这里,我试过了:
使用此脚本创build本地凭证:
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,右键单击数据库,selectTasks ==> Back Up.. ,更改备份到一个URL,然后单击添加。 当我这样做,我得到这个提示:
没有注册的容器存在(我也不能find任何细节如何注册一个),所以我点击新的容器,这给我一个Connect to a Microsoft Subscription对话框。 我login了我的Azure帐户,看到两个订阅(免费试用版,已过期,以及您正在使用的付费版,这是正确的),select“随您付费”,然后当我去select我的存储帐户时,对话框closures,我得到一个“索引超出范围”的错误,这意味着它找不到任何容器。 以下是相关的截图:
我不知道该从哪里出发。 有任何想法吗?
对于我来说,除了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
参考[“MSDN:SQL Server备份到URL的最佳实践和疑难解答”] h ttps://msdn.microsoft.com/en-us/library/jj919149.aspx {不能作为链接发布由于名誉限制}
我发现你的文章,因为我也感到与50错误,即使阅读“MSDN:教程:在SQL Server 2016数据库中使用Microsoft Azure Blob存储服务”
我想你应该访问http://portal.azure.com ,然后login到你的Azure订阅。 您可以在屏幕右上方的“试用”中将“目录”更改为“现收现付”(Pay-as-you-go)
顺便说一句我想你可能需要SQL 2016中的共享访问签名,因为当我复制一个SQL 2012年脚本{备份数据库X使用CREDENTIAL Y}到2016实例,它失败(FORBIDDEN)DESPITE他们说你可以使用凭据…
此外,操作系统错误50(请求不支持),导致我认为服务器2012 R2可能是错误…目前在我的笔记本电脑(Windows 8)testing产生相同的错误。
祝你好运。
我有一个类似的问题( Operating System error 50 (The request is not supported) ),对我来说,它帮助使用存储帐户身份和访问密钥,而不是SAS密钥。 在所有情况下都不是最优的,但解决了我的情况。
创build凭证:
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