什麼是自主可用性群組?

適用於: SQL Server 2022 (16.x)

自主可用性群組是支援下列各項的 Always On 可用性群組:

  • 除了執行個體層級之外,在可用性群組層級管理中繼資料物件 (使用者、登入、權限、SQL Agent 作業等)。

  • 可用性群組中特製化的自主系統資料庫。

本文詳細說明自主可用性群組的相似性、差異和功能。

概觀

Always On 可用性群組通常包含一或多個使用者資料庫,這些資料庫旨在以協調群組運作,並會複寫至叢集中的一些節點。 當節點失敗或節點上裝載主要複本的 SQL Server 狀況不良時,資料庫群組就會當做一個單位移至可用性群組中的另一個複本節點。 所有使用者資料庫都會在可用性群組的所有複本之間保持同步,不論是在同步或非同步模式下。

這適用於只與該組使用者資料庫互動的應用程式,但當應用程式也依賴使用者、登入、權限、代理程式作業等物件時,由於這些物件會儲存在其中一個系統資料庫(mastermsdb),因此會帶來挑戰。 若要讓應用程式以可預測的方式順暢運作,系統管理員必須「手動」確保將這些物件的任何變更複製到可用性群組中的所有複本執行個體。 如果將新執行個體帶入可用性群組,資料庫可自動植入或透過簡單程序手動植入,但必須在新執行個體上重新設定所有系統資料庫自訂,以符合其他複本。

自主可用性群組擴充了所複寫的資料庫群組概念,加入 mastermsdb 資料庫的相關部分。 您可以將其想成是使用自主可用性群組之應用程式的執行內容。 其概念在於自主 AG 環境包含會影響相依應用程式的設定。 因此,自主 AG 環境會影響與應用程式互動的所有資料庫、所使用的驗證 (登入、使用者、權限)、預期執行的任何排程工作,以及影響應用程式的其他組態設定。

這與自主資料庫不同,自主資料庫會針對使用者帳戶使用不同的機制,並將使用者資訊儲存在資料庫本身。 自主資料庫只會複寫登入和使用者,而複寫登入或使用者的範圍僅限於該單一資料庫 (及其複本)。

相反地,在自主可用性群組中,您可以在可用性群組層級建立使用者、登入和權限,而這些項目會自動在可用性群組中的複本之間保持一致,並在自主可用性群組中的資料庫之間保持一致。 這可讓系統管理員不必自行手動進行這些變更。

差異

使用自主可用性群組時,需要考慮一些實際差異,例如自主系統資料庫的建立,以及在自主可用性群組層級強制連線,而不是在執行個體層級連線。

自主系統資料庫

每個自主可用性群組都有自己的 mastermsdb 系統資料庫,並以可用性群組的名稱命名。 例如,在自主可用性群組 MyContainedAG 中,您會有名為 MyContainedAG_masterMyContainedAG_msdb 的資料庫。 這些系統資料庫會自動植入至新複本,而更新會複寫至這些資料庫,就像可用性群組中的任何其他資料庫一樣。 這表示如果您在連線到自主可用性群組時新增登入或代理程式作業等物件,當自主可用性群組容錯移轉至另一個連線到自主可用性群組的執行個體時,您仍會看到代理程式作業,並能夠使用在自主可用性群組中建立的登入進行驗證。

重要

自主可用性群組是一種機制,能夠在可用性群組的複本之間保持執行環境設定一致。 它們「不」代表安全性界限。 沒有防止自主可用性群組連線存取 AG 外部資料庫的界限。

新建立自主可用性群組中的系統資料庫不會從執行 CREATE AVAILABILITY GROUP 命令的執行個體複製。 它們一開始是空白範本,沒有任何資料。 建立之後,執行個體上建立自主 AG 的系統管理員帳戶會立即複製到自主 master 中。 如此一來,系統管理員就能登入自主 AG,並完成其餘設定。 如果您已在執行個體中建立本機使用者或設定,當您建立自主系統資料庫時,這些項目不會自動出現,當您連線到自主可用性群組時,也無法看到這些項目。 您必須在自主可用性群組內容中的自主系統資料庫上,手動重新建立這些項目。 但如果上層執行個體中系統管理員角色的所有登入都已複製到新 AG 特定的 master DB,則為例外。

還原自主系統資料庫

您可以使用兩種不同的方式之一來還原自主系統資料庫。

  • 使用次要復本還原自主資料庫:

    1. 使用RESTORE WITH NORECOVERY每個還原作業,將自主mastermsdb資料庫還原到裝載次要複本的伺服器實例。 如需詳細資訊,請參閱針對可用性群組手動準備次要資料庫 - SQL Server

    2. 將每一個次要資料庫加入可用性群組。 如需詳細資訊,請參閱將次要資料庫聯結至可用性群組 (SQL Server)

  • 卸除自主 AG 以還原自主資料庫:

    1. 卸除包含的 AG。

    2. 在參與自主 AG 的每個實例中還原自主 mastermsdb 資料庫。

    3. 使用原始節點和名稱,使用 WITH (CONTAINED, REUSE_SYSTEM_DATABASES) 語法重新建立自主 AG。

連線 (自主環境)

請務必區分連線到執行個體與連線到自主可用性群組有何不同。 存取自主可用性群組環境的唯一方式是連線到自主可用性群組接聽程式,或連線到位於自主可用性群組中的資料庫。

"Persist Security Info=False;
User ID=MyUser;Password=*****;
Initial Catalog=MyContainedDatabase;
Server=MyServer;"

其中 MyContainedDatabase 是您想要與其互動之自主 AG 內的資料庫。

這表示您必須建立自主可用性群組的接聽程式,才能有效地使用自主可用性群組。 如果您連線到裝載自主可用性群組的其中一個「執行個體」,而不是「透過接聽程式直接連線到自主可用性群組」,您將會在執行個體的環境中,而不是在自主可用性群組的環境中。

例如,如果您的可用性群組 MyContainedAG 裝載於伺服器 SERVER\MSSQLSERVER,而且您使用 SERVER\MSSQLSERVER 連線到執行個體,而不是連線到接聽程式 MyContainedAG_Listener,您將會在執行個體的環境中,而不是在 MyContainedAG 的環境中。 這表示您會受限於執行個體的系統資料庫中找到的內容 (使用者、權限、作業等)。 若要存取自主可用性群組的自主系統資料庫中找到的內容,請改為連線到自主可用性群組接聽程式 (例如 MyContainedAG_Listener)。 當您透過自主可用性群組接聽程式連線到執行個體並與 master 互動時,實際上會被重新導向至自主 master 資料庫 (例如 MyContainedAG_mastermaster`)。

唯讀路由和自主可用性群組

如果您已將唯讀路由設定為將具有讀取意圖的連線重新導向至次要複本 (請參閱設定 Always On 可用性群組的唯讀路由),而且您只想要使用在自主可用性群組中建立的登入進行連線,則還有一些其他考量:

  • 您必須在連接字串中指定屬於自主可用性群組一部分的資料庫
  • 連接字串中指定的使用者必須具有存取自主可用性群組中資料庫的權限。

例如,在下列連接字串中,AdventureWorks 是具有 MyContainedListener 之自主可用性群組中的資料庫,而 AdventureWorksMyUser 是自主可用性群組中定義的使用者,且沒有任何參與的執行個體:

"Persist Security Info=False;
User ID=MyUser;Password=*****;
Initial Catalog=AdventureWorks;
Server=MyContainedListener;
ApplicationIntent=ReadOnly"

此連接字串可讓您連線到屬於唯讀路由設定一部分的可讀取次要,而且您會在自主可用性群組的內容中。

連線到執行個體與連線到自主可用性群組之間的差異

  • 連線到自主 AG 時,使用者只會看到自主 AG 中的資料庫,加上 tempdb。
  • 在實體層級,包含的 AG mastermsdb 名稱為 [contained AG]_master、 與 [contained AG]_msdb。 在自主 AG 內,其名稱為 master 和 msdb。
  • 自主 AG master 的資料庫識別碼是來自自主 AG 內的 1,但連線到執行個體時則不同。
  • 雖然使用者在自主 AG 連線中連線時,無法在 sys.databases 中看到自主 AG 外部的資料庫,但可以透過三個部分名稱或透過 sys.databasesuseUSE 命令來存取這些資料庫。
  • 透過 sp_configure 的伺服器設定可以從自主 AG 連線讀取,但只能從執行個體層級寫入。
  • 從自主 AG 連線,系統管理員可以執行執行個體層級作業,例如關閉 SQL Server。
  • 大部分的 DB 層級、端點層級或 AG 層級作業只能從執行個體連線執行,而不是自主 AG 連線。

與其他功能的互動

搭配自主可用性群組使用特定功能時,還有其他考量,而且有些功能目前不受支援。

不支援

目前,自主可用性群組不支援下列 SQL Server 功能:

  • 任何類型的 SQL Server 複寫 (交易式、合併式、快照式等)。
  • 分散式可用性群組。
  • 目標資料庫位於自主可用性群組中的記錄傳送。 支援來源資料庫位於自主可用性群組中的記錄傳送。

變更資料擷取

異動資料擷取 (CDC) 是以 SQL Agent 作業實作,因此 SQL Agent 必須在自主可用性群組中具有複本的所有執行個體上執行。

若要搭配自主可用性群組使用異動資料擷取,請在設定 CDC 時連線到可用性群組接聽程式,以便使用自主系統資料庫設定 CDC 中繼資料。

記錄傳送

如果來源資料庫位於自主可用性群組中,則可以設定記錄傳送。 不過,自主可用性群組不支援記錄傳送目標。 此外,設定 CDC 之後,需要一個額外的步驟來修改記錄傳送作業。

若要使用自主 AG 設定記錄傳送,請遵循下列步驟:

  1. 連線 包含的 AG 接聽程式。
  2. 像平常一樣設定記錄傳送
  3. 設定記錄傳送作業之後,請先變更作業以連線到自主可用性群組接聽程式,再進行備份。

透明資料加密 (TDE)

若要搭配自主可用性群組中的資料庫使用透明資料加密 (TDE),請手動將資料庫主要金鑰 (DMK) 安裝至自主可用性群組中的自主 master 資料庫。

使用 TDE 的資料庫依賴 master 資料庫中的憑證來解密資料庫加密金鑰 (DEK)。 如果沒有該憑證,SQL Server 就無法解密使用 TDE 加密的資料庫或使其上線。 在自主可用性群組中,SQL Server 會檢查兩個 master 資料庫 (執行個體的 master 資料庫和自主可用性群組中的自主 master 資料庫) 中的資料庫主要金鑰 (DMK) 來解密資料庫。 如果在任一位置都找不到憑證,則 SQL Server 將無法使資料庫上線。

若要將 DMK 從執行個體的 master 資料庫傳輸至自主 master 資料庫,請參閱將 TDE 保護的資料庫移至另一個 SQL Server (主要著重於將 DMK 從舊伺服器傳輸至新伺服器的部分)。

SSIS 套件與維護計劃

自主可用性群組不支援使用 SSIS 套件,包括維護計劃。

DDL 變更

工作流程中 CREATE AVAILABILITY GROUP 只有 DDL 變更。 有兩個新的 'WITH' 子句:

<with_option_spec> ::=
CONTAINED |
REUSE_SYSTEM_DATABASES

包含

這會指定所建立的 AG 應該是包含的 AG。

REUSE_SYSTEM_DATABASES

:此選項只適用於 CONTAINED 可用性群組,並會指定新建立的可用性群組應該針對相同名稱的先前自主可用性群組重複使用現有的自主系統資料庫。 例如,如果您有名稱為 MyContainedAG 的自主可用性群組,而且想要將其卸除並重新建立,您可以使用此選項來重複使用原始自主系統資料庫的內容。

DMV 變更

DMV 有兩個與自主可用性群組相關的新增項目:

  • DMV sys.dm_exec_sessions 有已新增的數據行: contained_availability_group_id
  • 目錄檢視新增了資料行:IS_CONTAINED