我最近建立了一个带有 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,然后单击添加。当我这样做时,我收到以下提示:没有注册的容器(我也没有找到任何有关如何注册容器的详细信息),因此我单击“新建容器”,弹出一个
Connect to a Microsoft Subscription
对话框。我使用 Azure 帐户登录,看到两个订阅(免费试用版,已过期,以及按用量付费,这是正确的订阅),选择按用量付费,然后当我选择我的存储帐户时,对话框关闭,出现“索引超出范围”错误,这意味着找不到任何容器。以下是相关屏幕截图:
我不知道接下来该去哪里。有什么想法吗?
答案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 密钥)很有帮助。并非在所有情况下都是最佳选择,但解决了我的问题。
创建凭证:
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