共用方式為


Azure 中的 SQL Server 數據檔

Azure 中的 SQL Server 資料檔案可讓您直接支援儲存為 Azure Blob 的 SQL Server 資料庫檔案。 它可讓您建立資料庫,該資料庫可在內部部署的 SQL Server 上執行,或在 Azure 中的虛擬機上執行,並且使用 Azure Blob 儲存體中專用於數據的儲存位置。 這項增強功能特別簡化了使用卸除和附加操作在電腦之間移動資料庫的過程。 此外,它可讓您從 Azure 記憶體還原,為您的資料庫備份檔提供替代儲存位置。 因此,它透過提供數據虛擬化、數據移動、安全性和可用性的許多優點,以及高可用性和彈性調整的簡單低成本維護,實現了數個混合解決方案。

本主題介紹將 SQL Server 數據檔儲存在 Azure 記憶體服務中的核心概念和考慮。

如需如何使用這項新功能的實際實際作體驗,請參閱 教學課程:Azure 記憶體服務中的 SQL Server 數據檔

下圖示範這項增強功能可讓您將 SQL Server 資料庫檔案儲存為 Azure 記憶體中的 Azure Blob,而不論您的伺服器位於何處。

SQL Server 與 Azure 記憶體的整合

在 Azure 中使用 SQL Server 數據文件的優點

  • 簡單且快速的移轉優點: 此功能可藉由一次在內部部署機器之間以及內部部署和雲端環境之間移動一個資料庫,而不需要變更任何應用程式,即可簡化移轉程式。 因此,它支援累加移轉,同時維護現有的內部部署基礎結構。 此外,當應用程式需要在內部部署環境中的多個位置執行時,存取集中式數據記憶體可簡化應用程式邏輯。 在某些情況下,您可能需要在地理位置分散的位置快速設定計算機中心,以從許多不同的來源收集數據。 使用這項新的增強功能,而不是將數據從一個位置移至另一個位置,您可以將許多資料庫儲存為 Azure Blob,然後執行 Transact-SQL 腳本,在本機機器或虛擬機上建立資料庫。

  • 成本和無限制的記憶體優點: 這項功能可讓您在利用內部部署計算資源的同時,在 Azure 中擁有無限的異地記憶體。 當您使用 Azure 作為記憶體位置時,您可以輕鬆地將焦點放在應用程式邏輯上,而不需要硬體管理的額外負荷。 如果您遺失內部部署計算節點,您可以設定新的節點,而不需要任何數據移動。

  • 高可用性和災害復原優點: 在 Azure 中使用 SQL Server 資料檔功能可能會簡化高可用性和災害復原解決方案。 例如,如果 Azure 中的虛擬機或 SQL Server 實例當機,只要重新建立 Azure Blob 的連結,就可以在新機器中重新建立資料庫。

  • 安全性優點: 這項新的增強功能可讓您將計算實例與記憶體實例分開。 您只能有完全加密的資料庫,而且只會在計算實例上發生解密,但不能發生在記憶體實例中。 換句話說,使用這項新的增強功能,您可以使用透明數據加密 (TDE) 憑證來加密公用雲端中的所有數據,這些憑證會實際與數據分開。 TDE 金鑰可以儲存在 master 資料庫中,該資料庫存放於具實體安全性的內部部署機器上,並在本機進行備份。 您可以使用這些本機金鑰來加密位於 Azure 記憶體中的數據。 如果您的雲端記憶體帳戶認證遭竊,您的數據仍會保持安全,因為 TDE 憑證一律位於內部部署。

概念和需求

Azure 記憶體概念

在 Azure 中使用 SQL Server 資料檔功能時,您必須在 Azure 中建立記憶體帳戶和容器。 然後,您必須建立 SQL Server 認證,其中包含容器原則的相關信息,以及存取容器所需的共用存取簽章。

在 Azure 中,記憶體帳戶代表存取 Blob 之命名空間的最高層級。 記憶體帳戶可以包含無限數量的容器,只要其總大小低於 500 TB 即可。 如需記憶體限制的最新資訊,請參閱 Azure 訂用帳戶和服務限制、配額和條件約束。 容器會提供一組 Blob 的群組。 所有 Blob 都必須位於容器中。 帳戶可以包含無限數量的容器。 同樣地,容器也可以儲存無限制數目的 Blob。 有兩種類型的 Blob 可以儲存在 Azure 儲存服務中:區塊 Blob 和頁面 Blob。 這項新功能使用 Page Blob,其大小最多可達 1TB,而且在檔案中的位元組範圍經常修改時會更有效率。 您可以使用下列 URL 格式存取 Blob: http://storageaccount.blob.core.windows.net/<container>/<blob>

Azure 計費考量

在決策制定和規劃程式中,估計使用 Azure 服務的成本很重要。 在 Azure 記憶體中儲存 SQL Server 資料檔時,您需要支付與記憶體和交易相關聯的成本。 此外,在 Azure 記憶體中實作 SQL Server 數據檔功能需要隱含地每 45 到 60 秒更新 Blob 租用一次。 這也會導致每個資料庫檔案的交易成本,例如.mdf或 .ldf。 根據我們的估計,根據目前的定價模式,兩個資料庫檔案(.mdf和 .ldf)續約租用的成本約為每月2美分。 建議您使用 Azure 定價 頁面上的信息,協助預估與 Azure 記憶體和 Azure 虛擬機使用相關聯的每月成本。

SQL Server 概念

使用此新的增強功能時,您必須執行下列動作:

  • 您必須在容器上建立原則,併產生共用存取簽章 (SAS) 密鑰。

  • 針對數據或記錄檔所使用的每個容器,您必須建立名稱符合容器路徑的 SQL Server 認證。

  • 您必須將 Azure 記憶體容器、其相關聯的原則名稱和 SAS 金鑰的相關信息儲存在 SQL Server 認證存放區中。

下列範例假設已建立 Azure 儲存容器,並已使用讀取、寫入、列出、權限建立原則。 在容器上建立原則會產生安全 SAS 金鑰,以在記憶體中保持未加密,而且 SQL Server 需要此金鑰來存取容器中的 Blob 檔案。 在下列代碼段中,將 'your SAS key' 替換為類似下列的項目:'sr=c&si=<MYPOLICYNAME>&sig=<THESHAREDACCESSSIGNATURE>'。 如需詳細資訊,請參閱 建立和使用共用存取簽章

-- Create a credential  
CREATE CREDENTIAL [https://testdb.blob.core.windows.net/data]  
WITH IDENTITY='SHARED ACCESS SIGNATURE',  
SECRET = 'your SAS key'  
  
-- Create database with data and log files in Azure container.  
CREATE DATABASE testdb   
ON  
( NAME = testdb_dat,  
    FILENAME = 'https://testdb.blob.core.windows.net/data/TestData.mdf' )  
 LOG ON  
( NAME = testdb_log,  
    FILENAME =  'https://testdb.blob.core.windows.net/data/TestLog.ldf')

這很重要

如果容器中有任何對資料檔案的作用中的參照,嘗試刪除對應的 SQL Server 認證會失敗。

安全

以下是在 Azure 記憶體中儲存 SQL Server 資料檔時的安全性考慮和需求。

  • 建立 Azure Blob 記憶體服務的容器時,建議您設定私人的存取權。 當您設定私人存取權時,Azure 帳戶擁有者只能讀取容器和 Blob 數據。

  • 在 Azure 記憶體中儲存 SQL Server 資料庫檔案時,您必須使用共用存取簽章,該 URI 會授與容器、Blob、佇列和數據表的限制存取許可權。 藉由使用共用存取簽章,您可以讓 SQL Server 存取記憶體帳戶中的資源,而不需共用您的 Azure 記憶體帳戶密鑰。

  • 此外,建議您繼續為您的資料庫實作傳統的內部部署安全性做法。

安裝必要條件

在 Azure 中儲存 SQL Server 資料檔時,安裝必要條件如下。

  • SQL Server 內部部署: SQL Server 2014 版本包含這項功能。 若要瞭解如何下載 SQL Server 2014,請參閱 SQL Server 2014

  • 在 Azure 虛擬機中執行的 SQL Server:如果您要在 Azure 虛擬機上安裝 SQL Server,請安裝 SQL Server 2014,或更新現有的實例。 同樣地,您也可以使用 SQL Server 2014 平臺映射在 Azure 中建立新的虛擬機。 若要瞭解如何下載 SQL Server 2014,請參閱 SQL Server 2014

局限性

  • 在此功能的目前版本中,不支援將資料儲存 FileStream 在 Azure 記憶體中。 您可以將數據儲存 Filestream 在 Azure 記憶體整合的本機資料庫中,但您無法使用 Azure 記憶體在機器之間移動 Filestream 數據。 針對 FileStream 數據,建議您繼續使用傳統技術,在不同的機器之間移動與 Filestream 相關聯的檔案(.mdf.ldf)。

  • 目前,這項新的增強功能不支援同時存取 Azure 記憶體中相同資料庫檔案的多個 SQL Server 實例。 如果 ServerA 在線且啟用了資料庫檔案,而 ServerB 意外啟動,並且也有指向相同資料檔案的資料庫,則第二台伺服器將會因錯誤碼5120 無法開啟實體檔案「%.*ls」。操作系統錯誤 %d:「%ls」無法啟動資料庫。

  • 只有.mdf、.ldf 和 .ndf 檔案可以使用 Azure 中的 SQL Server 數據檔功能,儲存在 Azure 記憶體中。

  • 在 Azure 功能中使用 SQL Server 資料檔時,不支援記憶體帳戶的異地複寫。 如果記憶體帳戶是異地復寫且發生異地故障轉移,可能會發生資料庫損毀。

  • 每個 Blob 的大小最多可達 1 TB。 這會針對可儲存在 Azure 記憶體中的個別資料庫數據和記錄檔建立上限。

  • 無法使用 Azure 記憶體功能中的 SQL Server 資料檔,將 In-Memory OLTP 資料儲存在 Azure Blob 中。 這是因為 In-Memory OLTP 相依於 FileStream 此功能的目前版本中,不支援將資料儲存 FileStream 在 Azure 記憶體中。

  • 在 Azure 功能中使用 SQL Server 資料檔時,SQL Server 會使用資料庫中設定 master 的定序來執行所有 URL 或檔案路徑比較。

  • AlwaysOn Availability Groups 只要您未將新的資料庫檔案新增至主資料庫,就受到支援。 如果資料庫作業需要在主資料庫中建立新的檔案,請先停用次要節點中的 AlwaysOn 可用性群組。 然後,在主資料庫上執行資料庫作業,並在主要節點上備份資料庫。 接下來,將資料庫還原至次要節點,並在次要節點中啟用AlwaysOn可用性群組。 請注意,在 Azure 中使用 SQL Server 數據檔功能時,不支援 AlwaysOn 故障轉移叢集實例。

  • 在正常作業期間,SQL Server 會使用暫存租用來保留 Blob 以供記憶體使用,每 45 到 60 秒更新一次 Blob 租用。 如果伺服器當機,而另一個設定為使用相同 Blob 的 SQL Server 實例已啟動,則新實例將最多等候 60 秒,以便 Blob 的現有租用期限到期。 如果您想要將資料庫附加至另一個實例,而且您無法等候租用在 60 秒內到期,您可以明確中斷 Blob 上的租用,以避免附加作業發生任何失敗。

工具和程式設計參考支援

本節說明在 Azure 記憶體中儲存 SQL Server 數據檔時,可以使用哪些工具和程式設計參考連結庫。

PowerShell 支援

在 SQL Server 2014 中,您可以藉由參考 Blob 儲存體 URL 路徑,而不是檔案路徑,使用 PowerShell Cmdlet 將 SQL Server 數據檔儲存在 Azure Blob 記憶體服務中。 您可以使用下列 URL 格式: http://storageaccount.blob.core.windows.net/<container>/<blob> 來存取 Blob。

SQL Server 物件與性能計數器支援

從 SQL Server 2014 開始,已新增新的 SQL Server 物件,以用於 Azure 記憶體中的 SQL Server 數據檔功能。 新的 SQL Server 物件稱為 SQL Server,HTTP_STORAGE_OBJECT ,而且系統監視器可用來監視使用 Azure 記憶體執行 SQL Server 時的活動。

SQL Server Management Studio 支援

SQL Server Management Studio 可讓您透過數個對話框視窗使用此功能。 例如,您可以輸入記憶體容器的 URL 路徑,例如 https://teststorageaccnt.blob.core.windows.net/testcontainer/ 數個對話框視窗中的 Path ,例如 [新增資料庫]、[ 附加資料庫] 和 [ 還原資料庫]。 如需詳細資訊,請參閱 教學課程:Azure 記憶體服務中的 SQL Server 數據檔

SQL Server 管理物件支援

在 Azure 功能中使用 SQL Server 資料檔時,支援所有 SQL Server 管理物件 (SMO)。 如果 SMO 物件需要檔案路徑,請使用 BLOB URL 格式,而不是本機檔案路徑,例如 https://teststorageaccnt.blob.core.windows.net/testcontainer/。 如需 SQL Server 管理物件 (SMO) 的詳細資訊,請參閱《SQL Server 在線叢書》中的 SQL Server 管理物件 (SMO) 程式設計指南

Transact-SQL 支援

這項新功能在 Transact-SQL 表面積中引入了下列變更:

  • 新增的 int 資料行credential_id 位於 sys.master_files 系統檢視中。 credential_id欄位用於讓啟用 Azure 儲存體的数据檔案交叉參考回 sys.credentials,以檢索為其創建的憑證。 您可以使用它進行疑難解答,例如,當有資料庫檔案使用它時,就無法刪除認證。

針對 Azure 中的 SQL Server 數據文件進行疑難解答

若要避免因不支援的功能或限制而發生的錯誤,請先檢閱 限制

使用 Azure 記憶體中的 SQL Server 資料檔案功能時,您可能會得到的錯誤清單如下所示。

驗證錯誤

  • 無法卸除認證 『%.*ls』,因為它是由使用中的資料庫檔案使用。
    解決方案:當您嘗試卸除 Azure 記憶體中作用中資料庫檔案仍在使用的認證時,可能會看到此錯誤。 若要卸除憑證,首先您必須刪除與此資料庫檔案相關的 Blob。 若要刪除具有作用中租用的 Blob,您必須先中斷租用。

  • 尚未正確在容器上建立共用存取簽章。
    解決方案:請確定您已正確在容器上建立共用存取簽章。 請檢閱 教學課程:Azure 記憶體服務中 SQL Server 數據檔第 2 課所提供的指示。

  • SQL Server 認證尚未正確建立。
    解決方案:請確定您已針對 [ 身分識別 ] 字段使用 「共用存取簽章」,並正確建立秘密。 請檢閱 教學課程:Azure 記憶體服務中 SQL Server 數據檔第 3 課所提供的指示。

租用 Blob 錯誤:

  • 在另一個使用相同 Blob 檔案的實例崩潰後,嘗試啟動 SQL Server 時發生錯誤。 解決方案:在正常作業期間,SQL Server 會使用暫存租用來保留 Blob 以供記憶體使用,每 45 到 60 秒更新一次 Blob 租用。 當伺服器當機時,如果另一個設定為使用相同 Blob 的 SQL Server 實例已啟動,新的實例將會等待最多 60 秒,以等待 Blob 上的現有租約過期。 如果您想要將資料庫連接至另一個實例,而無法等候租約在 60 秒內到期,您可以明確中斷 Blob 上的租約,以避免連接作業發生任何失敗。

資料庫錯誤

  1. 建立資料庫時發生錯誤
    解決方案:檢閱 教學課程:Azure 記憶體服務中 SQL Server 數據檔第 4 課所提供的指示。

  2. 執行 Alter 語句時發生錯誤
    解決方案:請務必在資料庫上線時執行 Alter Database 語句。 將數據檔複製到 Azure 記憶體時,一律建立分頁 Blob 而非區塊 Blob。 否則,ALTER Database 將會失敗。 請檢閱 教學課程:Azure 記憶體服務中 SQL Server 數據檔第 7 課所提供的指示。

  3. 錯誤碼 5120 無法開啟實體檔案 「%.*ls」。。 作業系統錯誤 %d:"%ls"
    解決方案:目前,這項新的增強功能不支援一個以上的 SQL Server 實例同時存取 Azure 記憶體中的相同資料庫檔案。 如果 ServerA 在線並使用活動資料庫檔案,而 ServerB 被意外啟動,且它也有指向相同資料檔案的資料庫,則第二台伺服器將無法啟動該資料庫,錯誤碼為 5120:無法開啟實體檔案「%.*ls」。作業系統錯誤 %d:「%ls」。

    若要解決此問題,請先判斷您是否需要 ServerA 存取 Azure 記憶體中的資料庫檔案。 如果沒有,只要移除 ServerA 與 Azure 記憶體中的資料庫檔案之間的任何連線即可。 若要這樣做,請遵循下列步驟:

    1. 使用 ALTER Database 語句,將伺服器 A 的檔案路徑設定為本機資料夾。

    2. 在伺服器 A 中離線設定資料庫。

    3. 然後,將資料庫檔案從 Azure 記憶體複製到伺服器 A 中的本機資料夾。這可確保 ServerA 在本機仍有資料庫的複本。

    4. 設定資料庫為線上。

另請參閱

教學課程:Azure 記憶體服務中的 SQL Server 數據檔