共用方式為


變更可用性群組 (Transact-SQL)

適用於:SQL Server

改變 SQL Server 中的現有 Always On 可用性群組。 大多數 ALTER AVAILABILITY GROUP 論點僅支持目前的主要副本。 然而 JOIN,, FAILOVER, 和 FORCE_FAILOVER_ALLOW_DATA_LOSS 參數僅在次級副本上被支持。

Transact-SQL 語法慣例

語法

ALTER AVAILABILITY GROUP group_name
  {
     SET ( <set_option_spec> )
   | ADD DATABASE database_name
   | REMOVE DATABASE database_name
   | ADD REPLICA ON <add_replica_spec>
   | MODIFY REPLICA ON <modify_replica_spec>
   | REMOVE REPLICA ON <server_instance>
   | JOIN
   | JOIN AVAILABILITY GROUP ON <add_availability_group_spec> [ , ...2 ]
   | MODIFY AVAILABILITY GROUP ON <modify_availability_group_spec> [ , ...2 ]
   | GRANT CREATE ANY DATABASE
   | DENY CREATE ANY DATABASE
   | FAILOVER
   | FORCE_FAILOVER_ALLOW_DATA_LOSS
   | ADD LISTENER 'dns_name' ( <add_listener_option> )
   | MODIFY LISTENER 'dns_name' ( <modify_listener_option> )
   | RESTART LISTENER 'dns_name'
   | REMOVE LISTENER 'dns_name'
   | OFFLINE
  }
[ ; ]

<set_option_spec> ::=
    AUTOMATED_BACKUP_PREFERENCE = { PRIMARY | SECONDARY_ONLY | SECONDARY | NONE }
  | FAILURE_CONDITION_LEVEL  = { 1 | 2 | 3 | 4 | 5 }
  | HEALTH_CHECK_TIMEOUT = milliseconds
  | DB_FAILOVER  = { ON | OFF }
  | DTC_SUPPORT  = { PER_DB | NONE }
  | REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = { integer }
  | ROLE = SECONDARY
  | CLUSTER_CONNECTION_OPTIONS = 'key_value_pairs> [ ;... ] '

<server_instance> ::=
 { 'system_name [ \instance_name ] ' | 'FCI_network_name [ \instance_name ] ' }

<add_replica_spec>::=
  <server_instance> WITH
    (
       ENDPOINT_URL = 'TCP://system-address:port' ,
       AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT | CONFIGURATION_ONLY } ,
       FAILOVER_MODE = { AUTOMATIC | MANUAL }
       [ , <add_replica_option> [ , ...n ] ]
    )

  <add_replica_option>::=
       SEEDING_MODE = { AUTOMATIC | MANUAL }
     | BACKUP_PRIORITY = n
     | SECONDARY_ROLE ( {
            [ ALLOW_CONNECTIONS = { NO | READ_ONLY | ALL } ]
        [ , ] [ READ_ONLY_ROUTING_URL = 'TCP://system-address:port' ]
     } )
     | PRIMARY_ROLE ( {
            [ ALLOW_CONNECTIONS = { READ_WRITE | ALL } ]
        [ , ] [ READ_ONLY_ROUTING_LIST = { ( '<server_instance>' [ , ...n ] ) | NONE } ]
        [ , ] [ READ_WRITE_ROUTING_URL = 'TCP://system-address:port' ]
     } )
     | SESSION_TIMEOUT = integer

<modify_replica_spec>::=
  <server_instance> WITH
    (
       ENDPOINT_URL = 'TCP://system-address:port'
     | AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }
     | FAILOVER_MODE = { AUTOMATIC | MANUAL }
     | SEEDING_MODE = { AUTOMATIC | MANUAL }
     | BACKUP_PRIORITY = n
     | SECONDARY_ROLE ( {
          [ ALLOW_CONNECTIONS = { NO | READ_ONLY | ALL }  ]
        | [ READ_ONLY_ROUTING_URL = { 'TCP://system-address:port' | NONE } ]
          } )
     | PRIMARY_ROLE ( {
          [ ALLOW_CONNECTIONS = { READ_WRITE | ALL }   ]
        | [ READ_ONLY_ROUTING_LIST = { ( '<server_instance>' [ , ...n ] ) | NONE } ]
        | [ READ_WRITE_ROUTING_URL = { 'TCP://system-address:port' | NONE }  ]
          } )
     | SESSION_TIMEOUT = seconds
    )

<add_availability_group_spec>::=
 <ag_name> WITH
    (
       LISTENER_URL = 'TCP://system-address:port' ,
       AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT } ,
       FAILOVER_MODE = MANUAL ,
       SEEDING_MODE = { AUTOMATIC | MANUAL }
    )

<modify_availability_group_spec>::=
 <ag_name> WITH
    (
       LISTENER = 'TCP://system-address:port'
       | AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT }
       | SEEDING_MODE = { AUTOMATIC | MANUAL }
    )

<add_listener_option> ::=
   {
      WITH DHCP [ ON ( <network_subnet_option> ) ]
    | WITH IP ( { ( <ip_address_option> ) } [ , ...n ] ) [ , PORT = listener_port ]
   }

  <network_subnet_option> ::=
     'ipv4_address' , 'ipv4_mask'

  <ip_address_option> ::=
     {
        'four_part_ipv4_address' , 'four_part_ipv4_mask'
      | 'ipv6_address'
     }

<modify_listener_option>::=
    {
       ADD IP ( <ip_address_option> )
     | PORT = listener_port
     | REMOVE IP ( 'ipv4_address' | 'ipv6_address')
    }

引數

group_name

指定新的可用性群組名稱。 group_name 必須是有效的 SQL Server識別碼,且在 WSFC 叢集的所有可用性群組上都必須是唯一的。

AUTOMATED_BACKUP_PREFERENCE = { PRIMARY |SECONDARY_ONLY|SECONDARY |NONE }

指定備份工作在選擇備份地點時如何評估主要副本的偏好。 您可以編寫給定備份作業,將自動備份喜好設定納入考量。 請務必了解,喜好設定並不是由 SQL Server 施行,所以它對於隨選備份沒有任何影響。

只有主要複本上才支援。

其值如下:

主要

規定備份總是發生在主要副本上。 如果你需要備份功能,例如建立差異備份,而這些功能在備份執行於次要副本時並不支援,這個選項很有用。

重要

如果你打算用日誌運送來準備任何次要資料庫到可用群組,請將自動備份偏好設定為 Primary 直到所有次要資料庫都準備好並加入可用群組為止。

SECONDARY_ONLY

規定備份絕不會發生在主要副本上。 如果主要副本是唯一在線的副本,備份就不會發生。

二 次

規定備份會在次要副本上進行,除非主副本是唯一在線副本。 在這種情況下,備份會發生在主要副本上。 此為預設行為。

指定當您選擇要執行備份的複本時,您希望備份作業忽略可用性複本的角色。 請注意,備份作業可能會評估其他因素,例如每個可用性複本的備份優先權,搭配其操作狀態和連接狀態。

重要

設定沒有強制執行 AUTOMATED_BACKUP_PREFERENCE 。 這種偏好的解讀取決於你在特定可用性群組中為資料庫的備份工作所寫的邏輯(如果有的話)。 自動備份偏好設定對臨時備份沒有影響。 欲了解更多資訊,請參閱 「在 Always On 可用性群組的次要副本上配置備份」。

注意

若要查看現有可用性群組的自動備份偏好,請選擇automated_backup_preferencesys.availability_groups目錄檢視中的 or automated_backup_preference_desc 欄位。 此外, sys.fn_hadr_backup_is_preferred_replica 可用來決定偏好的備份副本。 即使 ,這個函數至少會回傳 1 至少一個副本 AUTOMATED_BACKUP_PREFERENCE = NONE

FAILURE_CONDITION_LEVEL = { 1 | 2 | 3 | 4 | 5 }

指定哪一個失敗狀況會針對這個可用性群組觸發自動容錯移轉。 FAILURE_CONDITION_LEVEL設定在群組層級,但僅適用於設定為同步提交可用性模式()的可用性副本。AVAILABILITY_MODE = SYNCHRONOUS_COMMIT 此外,只有當主副本與次要副本都設定為自動故障轉移模式(),FAILOVER_MODE = AUTOMATIC且次要副本目前與主要副本同步時,故障條件才可能觸發自動故障轉移。

只有主要複本上才支援。

失敗狀況層級 (1-5) 的範圍從最低限制 (層級 1) 到最高限制 (層級 5)。 給定的狀況層級包含所有較少限制的層級。 因此,最嚴格的狀況層級 5 包含四個較少限制的狀況層級 (1-4),層級 4 則包含層級 1-3,依此類推。 下表描述了對應每個層級的失效條件。

層級 失敗狀況
1 規定當發生以下任一情況時,自動故障轉移即啟動:

SQL Server 服務已關閉。

連接 WSFC 叢集的可用性群組租約到期,因為伺服器實例未 ACK 收到任何資料。 如需詳細資訊,請參閱 How It Works:SQL Server Always On Lease Timeout (運作方式:SQL Server Always On 租用逾時)。
2 規定當發生以下任一情況時,自動故障轉移即啟動:

SQL Server 實例無法連接到叢集,且使用者指定的 HEALTH_CHECK_TIMEOUT 可用性群組閾值被超越。

可用性複本處於失敗狀態。
3 規定自動故障轉移會在關鍵的 SQL Server 內部錯誤時啟動,例如孤立的旋轉鎖、嚴重的寫入違規或過度傾倒。

此為預設行為。
4 規定自動切換會在 SQL Server 內部錯誤(例如 SQL Server 內部資源池中持續的記憶體不足狀態)時啟動。
5 規定自動故障轉移適用於任何合格故障條件,包括:

SQL 引擎工作者執行緒已耗盡。

偵測到無法解決的死結。

注意

SQL Server 實例對用戶端要求的回應不足,與可用性群組無關。

FAILURE_CONDITION_LEVELHEALTH_CHECK_TIMEOUT值定義了給定群組的彈性故障切換政策。 這個具彈性的容錯移轉原則讓您能夠更精確控制哪些條件必須造成自動容錯移轉。 欲了解更多資訊,請參閱 「為 Always On 可用性群組配置彈性自動故障轉移政策」。

HEALTH_CHECK_TIMEOUT = 毫秒

指定系統儲存程序在 WSFC 叢集假設伺服器實例緩慢或未回應之前,回傳伺服器健康資訊的等待時間(以毫 sp_server_diagnostics 秒為單位)。 HEALTH_CHECK_TIMEOUT設定在群組層級,但只適用於你設定為同步提交可用性模式並自動切換的可用性副本(AVAILABILITY_MODE = SYNCHRONOUS_COMMIT)。 此外,健康檢查逾時僅在主副本與次要副本皆設定為自動故障轉移模式(FAILOVER_MODE = AUTOMATIC)且次要副本目前與主要副本同步時,才會觸發自動故障轉移。

預設 HEALTH_CHECK_TIMEOUT 值為30,000毫秒(30秒)。 最小值為 15,000 毫秒(15 秒),最大值為 4,294,967,295 毫秒。

只有主要複本上才支援。

重要

sp_server_diagnostics 不會在資料庫層級執行健康檢查。

DB_FAILOVER = { ON |OFF }

指定當主要複本上的資料庫離線時要採取的回應。 當設定為 ON時,任何非 ONLINE 可用性群組中資料庫的狀態都會觸發自動故障轉移。 當你將此選項設為 OFF時,只有實例的健康狀況會觸發自動故障轉移。

欲了解更多關於此設定的資訊,請參閱 可用性群組資料庫層級健康偵測故障轉移選項

DTC_SUPPORT = { PER_DB |NONE }

指定此可用性群組是否啟用分散式交易。 只有從 SQL Server 2016 (13.x) 開始的可用性群組資料庫才支援分散式交易,且從 SQL Server 2016 (13.x) SP2 開始才支援跨資料庫交易。 PER_DB 建立支援這些交易的可用性群組,並自動將涉及可用性群組資料庫的跨資料庫交易推廣為分散式交易。 NONE 可防止跨資料庫交易自動升階到分散式交易,而且不會在 DTC 中向穩定的 RMID 註冊資料庫。 使用 NONE 設定時,不會防止分散式交易,但在某些情況下,資料庫故障轉移和自動復原可能不會成功。 如需詳細資訊,請參閱 交易 - 可用性群組和資料庫鏡像

注意

變更可用性群組設定的支援 DTC_SUPPORT 於 SQL Server 2016(13.x)Service Pack 2 中引入。 此選項無法與舊版搭配使用。 要在早期版本的 SQL Server 中更改此設定,您必須 DROP 重新設定可用性 CREATE 群組。

重要

DTC 每個分散式交易的限制為32個登記。 由於可用性群組內的每個資料庫會個別登記 DTC,如果您的交易涉及超過 32 個資料庫,當 SQL Server 嘗試登記第 33 個資料庫時,您會收到下列錯誤:

Enlist operation failed: 0x8004d101(XACT_E_TOOMANY_ENLISTMENTS). SQL Server could not register with Microsoft Distributed Transaction Coordinator (MS DTC) as a resource manager for this transaction. The transaction may have been stopped by the client or the resource manager.

欲了解更多關於 SQL Server 分散式交易的細節,請參見 分散式交易

REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT

在 SQL Server 2017 (14.x) 中引進。 在主要複本認可交易之前,設定認可所需的同步次要複本最小數目。 保證 SQL Server 交易會等候,直到最小數目之次要複本上的交易記錄都已更新為止。

  • 預設值︰0。 提供與 SQL Server 2016 (13.x) 相同的行為。
  • 最小值:0。
  • 最大值:複本數目減 1。

REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 與同步提交模式下的副本相關。 當複本處於同步認可模式時,主要複本上的寫入會等候,直到同步複本上的寫入認可到複本資料庫交易記錄為止。 如果承載次要同步副本的 SQL 伺服器停止回應,主機主副本的 SQL Server 會標記該次要副本為 , NOT SYNCHRONIZED 然後繼續進行。 當無反應的資料庫重新上線時,它會處於「未同步」狀態,副本會被標記為不健康,直到主資料庫能再次同步。 此設定可確保主要復本在認可每個交易的最小復本數目之前不會繼續。 如果可用的複本數目下限,則主要複本的認可會失敗。 針對叢集類型 EXTERNAL,設定會在可用性群組被新增到叢集資源時變更。 請參閱可用性群組設定的高可用性和資料保護

從 SQL Server 2022(16.x)開始,你可以設定 REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 分散式可用性群組。 此設定不支援。CREATE AVAILABILITY GROUP 你可以用 ALTER AVAILABILITY GROUP 來設定 REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT。 例如:

ALTER AVAILABILITY GROUP [<name>]
  SET (REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = <integer>);

角色

唯一有效的參數是 SECONDARY,且此 SET 選項僅在分散式可用性群組中有效。 用它來跨越 分散式可用性群組

CLUSTER_CONNECTION_OPTIONS

適用於:SQL Server 2025(17.x)及更新版本

使用子 CLUSTER_CONNECTION_OPTIONS 句來強制執行 TLS 1.3 加密,以進行 Windows Server 容錯移轉叢集與可用性群組複本之間的通訊。 將選項指定為一串鍵值對,並以分號分隔。 使用鍵值對來設定可用性群組的連線字串加密。

若要還原為預設加密,請將子 CLUSTER_CONNECTION_OPTIONS 句設定為空字串。 SQL Server 2025(17.x)預設為 Encrypt=Mandatory,連接 TrustServerCertificate=Yes 至可用性群組副本與監聽器。

如需詳細資訊,請檢閱連線 到具有嚴格加密TDS 8.0 的可用性群組。

下表說明您可以在子句中使用的 CLUSTER_CONNECTION_OPTIONS 索引鍵值組:

Key 支援的值 Description
Encrypt MandatoryStrictOptional 指定如何強制執行可用性群組的加密。 如果伺服器不支援加密,連線就會失敗。 如果你把加密設為 Mandatory,那麼 TrustServerCertificate 也必須設為 yes。 如果你將加密設定為 Strict,則 TrustServerCertificate 會忽略加密。

注意:此鍵值對是必填的。
HostNameInCertificate 複本名稱或 AG 接聽程式名稱 指定用於加密的憑證中副本名稱或可用性群組監聽器名稱。 此值必須符合憑證的 主體替代名稱 中的值。 如果憑證中列出伺服器名稱,則您可以省略 HostNameInCertificate 索引鍵值組。 如果憑證中沒有列出伺服器名稱,那你必須用伺服器名稱指定 HostNameInCertificate 鍵值對。

注意:此關鍵值對為可選。
TrustServerCertificate YesNo 設定為 yes ,以指定驅動程式不會驗證伺服器 TLS/SSL 憑證。 如果 ,驅動 no程式會驗證憑證。 如需詳細資訊,請檢閱 TDS 8.0

注意:此關鍵值對為可選。
ServerCertificate 憑證的路徑 如果你不想使用 HostNameInCertificate,也可以通過取得證書的路徑。 叢集服務帳戶必須具有從指定位置讀取憑證的權限。

注意:此關鍵值對為可選。
CLUSTER_CONNECTION_OPTIONS 空字串 ('' 清除現有組態,並還原為 和 Encrypt=MandatoryTrustServerCertificate=Yes預設加密設定。

請查看 範例 以瞭解如何使用該 CLUSTER_CONNECTION_OPTIONS 子句。

添加資料庫 database_name

指定您想要加入至可用性群組之一個或多個使用者資料庫的清單。 這些資料庫必須位於裝載目前主要複本的 SQL Server 執行個體上。 您可以為可用性群組指定多個資料庫,但每個資料庫只能屬於一個可用性群組。 關於可用性群組可支援的資料庫類型,請參閱「 Always On可用性群組的前置條件、限制與建議」。 欲查詢哪些本地資料庫已屬於可用性群組,請參閱 replica_idsys.databases 目錄檢視中的欄位。

只有主要複本上才支援。

注意

建立可用性群組後,你需要連接到每個承載次要副本的伺服器實例。 接著準備每個次要資料庫,並加入可用性群組。 如需詳細資訊,請參閱在 Always On 次要資料庫上啟動資料移動 (SQL Server)

刪除資料庫 database_name

從可用性群組中移除指定的主要資料庫和對應的次要資料庫。 只有主要複本上才支援。

關於移除可用性資料庫後建議步驟的資訊,請參閱 「從 Always On 可用性群組移除主要資料庫」。

添加副本

指定從一到八個 SQL Server 實例裝載可用性群組中的次要複本。 每個副本以其伺服器實例位址 WITH (...) 及一個子句來指定。

只有主要複本上才支援。

您必須將每個新的次要複本聯結至可用性群組。 欲了解更多資訊,請參閱本節後面的選項說明 JOIN

<server_instance>

指定作為副本主機的 SQL Server 實例的位址。 位址格式取決於實例是預設實例還是具名實例,以及它是獨立實例還是故障轉移叢集實例(FCI)。 語法如下所示:

{ 'system_name[\instance_name]' |'FCI_network_name[\instance_name]' }

這個位址的元件如下所示:

system_name

SQL Server 目標實例所在的計算機系統 NetBIOS 名稱。 這部電腦必須是 WSFC 節點。

FCI_network_name

你用來存取 SQL Server 故障轉移叢集的網路名稱。 如果伺服器實例作為 SQL Server 故障轉移夥伴參與,請使用此名稱。 SELECT @@SERVERNAME在 FCI 伺服器實例執行時,會回傳整個 'FCI_network_name[\instance_name]' 字串(即完整的副本名稱)。

更多資訊請參見 @@SERVERNAME

instance_name

一個 SQL Server 實例的名稱,該實例 system_nameFCI_network_name 主機,且啟用了 Always On。 如果是預設伺服器執行個體, instance_name 為選擇性。 執行個體名稱不區分大小寫。 在獨立伺服器實例中,這個值名稱與執行 SELECT @@SERVERNAME後返回的值相同。

\

只有在指定 instance_name時,才能將分隔符與 system_nameFCI_network_name分隔。

關於 WSFC 節點與伺服器實例的前置條件,請參閱 Always On 可用性群組的先決條件、限制與建議

ENDPOINT_URL = '*TCP:// system-address:*port'

指定你正在新增或修改的可用性副本所載具的 SQL Server 實例中,資料庫 鏡像端點 的 URL 路徑。

ENDPOINT_URL 在條款 ADD REPLICA ON 中是必需的,且在條款 MODIFY REPLICA ON 中為可選。 欲了解更多資訊,請參閱 「指定端點網址 - 新增或修改可用性副本」。

'TCP:// system-addressport'

指定 URL 以指定端點 URL 或唯讀的路由 URL。 URL 參數如下所示:

system-address

明確識別目的地計算機系統的字串,例如系統名稱、完整功能變數名稱或IP位址。

港口

一個與伺服器實例鏡像端點相關的埠號(用於 ENDPOINT_URL 該選項),或是伺服器實例資料庫引擎使用的埠號(用於 READ_ONLY_ROUTING_URL 該選項)。

AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT |ASYNCHRONOUS_COMMIT |CONFIGURATION_ONLY }

指定主副本是否會等待次要副本確認日誌記錄的硬化(寫入)後,才能在指定主要資料庫上提交交易。 相同主要複本上不同資料庫的交易可以獨立認可。

SYNCHRONOUS_COMMIT

規定主要副本會等待交易在該次要副本上被強化(同步提交模式)後才提交。 你可以指定 SYNCHRONOUS_COMMIT 最多三個副本,包括主要副本。

ASYNCHRONOUS_COMMIT

指定主要複本會認可交易,而不等候這個次要複本強化記錄 (同步-認可可用性模式)。 你可以指定 ASYNCHRONOUS_COMMIT 最多五個可用副本,包括主要副本。

CONFIGURATION_ONLY

規定主要副本同步提交可用性群組的組態元資料至 master 該副本上的資料庫。 副本不包含使用者資料。 此選項:

  • 可裝載於任何 SQL Server 版本,包括 Express Edition。

  • 要求副本的資料 CONFIGURATION_ONLY 鏡像端點型別為 WITNESS

  • 無法改變。

  • CLUSTER_TYPE = WSFC時無效。

    如需詳細資訊,請參閱可用性群組組態的高可用性和資料保護

AVAILABILITY_MODE 在條款 ADD REPLICA ON 中是必需的,且在條款 MODIFY REPLICA ON 中為可選。 更多資訊,查閱 Always On 可用性群組之可用性模式間的差異

FAILOVER_MODE = { AUTOMATIC |MANUAL }

指定您要定義之可用性複本的故障轉移模式。

自動

啟用自動容錯移轉。 AUTOMATIC 只有在你同時指定 AVAILABILITY_MODE = SYNCHRONOUS_COMMIT時才支援。 你可以指定 AUTOMATIC 三個可用性副本,包括主要副本。

注意

  • 在 SQL Server 2016(13.x)之前,你只能使用兩個自動故障轉移副本,包括主要副本。
  • SQL Server 容錯移轉叢集執行個體 (FCI) 不支援依可用性群組自動容錯移轉,因此 FCI 裝載的任何可用性複本只能設定為手動容錯移轉。

手動

允許資料庫管理員手動容錯移轉或強制手動容錯移轉 (「強制容錯移轉」)。

你必須在條款ADD REPLICA ON中明確說明FAILOVER_MODE。 你可以選擇在條款中 MODIFY REPLICA ON 指定。 手動故障轉移有兩種:手動故障轉移且無資料遺失,以及強制故障轉移(可能有資料遺失)。 不同條件支持這些類型。 如需詳細資訊,請參閱容錯移轉及容錯移轉模式 (Always On 可用性群組)

SEEDING_MODE = { AUTOMATIC |MANUAL }

指定一開始如何植入次要複本。

自動

啟用直接植入。 此方法會透過網路植入次要複本。 此方法不需要您在復本上備份和還原主資料庫複本。

注意

直接做種時,必須透過呼叫 ALTER AVAILABILITY GROUP 選項 GRANT CREATE ANY DATABASE ,允許在每個次要副本建立資料庫。

手動

指定手動植入 (預設值)。 此方法要求您必須在主要複本上建立資料庫的備份,並在次要複本上手動還原該備份。

BACKUP_PRIORITY = n

指定在這個複本上執行備份的優先權 (相對於相同可用性群組中的其他複本)。 這個值是 0 到 100 範圍之間的整數。 這些值具有以下意義:

  • 1..100 表示可選擇可用性副本來執行備份。 1 表示最低優先權,100 表示最高優先權。 若 BACKUP_PRIORITY = 1,則僅在目前沒有更高優先權的可用副本時,選擇該可用性副本執行備份。

  • 0 表示此可用性副本從未被選擇用於執行備份。 這個選項對於遠端可用性副本非常有用,例如你不希望備份能進行故障轉移。

如需詳細資訊,請參閱將支援的備份卸載至可用性群組次要複本

SECONDARY_ROLE (... )

指定特定角色設定,若該可用性副本目前擁有次要角色(只要是次要副本),這些設定就會生效。 在括弧內指定任一個或兩個次要角色選項。 如果您同時指定兩個選項,則使用逗號分隔清單。

次要角色選項如下:

ALLOW_CONNECTIONS = { NO |READ_ONLY |ALL }

規定執行次要角色(作為次要副本)的可用性副本的資料庫是否能接受來自用戶端的連線,以下之一:

不允許使用者連接至這個複本的次要資料庫。 它們無法讀取。 此為預設行為。

READ_ONLY

僅允許連接次級副本中應用意圖屬性設定為 ReadOnly的資料庫。 如需有關這個屬性的詳細資訊,請參閱< Using Connection String Keywords with SQL Server Native Client>。

全部

次要複本的資料庫允許所有連接進行唯讀存取。

如需詳細資訊,請參閱將唯讀工作負載卸載至 Always On 可用性群組的次要複本

READ_ONLY_ROUTING_URL = { '*TCP:// system-address:*port' |無 }

指定用於路由讀取意圖連線請求至此可用性副本的 URL。 這個網址是 SQL Server 資料庫引擎監聽的地方。 SQL Server Database Engine 的預設執行個體通常會接聽 TCP 通訊埠 1433。

從 SQL Server 2025(17.x)開始,你可以指定NONEREAD_ONLY_ROUTING_URL目的地來還原可用性副本指定的唯讀路由,並根據預設行為路由流量。

對於命名實例,查詢portsys.dm_tcp_listener_states動態管理檢視的 和 type_desc 欄位以取得埠號。 伺服器實例使用 Transact-SQL 監聽器(type_desc='TSQL')。

如需計算可用性複本之唯讀路由 URL 的詳細資訊,請參閱計算 Always On 的 read_only_routing_url

注意

對於 SQL Server 的命名實例,請設定 Transact-SQL 監聽器使用特定的埠口。 如需詳細資訊,請參閱設定 SQL Server 在特定 TCP 通訊埠上接聽

PRIMARY_ROLE (... )

指定角色特定設定,若此可用性副本目前擁有主要角色(無論何時是主要副本),該設定即生效。 在括弧內指定任一個或兩個主要角色選項。 如果您同時指定兩個選項,則使用逗號分隔清單。

主要角色選項如下:

ALLOW_CONNECTIONS = { READ_WRITE |ALL }

指定執行主要角色(作為主要副本)的可用性副本資料庫可接受用戶端的連線類型,以下之一:

讀寫

若 Application Intent 連線屬性設定為 , ReadOnly 則不允許連線。 當 Application Intent 屬性設定為 或 ReadWrite Application Intent 連線屬性未設定時,該連線是被允許的。 如需有關 Application Intent 連接屬性的詳細資訊,請參閱< Using Connection String Keywords with SQL Server Native Client>。

全部

主要複本的資料庫允許所有連接。 此為預設行為。

READ_ONLY_ROUTING_LIST = { ('server_instance<>' [ , ...n ] ) |無 }

針對這個可用性群組,指定裝載可用性複本之伺服器執行個體的逗號分隔清單,以次要角色執行時,這些可用性複本會符合下列需求:

  • 設定為允許所有連線或唯讀連線(詳見 ALLOW_CONNECTIONS 本文前述選項的論點 SECONDARY_ROLE )。

  • 先定義他們的唯讀路由網址(詳見 READ_ONLY_ROUTING_URL 本文前述選項的論點 SECONDARY_ROLE )。

READ_ONLY_ROUTING_LIST數值如下:

<server_instance>

指定作為可用性副本主機的 SQL Server 實例地址,該副本在次要角色下執行時可讀的次要副本。

使用逗號分隔清單指定可能裝載可讀取之次要複本的所有伺服器執行個體。 唯讀的路由會遵循清單中指定伺服器執行個體的順序。 如果您將複本的主機伺服器執行個體包含在複本的唯讀路由清單中,將此伺服器執行個體放在清單結尾通常是很好的作法,讓讀取意圖的連接通往次要複本 (如果有一個可用的次要複本的話)。

從 SQL Server 2016 (13.x) 開始,您可以針對可讀取次要複本之間的讀取意圖要求進行負載平衡。 這可以透過將複本放在唯讀路由清單內的一組巢狀括號中來指定。 如需詳細資訊與範例,請參閱設定唯讀複本之間的負載平衡

指定當這個可用性複本是主要複本時,不支援只讀路由。 此為預設行為。 當與 MODIFY REPLICA ON一起使用時,此值會使現有的列表失效(若有的話)。

{ READ_WRITE_ROUTING_URL = '*TCP:// system-address:*port' |無 }

適用於:SQL Server 2019 (15.x) 和更新版本

針對這個可用性群組,指定裝載可用性複本的伺服器執行個體,以主要角色執行時,這些可用性複本會符合下列需求:

  • 副本規格 PRIMARY_ROLE 包含 READ_WRITE_ROUTING_URL
  • 連接字串是 ReadWrite,其方式是將 ApplicationIntent 定義為 ReadWrite,或不要設定 ApplicationIntent,讓預設值 (ReadWrite) 生效。

從 SQL Server 2025(17.x)開始,你可以指定NONEREAD_WRITE_ROUTING_URL目的地來還原可用性副本指定的讀寫路由,並根據預設行為路由流量。

如需詳細資訊,請參閱次要到主要複本讀取/寫入連線重新導向 (Always On 可用性群組)

SESSION_TIMEOUT =

指定工作階段逾時期限 (以秒為單位)。 如果你沒有指定這個選項,預設的時間範圍是 10 秒。 最小值是 5 秒。

重要

保持 10 秒或更長的超時時間。

欲了解更多關於會話暫停期間的資訊 ,請參閱「什麼是 Always On 可用性群組?」

修改副本

修改可用性群組的任何複本。 要修改的副本清單包含伺服器實例位址及每個副本的 WITH (...) 子句。

只有主要複本上才支援。

REMOVE REPLICA ON(刪除複本開啟)

從可用性群組中移除指定的次要複本。 你無法從可用性群組移除目前的主要副本。 當你移除副本時,它就停止接收資料了。 副本的次要資料庫會從可用性群組中移除,並進入 RESTORING 狀態。

只有主要複本上才支援。

注意

如果你在副本無法使用或失敗時移除,當它重新上線時,它會發現它不再屬於可用群組。

加入

使得本機伺服器執行個體裝載指定之可用性群組內的次要複本。

只支援尚未加入可用性群組的次要副本。

更多資訊請參閱 「加入次要副本至Always On可用性群組」。

故障轉移

起始可用性群組的手動故障轉移,而不會將數據遺失至您已連線的次要複本。 承載主要副本的副本是 故障轉移目標。 故障轉移目標會接管主要角色,並恢復每個資料庫的副本,使其上線成為新的主要資料庫。 之前的主要複本會同時轉換到次要角色,且其資料庫會變成次要資料庫,並立即遭到暫停。 這些角色可能會因一連串失敗而來回切換。

故障轉移只支援到目前與主副本同步的同步提交次要副本。 對於要同步的輔助副本,主副本還必須在同步提交模式下運行。

對於可用性組中的兩個 SQL Server 實例,您可以在主副本或輔助副本上發出故障轉移命令。 對於透過 受管理實例連結複製的實例,您必須在主副本上執行故障轉移指令。

注意

  • 對於可用性群組,一旦備援目標接受該指令,故障轉移指令就會回傳。 然而,資料庫復原會在可用性群組完成故障轉移後非同步進行。
  • 對於 受管理實例連結的故障轉移,當成功切換且來源與目標交換器角色同時切換,或故障轉移指令在故障轉移前置檢查失敗後返回。
  • 你不能用故障轉移指令來執行兩個 SQL Server 實例間分散 式可用性群組 的計畫故障轉移。

關於執行計畫性手動故障轉移的限制、前提及建議,請參閱 「執行計畫性手動故障轉移 Always On 可用性群組(SQL Server)」。

FORCE_FAILOVER_ALLOW_DATA_LOSS

警告

僅以強制故障切換作為災難復原措施,否則可能導致資料遺失。 強制故障轉移應僅在主副本無法使用、你願意接受潛在資料遺失,且必須立即恢復可用性群組的服務時執行。

僅支援於角色屬於 SECONDARY OR RESOLVING 狀態的複製品。 你輸入故障轉移指令的副本就是 故障轉移目標

強制可用性群組容錯移轉至容錯移轉目標 (可能會遺失資料)。 故障轉移目標會接管主要角色,並恢復每個資料庫的副本,使其上線成為新的主要資料庫。 在任一個剩餘的次要複本上,會暫停每個次要資料庫,到手動繼續為止。 當原本的主要副本可用時,會切換為次要角色,其資料庫則成為暫停的次要資料庫。

對於透過 受管理實例連結複製的實例,您必須在次要副本(故障轉移目標)上發出 FORCE_FAILOVER_ALLOW_DATA_LOSS 指令。

注意

一旦備援目標接受該指令,故障轉移指令會立即返回。 然而,資料庫復原會在可用性群組完成故障轉移後非同步進行。

關於強制故障轉移的限制、前提及建議,以及強制故障轉移對可用性群組中先前主要資料庫的影響,請參見 「執行強制手動故障轉移 Always On 可用性群組(SQL Server)」。

新增聽眾「dns_name」( <add_listener_option> )

為這個可用性群組定義新的可用性群組接聽程式。 只有主要複本上才支援。

重要

在建立第一個聆聽器之前,請先閱讀 「為 Always On 可用性群組設定監聽器」。

在為特定可用群組建立監聽器後,請執行以下步驟:

  • 要求網路管理員將接聽程式的 IP 位址保留為專用。
  • 將接聽程式的 DNS 主機名稱提供給應用程式開發人員,以便在要求與這個可用性群組進行用戶端連接時,用於連接字串中。

dns_name

指定可用性群組接聽程式的 DNS 主機名稱。 接聽程式的 DNS 名稱在網域和 NetBIOS 中都必須是唯一的。

dns_name 是字串值。 此名稱只能包含英數字元、虛線 (-) 和連字號 (_) (順序不拘)。 DNS 主機名稱不區分大小寫。 最大長度是 63 個字元。

指定一個有意義的字串。 例如,如果是名為 AG1的可用性群組,有意義的 DNS 主機名稱會是 ag1-listener

重要

NetBIOS 只 dns_name辨識 . 如果你有兩個由同一個 Active Directory 控制的 WSFC 叢集,並且你嘗試在兩個叢集中建立可用性群組監聽器,名稱大小都超過 15 字元,且前綴相同 15 字元,就會收到錯誤,顯示虛擬網路名稱資源無法上線。 如需有關 DNS 名稱之前置詞命名規則的詳細資訊,請參閱< 指派網域名稱>。

加入可用性組

加入分散式可用性群組。 當你建立分散式可用性群組時,建立叢集上的可用性群組是主要可用性群組。 加入該分散式可用性群組的可用性群組是次要可用性群組。

<ag_name>

指定組成半組分散式可用性群組的可用性群組名稱。

LISTENER = '*TCP:// system-address:*port'

指定與可用性群組相關聯之接聽程式的 URL 路徑。

LISTENER 條款是必須的。

'*TCP:// system-address:*port'

指定與可用性群組相關聯之接聽程式的 URL。 URL 參數如下所示:

system-address

明確識別接聽程式的字串,例如系統名稱、完整功能變數名稱或IP位址。

港口

一個與可用性群組鏡像端點相關聯的埠號。 這不是聽眾的移植。

AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT |ASYNCHRONOUS_COMMIT }

規定主副本是否會等待次要可用性群組確認日誌記錄的硬化(寫入)後,才能在主要副本上提交交易至指定的主要資料庫。

SYNCHRONOUS_COMMIT

規定主副本會等待提交交易,直到收到確認交易已在次級可用性群組上加固。 你可以指定 SYNCHRONOUS_COMMIT 最多兩個可用群組,包括主要可用性群組。

ASYNCHRONOUS_COMMIT

指定主要複本會認可交易,而不等候這個次要可用性群組強化記錄。 你可以指定 ASYNCHRONOUS_COMMIT 最多兩個可用群組,包括主要可用性群組。

AVAILABILITY_MODE 條款是必須的。

FAILOVER_MODE = { 手動 }

指定分散式可用性群組的容錯移轉模式。

手動

可讓資料庫管理員啟用已規劃的手動容錯移轉或強制手動容錯移轉 (通常稱為「強制容錯移轉」)。

不支援自動故障轉移至次要可用性群組。

SEEDING_MODE = { AUTOMATIC |MANUAL }

指定一開始植入次要可用性群組的方式。

自動

啟用自動植入。 此方法會透過網路植入次要可用性群組。 此方法不需要您在次要可用性群組的複本上備份和還原主資料庫複本。

手動

指定手動植入。 此方法要求您在主要副本建立資料庫備份,並手動在次要可用性群組的副本中還原該備份。

修改可用性組

修改分散式可用性群組的任何可用性群組設定。 可修改的可用性群組清單包含可用性群組名稱及每個可用性群組的 WITH (...) 子句。

重要

您必須在主要可用性群組和次要可用性群組實例上執行此指令。

授予 CREATE ANY DATABASE

允許可用性群組代表主要副本建立資料庫,支援直接做種(SEEDING_MODE = AUTOMATIC)。 在次要副本加入可用性群組後,對每個支援直接播種的次要副本執行此參數。 需要 CREATE ANY DATABASE 權限。

拒絕建立任何資料庫

移除可用性群組能夠代表主要複本建立資料庫的能力。

<add_listener_option>

ADD LISTENER 請採取以下選項之一:

WITH DHCP [ ON { ('four_part_ipv4_address','four_part_ipv4_mask') } ]

指定可用性群組接聽程式會使用動態主機設定通訊協定 (DHCP)。 可選擇性地使用該 ON 子句來識別該監聽器所建立的網路。 DHCP 限制在單一子網路上,該子網路用於每個在可用性群組中架設可用性副本的伺服器實例。

重要

請勿在實際執行環境使用 DHCP。 如果發生停機且 DHCP IP 租約到期,則需要額外時間來註冊與監聽者 DNS 名稱相關的新 DHCP 網路 IP 位址,並影響用戶端連線。 但是,DHCP 適合用於設定開發和測試環境,以驗證可用性群組的基本功能,也適合與應用程式整合。

例如:

WITH DHCP ON ('10.120.19.0','255.255.254.0')

帶 IP ({ ('four_part_ipv4_address', 'four_part_ipv4_mask') |(『ipv6_address』) }[ , ...n ] ) [ , PORT = listener_port ]

可用性群組的監聽器不使用 DHCP,而是使用一個或多個靜態 IP 位址。 若要建立跨多個子網路的可用性群組,接聽程式組態中每個子網路都需要一個靜態 IP 位址。 對於給定的子網路,靜態 IP 位址可以是 IPv4 位址或 IPv6 位址。 聯絡你的網路管理員,取得每個承載新可用性副本子網的靜態 IP 位址。

例如:

WITH IP ( ('10.120.19.155','255.255.254.0') )

ipv4_address

一個IPv4四部分位址用於可用性群組監聽器。 例如: 10.120.19.155

ipv4_mask

一個用於可用性群組監聽器的 IPv4 四部分遮罩。 例如: 255.255.254.0

ipv6_address

一個用於可用性群組監聽器的 IPv6 位址。 例如: 2001::4898:23:1002:20f:1fff:feff:b3a3

埠 = listener_port

該子句指定的埠號(listener_port)供可用性群組監聽器 WITH IP 使用。 PORT 是選擇性的。

預設埠號 1433是支援的。 不過,你可以選擇不同的埠號。

例如: WITH IP ( ('2001::4898:23:1002:20f:1fff:feff:b3a3') ) , PORT = 7777

修改聽者「dns_name」( <modify_listener_option> )

修改這個可用性群組的現有可用性群組接聽程式。 只有主要複本上才支援。

<modify_listener_option>

MODIFY LISTENER 請採取以下選項之一:

新增 IP { ('four_part_ipv4_address', 'four_part_ipv4_mask') |(『ipv6_address』) }

將指定的 IP 位址加入至由 dns_name 所指定的可用性群組接聽程式。

埠 = listener_port

請參閱本節稍早有關這個引數的描述。

REMOVE IP { ('four_part_ipv4_address') |('ipv6_address') }

適用於:SQL Server 2025(17.x)及更新版本

從指定的可用性群組接聽程式中移除指定的IP位址。

重啟聽眾「dns_name

重新啟動與指定 DNS 名稱相關的監聽器。 只有主要複本上才支援。

移除聽者「dns_name

移除與指定 DNS 名稱相關的監聽器。 只有主要複本上才支援。

離線

讓線上的可用性群組離線。 同步認可資料庫不會遺失數據。

當可用性群組離線時,其資料庫將無法對客戶開放,且無法重新啟動可用性群組。 因此,只有在跨叢集遷移 Always On 可用性群組時,也就是將可用性群組資源遷移到新的 WSFC 叢集時,才使用這個 OFFLINE 選項。

如需詳細資訊,請參閱讓可用性群組離線 (SQL Server)

必要條件和限制

關於可用性副本及其主機伺服器實例與電腦的前提條件與限制,請參閱 Always On 可用性群組的前提條件、限制與建議

有關 Transact-SQL 帳單限制的資訊 AVAILABILITY GROUP ,請參閱 Always On 可用性群組的Transact-SQL 語單

權限

你需要 ALTER AVAILABILITY GROUP 取得可用性群組 CONTROL AVAILABILITY GROUP 、權限、 ALTER ANY AVAILABILITY GROUP 許可 CONTROL SERVER 或權限的權限。 你也需要 ALTER ANY DATABASE 取得許可。

範例

A。 將次要複本聯結至可用性群組

下列範例會將您連線到 AccountsAG 可用性群組的次要複本聯結至該複本。

ALTER AVAILABILITY GROUP AccountsAG JOIN;
GO

B. 強制故障轉移可用性群組

下列範例會強制 AccountsAG 可用性群組故障轉移至您已連線的次要複本。

ALTER AVAILABILITY GROUP AccountsAG FORCE_FAILOVER_ALLOW_DATA_LOSS;
GO

C. 在可用性群組的連線中強制加密

本節範例 強制加密 連接至 AccountsAG 可用性群組。

如果伺服器名稱出現在每個憑證中,且以任一 方法定義的方式,您可以省略以下 HostNameInCertificate 選項:

ALTER AVAILABILITY GROUP [AccountsAG]
   SET (
   CLUSTER_CONNECTION_OPTIONS = 'Encrypt=Strict')

如果你依照方法一操作,但憑證中沒有將伺服器名稱列為主旨替代名稱,你必須在HostNameInCertificate選項中指定主旨替代名稱中出現的值:

ALTER AVAILABILITY GROUP [AccountsAG]
   SET (
   CLUSTER_CONNECTION_OPTIONS = 'Encrypt=Strict;HostNameInCertificate=<Subject Alternative Name>')

如果你依照方法一操作,想用屬性ServerCertificate代替提供值:HostNameInCertificate

ALTER AVAILABILITY GROUP [AccountsAG]
   SET (
   CLUSTER_CONNECTION_OPTIONS = 'Encrypt=Strict;ServerCertificate=C:\Users\admin\SqlAGCertificate.cer')