Microsoft Azure 中的 SQL Server 資料檔案

適用於:SQL Server

A decorative image of data files on Azure.

Microsoft Azure 中的 SQL Server 資料檔案可讓您原生支援存放為 Blob 的 SQL Server 資料庫檔案。 您可在執行於內部部署或 Microsoft Azure 虛擬機器的 SQL Server 中輕鬆建立資料庫,並為 Microsoft Azure Blob 儲存體的資料設定專用的儲存位置。 它也簡化了在機器之間移動資料庫的程式。 您可從一部電腦中斷連結資料庫,並將其連結至另一部電腦。 此外,它可讓您在 Microsoft Azure 儲存體中來回還原資料庫備份檔案,來提供其替代儲存位置。 因此,可透過若干混合式解決方案,為資料虛擬化、資料移動、安全性和可用性提供若干優勢,以及以較低成本和簡易維護實現高可用性和彈性擴展。

重要

不建議在 Azure Blob 儲存體中存放系統資料庫,並且不受支援。

本文介紹將 SQL Server 資料檔案存放在 Microsoft Azure 儲存體服務中的核心概念和考量。

如需如何使用這項功能的實際實作體驗,請參閱教學課程:搭配 SQL Server 資料庫使用 Microsoft Azure Blob 儲存體

為什麼使用 Microsoft Azure 中的 SQL Server 資料檔案?

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

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

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

  • 安全性優勢:在 Azure 中使用 SQL Server 資料檔案,您可將計算執行個體與記憶體執行個體分開。 只能有完全加密的資料庫,而且只會在計算執行個體上發生解密,而不能在儲存體執行個體中發生。 換句話說,您可使用透明資料加密 (TDE) 憑證來加密公用雲端中的所有資料,這些憑證會在實體上與資料分開。 TDE 金鑰可存放在 master 資料庫中,這會本機存放在實體安全內部部署電腦,並在本機備份。 您可使用這些本機金鑰來加密位於 Microsoft Azure 儲存體中的資料。 如果您的雲端儲存體帳戶認證遭竊,您的資料仍會保持安全,因為 TDE 憑證一律位於內部部署。

  • 快照備份:此功能可讓您使用 Azure 快照,為使用 Azure Blob 儲存體存放的資料庫檔案,提供近乎即時的備份及更迅速的還原。 這項功能可簡化備份與還原原則。 如需詳細資訊,請參閱 Azure 中資料庫檔案的檔案快照集備份

概念和需求

Azure 磁碟與整個企業的商務持續性和災害復原解決方案相容。 如果您將資料庫直接存放在 Blob 上,或存放在 Azure 進階版檔案中,資料不會自動與您的 VM 建立關聯,以便用於基礎結構、管理和監視。

將資料庫檔案放在分頁 Blob 是比使用 Azure 磁碟更進階的功能,其簡單且方便使用者使用。

基本指導方針是使用 Azure 磁碟,除非您有確實需要避免建立資料複本做為備份的案例,或還原為資料大小作業。 針對高可用性和災害復原,使用一般備份至 URL 或受控備份到 Blob 儲存體,也比檔案快照備份更有用,因為您可取得生命週期管理、多區域支援、虛刪除,以及備份 Blob 儲存體的所有其他功能。

Azure 儲存體概念

在 Azure 中使用 SQL Server 資料檔案功能時,您需要在 Azure 中建立儲存體帳戶和容器。 然後,您需要建立 SQL Server 認證,其中包括容器原則的相關資訊,以及存取容器所需的共用存取簽章。

Microsoft Azure 中,Azure 儲存體帳戶代表存取 Blob 之命名空間的最高層級。 只要儲存體帳戶的大小低於記憶體限制,儲存體帳戶即可包含不限數量的容器。 如需儲存空間限制的最新資訊,請參閱 Azure 訂用帳戶和服務限制、配額及條件約束。 容器會提供一組 Blob 的群組。 所有 Blob 都必須位於容器中。 帳戶可包含不限數目的容器。 同樣,容器可存放不限數目的 Blob。

Azure 儲存體可存放的 Blob 類型有兩種:區塊和分頁 Blob。 這項功能會使用分頁 Blob,當檔案中的位元組範圍經常修改時,會更有效率。 您可使用下列 URL 格式存取 Blob:https://storageaccount.blob.core.windows.net/<container>/<blob>

注意

無法針對 SQL Server 資料檔案使用區塊 Blob。 使用分頁 Blob

Azure 計費考量

在決策制定和規劃程式中,估計使用 Azure 服務的成本很重要。 將 SQL Server 資料檔案存放在 Azure 儲存體時,您需要支付與儲存體和交易關聯的成本。 此外,Azure 儲存體功能中的 SQL Server 資料檔案實作,需要隱含地每隔 45 到 60 秒更新 Blob 租賃。 這也會導致每個資料庫檔案的交易成本,例如.mdf 或 .ldf。 使用 Azure 定價頁面上的資訊,協助預估與使用 Azure 儲存體 和 Azure 虛擬機器關聯的每月成本。

SQL Server 概念

針對 SQL Server 資料檔案使用 Azure 分頁 Blob:

  • 在容器上建立原則,同時產生共用存取簽章 (SAS)。

  • 針對資料或記錄檔使用的每個容器,建立名稱符合容器路徑的 SQL Server 認證。

  • 在 SQL Server 認證存放區中存放 Azure 儲存體容器的相關資訊、其關聯的原則名稱,以及 SAS 金鑰。

下列範例假設已建立 Azure 儲存體容器,並已建立具有讀取、寫入和清單權限的原則。 在容器上建立原則會產生 SAS 金鑰,在記憶體未加密時可確保安全,而且 SQL Server 需要此金鑰才能存取容器中的 Blob 檔案。

在下列程式碼片段中,以 SAS 金鑰取代 '<your SAS key>'。 SAS 金鑰如下所示:'sr=c&si=<MYPOLICYNAME>&sig=<THESHAREDACCESSSIGNATURE>'

CREATE CREDENTIAL [https://testdb.blob.core.windows.net/data]  
WITH IDENTITY='SHARED ACCESS SIGNATURE',  
SECRET = '<your SAS key>'  
  
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 儲存體時的安全性考量和需求。

  • 建立 Azure Blob 儲存體的容器時,建議您將存取權設為 [私人]。 當您設定私人存取權時,Azure 帳戶擁有者只能讀取容器和 Blob 資料。

  • 將 SQL Server 資料庫檔案存放在 Azure 儲存體時,您需要使用共用存取簽章,這是授與容器、Blob、佇列和資料表限制存取權限的 URI。 藉由使用共用存取簽章,您可讓 SQL Server 存取儲存體帳戶中的資源,而無需共用您的 Azure 儲存體帳戶金鑰。

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

安裝先決條件

以下是在 Azure 中存放 SQL Server 資料檔案時的安裝必要條件。

  • SQL Server 內部部署: SQL Server 2016 和更新版本包括這項功能。 若要了解如何下載最新版本的 SQL Server,請參閱 SQL Server

  • 在 Azure 虛擬機器中執行的 SQL Server:如果您要在 Azure 虛擬機器上安裝 SQL Server,請安裝 SQL Server 2016,或更新現有的執行個體。 同樣地,您也可以使用 SQL Server 2016 平台映像,在 Azure 中建立新的虛擬機器。

限制

  • 由於 SQL Server 工作負載的效能特徵,SQL Server 資料檔案會實作為 Azure Blob 儲存體 中的分頁 Blob。 不支援其他類型的 Blob 儲存體,例如區塊 Blob 或 Azure Data Lake Storage

  • 在此功能的目前版本中,不支援將 FileStream 資料存放在 Azure 儲存體中。 您可將 FileStream 資料存放在資料庫中,其中也包含存放在 Azure 儲存體中的資料檔案,但所有 FileStream 資料檔案都必須存放在本機存放區上。 由於 FileStream 資料必須位於本機存放區,無法使用 Azure 儲存體 在機器之間移動,因此建議您繼續使用傳統技術,在不同的機器之間移動與 FileStream 關聯的資料。

  • 目前,只有一個 SQL Server 執行個體可一次存取 Azure 儲存體中的指定資料庫檔案。 如果 InstanceA 上線時使用了作用中資料庫檔案,而且意外啟動 InstanceB,同時具有指向相同資料檔案的資料庫,則第二個執行個體將無法啟動資料庫,並出現錯誤碼 5120 Unable to open the physical file "%.\*ls". Operating system error %d: "%ls"

  • 使用 Azure 中的 SQL Server 資料檔案功能時,只有 .mdf、.ldf 和 .ndf 檔案可存放在 Azure 儲存體。

  • 使用 Azure 功能中的 SQL Server 資料檔案時,不支援儲存體帳戶的異地複寫。 如果儲存體帳戶為異地複寫且發生異地容錯移轉,可能會發生資料庫損毀。

  • 如需容量限制,請參閱 Blob 儲存體簡介

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

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

  • 只要您未將新的資料庫檔案新增至主要複本上的資料庫,就會支援 Always On 可用性群組。 如果資料庫作業需要在主要複本的資料庫中建立新的檔案,請先停用次要節點中的可用性群組。 然後,在資料庫上執行資料庫作業,並在主要複本中備份資料庫。 接著,在次要複本上還原資料庫。 完成之後,在次要節點中重新啟用 Always On 可用性群組。

    注意

    使用 Azure 功能中的 SQL Server 資料檔案時,不支援 Always On 容錯移轉叢集執行個體。

  • 在正常作業期間,SQL Server 會使用暫存租賃來保留 Blob 以供記憶體使用,每 45 到 60 秒更新一次 Blob 租賃。 如果伺服器當機,並且已啟動另一個設定為使用相同的 Blob 的 SQL Server 執行個體,新的執行個體將等候最多 60 秒,Blob 上的現有租賃即會過期。 如果您想要將資料庫連結至另一個執行個體,而且您無法等候租賃在 60 秒內過期,您可在 Blob 上明確釋放租賃。

工具和程式設計參考支援

本章節描述了在 Azure 儲存體中存放 SQL Server 資料檔案時,可使用哪些工具和程式設計參考程式庫。

PowerShell 支援

藉由參考 Blob 儲存體 URL 路徑而非檔案路徑,使用 PowerShell Cmdlet 將 SQL Server 資料檔案存放在 Blob 儲存體服務中。 使用下列 URL 格式存取 Blob:https://storageaccount.blob.core.windows.net/<container>/<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 可讓您透過多個對話方塊視窗來使用此功能。 例如,https://teststorageaccnt.blob.core.windows.net/testcontainer/ 聲明儲存體容器的 URL 路徑。 您可在多個對話方塊視窗中看到此 [路徑],例如 [新增資料庫]、[連結資料庫]和 [還原資料庫]。 如需詳細資訊,請參閱教學課程:搭配 SQL Server 使用 Azure Blob 儲存體

SQL Server 管理物件 (SMO) 支援

使用 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 介面區中引進了下列變更:

  • sys.master_files 系統檢視表中新增 int 資料行 credential_idcredential_id 資料行可用來讓 Azure 儲存體資料檔案針對為其建立的認證交叉參考 sys.credentials。 您可使用它進行疑難排解,例如當有資料庫檔案使用時,無法刪除認證。

Microsoft Azure 中的 SQL Server 資料檔案疑難排解

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

使用 Azure 儲存體功能中的 SQL Server 資料檔案時,取得的錯誤清單如下所示。

驗證錯誤

  • 由於作用中資料庫檔案在使用,無法卸除認證 '%.*ls'。
    解決方案:當您嘗試卸除 Azure 儲存體中作用中資料庫檔案仍在使用的認證時,可能會看到此錯誤。 若要卸除認證,必須先刪除具有此資料庫檔案的關聯 Blob。 若要刪除具有作用中租賃的 Blob,必須先釋出租賃。

  • 尚未在容器上正確建立共用存取簽章。
    解決方案:請確定您已在容器上正確建立共用存取簽章。 請檢閱教學課程:搭配 SQL Server 資料庫使用 Azure Blob 儲存體第 2 課提供的指示。

  • 尚未正確建立 SQL Server 認證。
    解決方案:請確定您已針對 [身分識別] 欄位使用「共用存取簽章」,並正確建立祕密。 請檢閱教學課程:搭配 SQL Server 資料庫使用 Azure Blob 儲存體第 3 課提供的指示。

租賃 Blob 錯誤:

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

資料庫錯誤

建立資料庫解析時發生錯誤:請檢閱教學課程:搭配 SQL Server 資料庫使用 Microsoft Azure Blob 儲存體中第 4 課提供的指示。

執行 Alter 陳述式解析時發生錯誤:請確定在資料庫上線時執行 Alter Database 陳述式。 將資料檔案複製到 Azure 儲存體時,請一律建立分頁 Blob 而非區塊 Blob。 否則,ALTER 資料庫將會失敗。 請檢閱教學課程:搭配 SQL Server 資料庫使用 Microsoft Azure Blob 儲存體第 7 課提供的指示。

錯誤碼 - 5120 無法開啟實體檔案 "%.*ls"。 作業系統錯誤 %d:"%ls"

解決方案:此功能不支援在 Azure 儲存體的相同資料庫檔案中同時存取多個 SQL Server 執行個體。 如果 InstanceA 上線時使用了作用中資料庫檔案,而且啟動 InstanceB,同時具有指向相同資料檔案的資料庫,則第二個執行個體將無法啟動資料庫,並出現錯誤碼 5120 Unable to open the physical file "%.\*ls". Operating system error %d: "%ls"

若要解決此問題,請先判定您是否需要 ServerA 來存取 Azure 儲存體中的資料庫檔案。 如果不需要,請移除 InstanceA 與 Azure 儲存體中資料庫檔案之間的任何連線。 若要這麼做,請執行下列步驟:

  1. 使用 ALTER 資料庫陳述式,將 InstanceA 的檔案路徑設定為本機資料夾。

  2. 在 InstanceA 中將資料庫設定為離線。

  3. 然後,將資料庫檔案從 Azure 儲存體複製到 InstanceA 中的本機資料夾。 這可確保 InstanceA 在本機仍有資料庫的複本。

  4. 將資料庫設定為上線。

錯誤碼 833 - I/O 要求需要 15 秒以上才能完成

此錯誤表示儲存體系統無法滿足 SQL Server 工作負載的需求。 減少應用程式層的 IO 活動,或增加儲存層的輸送量功能。 詳情請參閱錯誤 833。 如果效能問題持續發生,請考慮將檔案移至不同的儲存層,例如進階版或 UltraSSD。 如需了解 Azure VM 上的 SQL Server,請參閱最佳化記憶體效能

下一步