適用於:SQL Server 2022 (16.x)
包含式可用性群組是支援下列項目的 Always On 可用性群組:
除了在執行個體層級之外,還在可用性群組層級管理中繼資料物件(例如使用者、登入、權限、SQL Agent 作業等)。
可用性群組 (AG) 中專門的封閉系統資料庫。
本文詳細說明封裝 AG 的相似性、差異和功能。
概觀
AG 通常由一個或多個使用者資料庫組成,這些資料庫旨在作為協調的群組運作,並會複寫到叢集中的若干節點。 當某個節點發生故障,或裝載主要副本的 SQL Server 健康狀況不良時,將整個資料庫群組作為一個單位移動到可用性群組中的另一個複本節點。 所有使用者資料庫會在可用性群組的所有複本之間保持同步,不管是以同步模式還是非同步模式運作。
這適用於只與該組使用者資料庫互動的應用程式,但當應用程式也依賴使用者、登入、權限、代理程式作業等物件時,由於這些物件會儲存在其中一個系統資料庫(master
或 msdb
),因此會帶來挑戰。 若要讓應用程式以可預測的方式順暢運作,系統管理員必須「手動」確保將這些物件的任何變更複製到可用性群組中的所有複本執行個體。 如果將新執行個體加入可用性群組(AG),可以透過簡單的程序,將資料庫自動或手動創建副本,但隨後必須在新執行個體上重新配置所有系統資料庫的自訂設定,以確保其與其他複本一致。
自主可用性群組擴充了所複寫的資料庫群組概念,加入 master
和 msdb
資料庫的相關部分。 您可以將其想成是使用自主可用性群組之應用程式的執行內容。 這個想法是,封閉的 AG 環境包含會影響依賴這些設定的應用程式的設定。 因此,自主 AG 環境會影響與應用程式互動的所有資料庫、所使用的驗證 (登入、使用者、權限)、預期執行的任何排程工作,以及影響應用程式的其他組態設定。
這與自主資料庫不同,自主資料庫會針對使用者帳戶使用不同的機制,並將使用者資訊儲存在資料庫本身。 自主資料庫只會複寫登入和使用者,而複寫登入或使用者的範圍僅限於該單一資料庫 (及其複本)。
相反地,在自主可用性群組中,您可以在可用性群組層級建立使用者、登入和權限,而這些項目會自動在可用性群組中的複本之間保持一致,並在自主可用性群組中的資料庫之間保持一致。 這可讓系統管理員不必自行手動進行這些變更。
SQL Server 2025 變更
SQL Server 2025(17.x)預覽版引進對自主可用性群組的分散式可用性群組支援。
差異
當使用封裝可用性群組時,需要考慮一些實際差異,例如封裝系統資料庫的建立,以及在封裝可用性群組層級強制連接,而不是在執行個體層級連接。
封閉系統資料庫
每個包含的可用性群組都有自己的 master
和 msdb
系統資料庫,這些資料庫是以該可用性群組的名稱命名的。 例如,在受限自動可用性群組 MyContainedAG
中,您會擁有名為 MyContainedAG_master
和 MyContainedAG_msdb
的資料庫。 這些系統資料庫會自動植入至新複本,而更新會複寫至這些資料庫,就像可用性群組中的任何其他資料庫一樣。 這意味著,當您在連線到自主可用性群組時新增物件,例如登入或代理程式作業,當自主可用性群組故障轉移到另一個執行個體時,連線到新的執行個體後,您仍能看到這些代理程式作業,並且可以使用在自主可用性群組中創建的登入進行驗證。
重要
封裝可用性群組是一種機制,用於在可用性群組的複本之間保持執行環境配置的一致性。 它們「不」代表安全性界限。 沒有任何界限能阻止受限制的可用性群組連接並存取可用性群組以外的資料庫。
新建立的封裝可用性群組中的系統資料庫不會從執行 CREATE AVAILABILITY GROUP
命令的執行個體複製。 這些初始為空白範本,沒有任何資料。 建立之後,執行個體上建立包含 AG 的系統管理員帳戶會立即複製到受包含的 AG master
中。 如此一來,系統管理員就能登入受控 AG,並完成其餘設定。
如果您在執行個體中建立本機使用者或設定,當您建立內嵌系統資料庫時,這些項目不會自動出現,而當您連線到內嵌可用性群組時,這些項目也無法看到。 一旦使用者資料庫加入封裝的可用性群組,用戶將無法存取該資料庫。 您需要在受控可用性群組環境中的系統資料庫內,手動重新建立這些項目,可以直接連接到資料庫,或使用聆聽器端點進行操作。 例外狀況是,父實例中 sysadmin 角色中的所有登入都會在建立自主 AG 期間複製到新的 AG 特定 master
資料庫。
注意
由於每個內含可用性群組的 master
資料庫是獨立的,因此在內含 AG 內容中執行的伺服器範圍活動只會持久化在內含系統資料庫中。 這包括稽核。 如果您使用 SQL Server 稽核來稽核伺服器層級活動,則必須在每個容器型 AG 中建立相同的伺服器稽核。
初始數據同步處理
包含的系統資料庫僅支援自動種子設定作為初始數據同步方式。
在 SQL Server 2022 (16.x) 和較早版本中,獨立的可用性群組在建立時必須使用自動載入。 在 SQL Server Management Studio 中使用 CREATE AVAILABILITY GROUP
語句或新增可用性群組精靈時,只包含支持自動植入的用戶資料庫。 若要使用手動植入來新增大型資料庫,JOIN ONLY
請等到建立包含的 AG 之後。
在 SQL Server 2025(17.x)預覽版中,封閉式系統資料庫一律使用自動播種,即使語句指定手動播種 CREATE AVAILABILITY GROUP
也一樣。 您可以將植入模式設為手動,以建立隔離的 AG,稍後再使用非自動植入的同步處理方法新增使用者資料庫。
還原受限系統資料庫
若要還原自主系統資料庫的備份,請遵循下列步驟:
移除所含的 AG。
在獨立 AG 的原始主要副本上還原獨立
master
和msdb
資料庫。從次要複本中移除含有的
master
和msdb
資料庫。在主要副本上,使用原始名稱和節點,搭配
WITH (CONTAINED, REUSE_SYSTEM_DATABASES)
和SEEDING_MODE = AUTOMATIC
語法重新建立所包含的 AG。
重新建立封閉的可用性群組時,請勿在語句中包含內嵌系統資料庫 CREATE AVAILABILITY GROUP
。 當指定 REUSE_SYSTEM_DATABASES
時,SQL Server 會自動偵測它們。 在 SQL Server 2022 (16.x) 和舊版中,只包含支援自動植入的小型用戶資料庫。 使用 JOIN ONLY
,在建立封裝 AG 之後,分別新增大型資料庫。
受限可用性群組作業
屬於封裝可用性群組的工作只在主要複本上執行。 它們不會在次要副本上執行。
連線 (封閉環境)
請務必區分連線到執行個體與連線到所含自主可用性群組 (AG) 有何不同。 存取自主可用性群組環境的唯一方式是連線到自主可用性群組接聽程式,或連線到位於自主可用性群組中的資料庫。
"Persist Security Info=False;
User ID=MyUser;Password=*****;
Initial Catalog=MyContainedDatabase;
Server=MyServer;"
其中 MyContainedDatabase
是包含於自主 AG 中的資料庫,您希望與它互動。
這表示您必須建立自主可用性群組的接聽程式,才能有效地使用自主可用性群組。 如果您連線到承載可用性群組的其中一個「執行個體」,而不是「透過接聽程式直接連線到可用性群組」,您將會在該執行個體的環境中,而不是在可用性群組的環境中。
例如,如果您的可用性群組 MyContainedAG
裝載於伺服器 SERVER\MSSQLSERVER
,而且您使用 MyContainedAG_Listener
連線到執行個體,而不是連線到接聽程式 SERVER\MSSQLSERVER
,您將會在執行個體的環境中,而不是在 MyContainedAG
的環境中。 這表示您會受制於執行個體系統資料庫中所包含的內容 (如使用者、權限、作業等)。 若要存取封閉可用性群組的系統資料庫中找到的內容,請改為連線至封閉可用性群組的監聽程式 (例如 MyContainedAG_Listener
)。 當您透過包含型可用性群組接聽程式連線到執行個體並與 master
互動時,實際上會被重新導向至包含型 master
資料庫(例如 MyContainedAG_master
)。
唯讀路由和封閉式可用性群組
如果您已將唯讀路由設定為將具有讀取意圖的連線重新導向至次要複本 (請參閱設定 Always On 可用性群組的唯讀路由),而且您只想要使用在自包含可用性群組中建立的登入進行連線,則還有一些其他考量:
- 您必須在連接字串中指定屬於自主可用性群組一部分的資料庫
- 連接字串中指定的使用者必須有權存取包含的 AG 中的資料庫。
例如,在下列連接字串中,其中 AdventureWorks
是具有 MyContainedListener
的自主可用性群組中的一個資料庫,而 MyUser
是在自主可用性群組中定義的使用者,且不存在於任何參與的執行個體中:
"Persist Security Info=False;
User ID=MyUser;Password=*****;
Initial Catalog=AdventureWorks;
Server=MyContainedListener;
ApplicationIntent=ReadOnly"
此連接字串可讓您連線到屬於唯讀路由設定的可讀次要副本,而且您將位於其包含的可用性群組的上下文中。
連線到實例與連線到專屬可用性群組之間的差異
- 連線到自主 AG 時,使用者只會看到自主 AG 中的資料庫,加上
tempdb
。 - 在實體層級,包含的 AG
master
與msdb
名稱為[contained AG]_master
、 與[contained AG]_msdb
。 在受控 AG 內,其名稱為master
和msdb
。 - 包含 AG
master
的資料庫識別碼在包含的 AG 內是1
,但連接到執行個體時則會有所不同。 - 雖然使用者在
sys.databases
自主 AG 連線中連線時,無法看到自主 AG 外部的資料庫,但可以透過三個部分名稱或透過USE
use 命令來存取這些資料庫。 - 透過
sp_configure
的伺服器設定可以從所包含的 AG 連線讀取,但只能從執行個體層級進行寫入。 - 透過受限制的 AG 連線,系統管理員可以執行如關閉 SQL Server 的執行個體層級作業。
- 大部分的資料庫層級、端點等級或 AG 層級操作只能從執行個體連線執行,而不是包含 AG 連線。
與其他功能的互動
使用具封裝的 AGs 搭配特定功能時,還有其他考量,而且有些功能目前不支援。
退後
在受限可用性群組中的資料庫備份程序與任何使用者資料庫的備份程序相同。 這適用於包含的 AG 用戶資料庫和包含的 AG 系統資料庫。
如果備份位置是本機的,備份檔會放在執行備份作業的伺服器上。 這表示您的備份檔可能位於不同的位置。
如果備份位置位於網路資源上,則裝載複本的所有伺服器都需要存取該資源。
分散式可用性群組
分散式可用性群組是跨越兩個基礎可用性群組的特殊可用性群組類型。 當您配置分散式可用性群組時,第一個可用性群組(AG)的全域主要複本所做的變更會被複寫到第二個 AG 的主要複本,該複本被稱為轉發器。
從 SQL Server 2025 (17.x) 預覽版開始,您可以設定兩個自含 AG 之間的分散式可用性群組。 由於自主 AG 依賴自主 master
和 msdb
系統資料庫,若要建立分散式可用性群組,第二個 AG(轉寄站)必須擁有與全域主要資料庫相同的自主 AG 系統資料庫。
如果您打算在分散式可用性群組中使用封裝 AG 作為轉寄站,您必須使用 AUTOSEEDING_SYSTEM_DATABASES
語句的 WITH | CONTAINED
選項的 子句來建立封裝 AG。 條款 AUTOSEEDING_SYSTEM_DATABASES
會指示 SQL Server 主動略過建立自己的封裝 AG 系統資料庫,而是從全域主資料庫植入封裝 AG 系統資料庫。
資源管理員
在 SQL Server 2022(16.x)累積更新 18 之前的版本,以及更舊的 SQL Server 版本中,不支援在內容可用性群組連線上配置或使用資源管理器。
從 SQL Server 2022 (16.x) 累積更新 18 開始,如果您在實例連線上設定資源管理員,則實例連線或內含的可用性群組連線上的資源消耗將如預期受到管理。 如果您嘗試在包含的可用性群組連線上設定資源管理員,您會收到錯誤。
資源管理員可在Database Engine實例層級運作。 實例層級的資源管理員設定不會傳播至可用性複本。 您必須在裝載可用性復本的每個實例上設定資源管理員。
小提示
建議您針對裝載可用性復本的所有 Database Engine 實例使用相同的資源管理員設定,以確保可用性群組故障轉移發生時的行為一致。
如需詳細資訊,請參閱 資源管理員 和資源 管理員組態範例和最佳做法。
變更資料擷取
異動資料擷取 (CDC) 是以 SQL Agent 作業實作,因此 SQL Agent 必須在自主可用性群組中具有複本的所有執行個體上執行。
若要將異動資料擷取與封裝可用性群組搭配使用,請在設定 CDC 時連線到可用性群組接聽器,以便利用封裝系統資料庫來設定 CDC 中繼資料。
日誌傳送
如果來源資料庫位於獨立式可用性群組 (Contained AG) 中,則可以設定記錄傳送。 不過,封裝可用性群組中不支援記錄傳送目標。 此外,設定 CDC 之後,需要一個額外的步驟來修改記錄傳送作業。
若要設定具備獨立功能的 AG 進行日誌傳送,請遵循下列步驟:
- 連線到包含的 AG 監聽程式。
- 就如同平常一樣設定日誌傳送。
- 設定完記錄傳送作業後,請變更作業設定,以連接到自主可用性群組接聽器,然後再進行備份。
透明資料加密 (TDE)
若要搭配封裝的可用性群組中的資料庫使用透明資料加密 (TDE),請手動將資料庫主要金鑰 (DMK) 安裝至封裝的可用性群組中的 master
資料庫。
使用 TDE 的資料庫依賴 master
資料庫中的憑證來解密資料庫加密金鑰 (DEK)。 如果沒有該憑證,SQL Server 就無法解密使用 TDE 加密的資料庫或使其上線。 在一個自主可用性群組中,SQL Server 會檢查兩個 master
資料庫中的資料庫主要金鑰 (DMK),執行個體的 master
資料庫,以及該自主可用性群組中的自主 master
資料庫以解密該資料庫。 如果在任一位置都找不到憑證,則 SQL Server 將無法使資料庫上線。
若要將 DMK 從執行個體的 master
資料庫傳輸至包含的 master
資料庫,請參閱將 TDE 保護的資料庫移至另一個 SQL Server,並重點關注將 DMK 從舊伺服器傳輸至新伺服器的部分。
注意
加密 SQL Server 實例上的任何資料庫也會 加密 tempdb
系統資料庫。
SSIS 套件與維護計劃
自主可用性群組不支援使用 SSIS 套件,包括維護計劃。
不支援
目前,自主可用性群組不支援下列 SQL Server 功能:
- 任何類型的 SQL Server 複寫 (交易式、合併式、快照式等)。
- 目標資料庫位於包含式可用性群組中的日誌傳送 (Log Shipping)。 支援來源資料庫位於自主可用性群組中的日誌傳送。
資料定義語言 (DDL) 變更
唯一的 DDL 變更位於 CREATE AVAILABILITY GROUP 工作流程中。 有一個包含兩個選項的WITH
子句:
<with_option_spec> ::=
CONTAINED [REUSE_SYSTEM_DATABASES | AUTOSEEDING_SYSTEM_DATABASES ]
被包含
這會指定所建立的 AG 應該是受限制的 AG。
重新使用系統資料庫 (REUSE_SYSTEM_DATABASES)
此選項 REUSE_SYSTEM_DATABASES
僅適用於自主 AG,並指定新建立的 AG 應該針對相同名稱的先前自主 AG 重複使用現有的自主系統資料庫。 例如,如果您有一個名稱為 MyContainedAG
的封裝可用性群組,並想要將其卸除並重新建立,您可以使用此選項來重複利用原始封裝系統資料庫的內容。 使用此選項時,請勿指定系統資料庫名稱。 SQL Server 會自動偵測它們。
AUTOSEEDING_SYSTEM_DATABASES
適用於:SQL Server 2025 (17.x) Preview 和更新版本
如果您想要使用自主 AG 作為分散式可用性群組中的轉寄站,您必須在AUTOSEEDING_SYSTEM_DATABASES
自主 AG 時使用 選項。 此選項會指示 SQL Server 略過建立自己的自主 AG 系統資料庫,而是從全域主要資料庫植入自主 AG 系統資料庫。
DMV變更事項
與受控可用性群組相關的動態管理檢視有兩個新增項目:
- DMV
sys.dm_exec_sessions
增加了一個數據列:contained_availability_group_id
-
sys.availability_groups
目錄檢視新增了資料行:is_contained
IS_CONTAINED