如何利用SQL Server 2014將資料庫檔案存放於Microsoft Azure Storage(上)
說明
SQL Server 2014新增了許多跟Microsoft Azure整合的新功能,其中一個就是支援SQL Server 2014可以把資料庫檔案,包含MDF與LDF放到Microsoft Azure Storage(以下簡稱Storage)之中,藉以提升SQL Server 2014的延展性及可攜性。有關延展性的部分,您可以在部署Microsoft Azure Virtual Machines(以下簡稱VM)中的SQL Server時,不需要建立資料庫檔案所需使用的虛擬硬碟,而直接將它放在Storage(建議資料庫檔案大小不要超過1TB),在這情況下您就可以忽略VM有關虛擬硬碟檔案數量的限制,並且透過存放在Storage來提升存取資料庫檔案的IOPS。
此外,這個新功能也帶來更多可攜性上面的提升,您可以將您VM中的資料庫檔案卸離,然後在其他VM中直接將資料庫檔案附加上去,而不需要像過去企業內部部署SQL Server時,跨機器要搬移資料庫檔案時,還需要大費周章的將資料庫檔案透過儲存裝置或是網路傳輸到另外一台機器上,一旦資料庫檔案非常大時,例如有幾百G,儲存在Storage上的資料庫檔案就可以幫您節省許多搬移檔案的等待時間。
注意事項
在開始將資料庫檔案放到Storage前,有下列幾點建議:
-
將Storage和VM放在相同的同質群組:同質群組(Affinity Group)是必須一起工作之服務的分組方式,當您部署這些服務時,Microsoft Azure會在盡量靠近彼此的資料中心找到這些服務,目的在於減少延遲並增加效能,同時可能會降低成本。因此建議您若是在VM中使用SQL Server,然後又希望可以把資料庫檔案放在Storage,那麼建議您可以將Storage和VM放在相同的同質群組。
接下來請依照下列步驟來將您的資料庫檔案存放到Storage,在開始之前請先至Microsoft Azure管理入口網站建立Storage,筆者假設您已經知道怎麼建立Storage。
安裝Azure Storage Explorer,並產生產生共用存取簽章 (SAS) 金鑰
首先請到CodePlex下載並安裝Azure Storage Explorer,安裝完畢之後開啟Azure Storage Explorer您會看到如下圖的畫面,接著點選Add Account。
在Add Storage Account視窗中輸入下列資訊,請於Storage account name欄位中輸入儲存體帳戶名稱 ,Storage account key欄位中輸入主要存取金鑰 ,建議勾選Use HTTPS,最後按Add Storage Account。
相關資訊輸入無誤您將看到如下圖的畫面,Azure Storage Explorer會列出您的Storage Account中的所有容器以及容器內的檔案。接下來筆者示範建立一個新的容器來存放資料庫檔案,請點選New按鈕。
在New Container視窗中,於Container name欄位輸入您的容器名稱,容器名稱長度為3至63個字元且只能使用小寫,預設存取權限為Private,請保留預設值接著按Create Container來建立容器。
容器建立完畢之後,請確認您點選您所建立的容器名稱後,接著按Security來建立Shared Access Policies並產生共用存取簽章 (SAS) 金鑰。
接下來請點選Blog&Container Security視窗中的Shared Access Policies頁籤,然後按New來新增Policy,於Policy Name欄位中輸入您的Policy名稱,並設定相關權限及有效期限,其中Read和Wirte還有List權限是一定要勾選,Delete則取決於您會不會需不需要刪除資料庫,輸入完畢後請按Save Policies,請在儲存成功後按Close關閉Blog&Container Security視窗。
Shared Access Policies建立成功後,請先關閉Blob&Container Security視窗,接著重新選取您要放置資料庫檔案的容器,再按一次Security。
此時請在Blog&Container Security視窗中點選Shared Access Signatures頁籤,選擇上一步驟建立的Policy(本文的範例是MyPolicy)並按下Generate Signature,您就會在Signature欄位中看到您的共用存取簽章金鑰,請按Copy to Clipboard來將之複製到剪貼簿。
建立認證(CREDENTIAL)
在上一節介紹如何使用Azure Strage Explorer來建立共用存取簽章,接下來您就可以利用它來建立連接Storage所需要的憑證。您可以使用下列T-SQL來建立憑證,但是特別注意:
- CREDENTIAL必須為您的容器的URL。
- IDENTITY必須輸入SHARED ACCESS SIGNATURE,大小寫不拘。
- 原始Signature包含容器的URL,設定Secret時並不需要,只需後面的參數即可。
-- 建立認證
CREATE CREDENTIAL [https://sqlhastorage.blob.core.windows.net/dbfiles] --必須設定為容器的URL
WITH IDENTITY='SHARED ACCESS SIGNATURE', --固定字串,必須輸入SHARED ACCESS SIGNATURE
SECRET = 'sr=c&si=MyPolicy&sig=yJKpYsYFcnNGEmy09YTIHeggoukKOAHpJ3E17OMBK38%3D'
--原始Signature包含Storage的URL,設定Secret時並不需要,只需保留[https://sqlhastorage.blob.core.windows.net/dbfiles?]之後的字串
--https://sqlhastorage.blob.core.windows.net/dbfiles?sr=c&si=MyPolicy&sig=yJKpYsYFcnNGEmy09YTIHeggoukKOAHpJ3E17OMBK38%3D
在Storage中建立資料庫
最後您就可以透過SSMS來新增資料庫,只要在路徑的欄位中將原本的本機路徑取代為容器的URL即可。
或是您也可以利用下列的T-SQL來建立資料庫。
CREATE DATABASE [testdb]
CONTAINMENT = NONE
ON PRIMARY
( NAME = N'testdb', FILENAME = N'https://sqlhastorage.blob.core.windows.net/dbfiles/testdb.mdf'),
( NAME = N'testdb1', FILENAME = N'https://sqlhastorage.blob.core.windows.net/dbfiles/testdb.ndf')
LOG ON
( NAME = N'testdb_log', FILENAME = N'https://sqlhastorage.blob.core.windows.net/dbfiles/testdb.ldf')
GO
資料庫建立成功後,您可以在物件總管裡連接Storage,就可以看到資料庫所使用的資料庫檔案確實被建立在您所指定的容器之中。
而在Microsoft Azure管理入口網站中您可以看到資料庫檔案的租用狀態呈現已鎖定。
跟過去您將資料庫檔案放在企業內部伺服器一樣,放在Storage中的檔案也會被鎖定,不會讓它隨便被刪除,因此若您在Microsoft Azure管理入口網站中要刪除正在使用的資料庫檔案,您將會看到類似下圖的錯誤訊息。
如此一來,您就不用擔心放在Storage中的資料庫檔案被不小心刪除。
參考資料
Windows Azure 中的 SQL Server 資料檔案
Create a SQL Server 2014 Database directly on Azure Blob storage with SQLXI
SQL Server 2014 Management Topic I-directly create SQL Server database on Azure Storage
Scaling-out SQL Server disks and data files on Windows Azure Virtual Machines…a real-world example
Performance Guidance for SQL Server in Windows Azure Virtual Machines
教學課程:Windows Azure 儲存體服務中的 SQL Server 資料檔案
SQL Server Backups and Restores Directly with Windows Azure Blob Storage Service