Restore
SQL Server 從 Azure 儲存 Blob 容器上的備份文件還原(使用 SAS 令牌)
我已經在 azure blob 儲存容器中設置了一個 SAS 令牌。它目前是有效的,正如 windows cmd.exe 中的此命令有效的事實所證明的那樣:
azcopy list "https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/path/to/file.BAK?<SAS token>"
並作為輸出返回:
INFO: ; Content Length: 7.58 GiB
現在,如果我通過 SSMS 在 SQL Server 中發出以下命令(伺服器在發出 azcopy 命令的同一台機器上本地執行,並且 <>-brackets 中的值與上面相同。請注意,我最後沒有“/”容器名稱和令牌中沒有“?”,遵循 Microsoft 文件的建議):
CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>] -- this name must match the container path, start with https and must not contain a forward slash at the end WITH IDENTITY='SHARED ACCESS SIGNATURE' -- this is a mandatory string and should not be changed , SECRET = '<SAS token>'; GO RESTORE HEADERONLY FROM URL = N'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/path/to/file.BAK';
RESTORE 命令後出現錯誤:
Msg 3201, Level 16, State 2, Line 28 Cannot open backup device 'https://<mystorageaccountname>.blob.core.windows.net/<mystorageaccountcontainername>/path/to/file.BAK'. Operating system error 3(The system cannot find the path specified.). Msg 3013, Level 16, State 1, Line 28 RESTORE HEADERONLY is terminating abnormally.
我檢查並仔細檢查了路徑中沒有錯字,並且標記是相同的。
<SAS token>
是格式sv=<date>&st=<datetime>&se=<datetime>&sr=c&sp=rl&sig=<sig_token>
最後一點,如果我在 RESTORE 之前 DROP 憑證,我會收到不同的錯誤消息
Operating system error 86(The specified network password is not correct.).
所以看起來令牌有效……
我會很感激一些關於這裡可能出現問題的建議,或者我如何解決它的行為與 azcopy 實用程序不同的原因。
編輯 1:已對儲存文件路徑的區分大小寫進行了評論。
<mystorageaccountname>
並且<mystorageaccountcontainername>
在 Microsoft Azure 儲存資源管理器以及 azcopy 和 SQL 命令中都是小寫。
path/to/file.BAK
是混合大小寫,在 Microsoft Azure 儲存資源管理器以及 azcopy 和 SQL 命令中也是相同的。
我找到了問題的原因。
要使用 azcopy 列出文件,只需在 SAS 設置中分配讀取權限即可。
但是,為了執行諸如 之類的命令
RESTORE HEADERONLY
,您需要在 SAS 設置中同時具有讀取和寫入權限。在創建具有讀寫屬性的新 SAS 令牌後,它工作了。