CREATE AVAILABILITY GROUP (Transact-SQL)

適用于:SQL Server (所有支援的版本)

如果已針對Always On可用性群組功能啟用SQL Server實例,則建立新的可用性群組。

重要

在您想要作為新可用性群組初始主要複本之SQL Server實例上執行 CREATE AVAILABILITY GROUP。 這個伺服器執行個體必須位於 Windows Server 容錯移轉叢集 (WSFC) 節點。

主題連結圖示Transact-SQL 語法慣例

Syntax

  
CREATE AVAILABILITY GROUP group_name  
   WITH (<with_option_spec> [ ,...n ] )  
   FOR [ DATABASE database_name [ ,...n ] ]  
   REPLICA ON <add_replica_spec> [ ,...n ]  
   AVAILABILITY GROUP ON <add_availability_group_spec> [ ,...2 ]  
   [ LISTENER 'dns_name' ( <listener_option> ) ]  
[ ; ]  
  
<with_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 }  
  | [ BASIC | DISTRIBUTED | CONTAINED [ REUSE_SYSTEM_DATABASES ] ]
  | REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT = { integer }
  | CLUSTER_TYPE = { WSFC | EXTERNAL | NONE }
 
  
<add_replica_spec>::=  
  <server_instance> WITH  
    (  
       ENDPOINT_URL = 'TCP://system-address:port',  
       AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT | ASYNCHRONOUS_COMMIT | CONFIGURATION_ONLY },  
       FAILOVER_MODE = { AUTOMATIC | MANUAL | EXTERNAL }  
       [ , <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 = { ( '<server_instance>' ) ] 
     } )  
     | SESSION_TIMEOUT = integer  
  
<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 }  
    )  
  
<listener_option> ::=  
   {  
      WITH DHCP [ ON ( <network_subnet_option> ) ]  
    | WITH IP ( { ( <ip_address_option> ) } [ , ...n ] ) [ , PORT = listener_port ]  
   }  
  
  <network_subnet_option> ::=  
     'ip4_address', 'four_part_ipv4_mask'    
  
  <ip_address_option> ::=  
     {   
        'ip4_address', 'pv4_mask'  
      | 'ipv6_address'  
     }  
  

注意

若要檢視 SQL Server 2014 與更早版本的 Transact-SQL 語法,請參閱舊版文件

引數

group_name

指定新的可用性群組名稱。 group_name必須是有效的SQL Server identifier,而且必須在 WSFC 叢集中的所有可用性群組中是唯一的。 可用性群組名稱的最大長度為 128 個字元。

AUTOMATED_BACKUP_PREFERENCE = { PRIMARY |SECONDARY_ONLY |SECONDARY |NONE }

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

支援的值如下所示:

PRIMARY

指定備份一定要在主要複本上進行。 如果當您在次要複本上執行備份時,需要不支援的備份功能 (例如建立差異備份),這個選項會很實用。

重要

如果您計畫要使用記錄傳送來準備可用性群組的任何次要資料庫,請將自動備份喜好設定設為 [主要],直到所有次要資料庫都已經準備完成並且聯結至可用性群組為止。

SECONDARY_ONLY

指定絕對不能在主要複本上執行備份。 如果主要複本是唯一的線上複本,不應該進行備份。

SECONDARY

指定應該在次要複本上進行備份,但是主要複本是唯一線上複本的情況例外。 在此情況下,應該在主要複本上進行備份。 此為預設行為。

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

重要

不會強制執行 AUTOMATED_BACKUP_PREFERENCE 設定。 這個喜好設定的解譯取決於您在給定可用性群組之資料庫的備份作業中所編寫的邏輯 (如果有的話)。 自動備份喜好設定對於特定備份沒有任何影響。 如需詳細資訊,請參閱在可用性複本上設定備份 (SQL Server)

注意

若要檢視現有可用性群組的自動備份喜好設定,請選取 sys.availability_groups 目錄檢視的 automated_backup_preferenceautomated_backup_preference_desc 資料行。 此外, sys.fn_hadr_backup_is_preferred_replica (Transact-SQL) 可用來判斷慣用的備份複本。 此函式會針對至少其中一個複本傳回 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_LEVEL 和 HEALTH_CHECK_TIMEOUT 值會針對給定群組定義「彈性容錯移轉原則」。 這個具彈性的容錯移轉原則讓您能夠更精確控制哪些條件必須造成自動容錯移轉。 如需詳細資訊,請參閱可用性群組自動容錯移轉的彈性容錯移轉原則 (SQL Server)

HEALTH_CHECK_TIMEOUT = 毫秒

指定在 WSFC 叢集假設伺服器執行個體緩慢或沒有回應之前,sp_server_diagnostics 系統預存程序傳回伺服器健全狀況資訊的等候時間 (以毫秒為單位)。 HEALTH_CHECK_TIMEOUT 是在群組層級上設定,但是只有在為具有自動容錯移轉的同步認可可用性模式 (AVAILABILITY_MODE = SYNCHRONOUS_COMMIT) 設定的可用性複本上才會顯出重要性。 此外,只有當主要和次要複本已設定自動容錯移轉模式 (FAILOVER_MODE = AUTOMATIC) 而且次要複本目前與主要複本同步時,健康情況檢查逾時才可以觸發自動容錯移轉。

預設 HEALTH_CHECK_TIMEOUT 值為 30000 毫秒 (30 秒)。 最小值為 15000 毫秒 (15 秒),最大值為 4294967295 毫秒。

重要

sp_server_diagnostics 不會在資料庫層級執行健全狀況檢查。

DB_FAILOVER = { ON |OFF }

指定當主要複本上的資料庫離線時要採取的回應。 設定為 ON 時,若在可用性群組中針對資料庫有 ONLINE 以外的任何狀態,就會觸發自動容錯移轉。 當此選項設定為 OFF 時,只有執行個體的健康情況會用來觸發自動容錯移轉。

如需此設定的詳細資訊,請參閱資料庫層級健康情況偵測選項

DTC_SUPPORT = { PER_DB |NONE }

適用于:從 SQL Server 2016 (13.x) ) 開始SQL Server (

指定是否透過分散式交易協調器 (DTC) 支援跨資料庫交易。 只有在 2016 SQL Server 2016 (13.x) 才支援跨資料庫交易。 PER_DB 會建立具有針對這些交易之支援的可用性群組。 如需詳細資訊,請參閱適用于Always On可用性群組和資料庫鏡像的跨資料庫交易和分散式交易 (SQL Server)

BASIC

適用于:從 SQL Server 2016 (13.x) ) 開始SQL Server (

用來建立基本可用性群組。 基本可用性群組具有單一資料庫及兩個複本 (主要複本及次要複本) 的限制。 此選項是用來取代 SQL Server Standard 版本上已淘汰的資料庫鏡像功能。 如需詳細資訊,請參閱基本可用性群組 (Always On可用性群組) 。 從 2016 SQL Server 2016 (13.x) 開始支援基本可用性群組。

DISTRIBUTED

適用于:從 SQL Server 2016 (13.x) ) 開始SQL Server (

用來建立分散式可用性群組。 此選項是搭配 AVAILABILITY GROUP ON 參數使用,以將位於個別 Windows Server 容錯移轉叢集的兩個可用性群組連線在一起。 如需詳細資訊,請參閱分散式可用性群組 (Always On可用性群組) 。 從 SQL Server 2016 (13.x) 開始,支援分散式可用性群組。

CONTAINED [REUSE_SYSTEM_DATABASES]

SQL Server 2022 (16.x) 引進。

建立自主可用性群組。 此選項可用來建立具有其本身 mastermsdb 資料庫的可用性群組,這些群組會在可用性群組中的一組複本之間保持同步。
REUSE_SYSTEM_DATABASES 選項會使舊版可用性群組的內含 mastermsdb 資料庫用於建立這個新的可用性群組。 如需自主可用性群組的詳細資訊,請參閱自主可用性群組概觀 (Always On可用性群組)

REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT

適用于:從 2017 SQL Server (14.x) ) 開始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 Server停止回應,則裝載主要複本的SQL Server會將次要複本標示為 NOT SYNCHRONIZED 並繼續。 當沒有回應的資料庫重新上線時,它會處於「未同步」狀態,而且複本會標示為狀況不良,直到主要複本可以再次同步處理為止。 此設定可確保主要複本在認可每個交易的複本數目下限之前不會繼續進行。 如果無法使用最小複本數目,則主要複本上的認可會失敗。 針對叢集類型 EXTERNAL,設定會在可用性群組被新增到叢集資源時變更。 請參閱可用性群組設定的高可用性和資料保護

不支援 CREATE AVAILABILITY GROUP。 不過,從 2022 SQL Server 2022 (16.x) 開始,您可以使用 ALTER AVAILABILITY GROUP 來設定REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT。 請參閱 ALTER AVAILABILITY GROUP (Transact-SQL)

CLUSTER_TYPE

適用于:SQL Server (從 2017 SQL Server 2017 (14.x) ) 開始。

用來識別可用性群組是否位於 Windows Server 容錯移轉叢集 (WSFC) 上。 當可用性群組是位於 Windows Server 容錯移轉叢集上的容錯移轉叢集執行個體上時,會設為 WSFC。 當叢集是由非 Windows Server 容錯移轉叢集的叢集管理員 (例如 Linux Pacemaker) 所管理時,會設為 EXTERNAL。 當可用性群組不針對叢集使用 WSFC 時,會設為 NONE。 例如,當可用性群組包含不具有叢集管理員的 Linux 伺服器時。

DATABASE database_name

指定本機SQL Server實例 (上一或多個使用者資料庫的清單,也就是您要在其中建立可用性群組的伺服器實例) 。 您可以為可用性群組指定多個資料庫,但每個資料庫只能屬於一個可用性群組。 如需可用性群組可支援之資料庫類型的資訊,請參閱可用性群組 (SQL Server) 必要條件、限制 Always On和建議。 若要了解哪些本機資料庫已屬於可用性群組,請參閱 sys.databases 目錄檢視中的 replica_id 資料行。

DATABASE 子句是選擇性的。 如果省略,新可用性群組會是空的。

建立可用性群組之後,請連線至裝載次要複本的每個伺服器執行個體,然後準備每個次要資料庫,並將其聯結至該可用性群組。 如需詳細資訊,請參閱在Always On次要資料庫上啟動資料移動 (SQL Server)

注意

之後,您可以在裝載目前主要複本的伺服器執行個體上,將適合的資料庫加入至可用性群組。 您也可以從可用性群組中移除資料庫。 如需詳細資訊,請參閱 ALTER AVAILABILITY GROUP (Transact-SQL)

REPLICA ON

指定要在新的可用性群組中裝載可用性複本的 SQL 伺服器執行個體 (一個到五個)。 每個複本是由後面接著 WITH (...) 子句的伺服器執行個體位址所指定。 您至少必須指定本機伺服器執行個體,這會成為初始主要複本。 您最多也可以選擇指定四個次要複本。

您必須將每個次要複本聯結至可用性群組。 如需詳細資訊,請參閱 ALTER AVAILABILITY GROUP (Transact-SQL)

注意

如果您在建立可用性群組時指定少於四個次要複本,您可以隨時使用 ALTER AVAILABILITY GROUPTransact-SQL 語句來指定額外的次要複本。 您也可以使用這個陳述式,從現有的可用性群組移除任何次要複本。

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容錯移轉夥伴,請使用此專案。 在 FCI 伺服器實例上執行 SELECT @@SERVERNAME 會傳回其整個 'FCI_network_name[\instance_name]' 字串 (,這是完整複本名稱) 。

instance_name

這是由system_name或 FCI_network_name 所裝載已啟用 HADR 服務的SQL Server實例名稱。 如果是預設伺服器執行個體, instance_name 為選擇性。 執行個體名稱不區分大小寫。 在具名執行個體上,這個值名稱與執行 select ServerProperty(N'InstanceName'); 所傳回的值相同。

\

這個分隔符號只在指定 instance_name 時使用,以便與 system_nameFCI_network_name 區隔。

如需 WSFC 節點和伺服器實例必要條件的相關資訊,請參閱Always On可用性群組的必要條件、限制和建議 (SQL Server)

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

指定裝載您在目前 REPLICA ON 子句中定義之可用性複本 SQL Server之實例上資料庫鏡像端點的 URL 路徑。

ENDPOINT_URL 子句是必要的。 如需詳細資訊,請參閱在新增或修改可用性複本時指定端點 URL (SQL Server)

'TCP:// system-addressport'

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

system-address

這是明確識別目的地電腦系統的字串,例如系統名稱、完整網域名稱或 IP 位址。

連接埠

這是與ENDPOINT_URL選項) 之夥伴伺服器實例鏡像端點相關聯的埠號碼 (,或伺服器實例之 Database Engine (針對READ_ONLY_ROUTING_URL選項) 所使用的埠號碼。

AVAILABILITY_MODE = {SYNCHRONOUS_COMMIT |ASYNCHRONOUS_COMMIT |CONFIGURATION_ONLY }

SYNCHRONOUS_COMMIT 或 ASYNCHRONOUS_COMMIT 能指定在主要複本可以認可特定主要資料庫上的交易之前,主要複本是否必須等候次要複本認可將記錄檔記錄強化 (寫入) 至磁碟。 相同主要複本上不同資料庫的交易可以獨立認可。 SQL Server 2017 (14.x) CU1 引進CONFIGURATION_ONLY。 CONFIGURATION_ONLY複本僅適用于具有 CLUSTER_TYPE = EXTERNALCLUSTER_TYPE = NONE 的可用性群組。

SYNCHRONOUS_COMMIT

指定在這個次要複本上強化交易之前,主要複本會等候認可交易 (同步-認可模式)。 您最多可以為三個複本指定 SYNCHRONOUS_COMMIT,包括主要複本在內。

ASYNCHRONOUS_COMMIT

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

CONFIGURATION_ONLY

指定主要複本會同步認可哥用性群組組態中繼資料至此複本上的 master 資料庫。 複本將不會包含使用者資料。 此選項:

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

  • 要求 CONFIGURATION_ONLY 複本的資料鏡像端點類型必須是 WITNESS

  • 這無法改變。

  • 這在 CLUSTER_TYPE = WSFC 時無效。

  • 當 設定 configuration_only 為 複本時 availability_mode ,不支援選項 failover_modeseeding_mode此處會顯示範例。

    如需詳細資訊,請參閱僅限設定複本

AVAILABILITY_MODE 子句是必要的。 如需詳細資訊,請參閱可用性模式 (Always On可用性群組)

FAILOVER_MODE = { AUTOMATIC | MANUAL }

指定您所定義之可用性複本的容錯移轉模式。

AUTOMATIC

啟用自動容錯移轉。 只有當您也指定 AVAILABILITY_MODE = SYNCHRONOUS_COMMIT 時,才會支援這個選項。 您可以為兩個可用性複本指定 AUTOMATIC,包括主要複本在內。

注意

SQL Server 容錯移轉叢集執行個體 (FCI) 不支援依照可用性群組進行自動容錯移轉,因此任何由 FCI 裝載的可用性複本只能設定為手動容錯移轉。

MANUAL

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

FAILOVER_MODE 子句是必要的。 不遺失資料的手動容錯移轉以及強制容錯移轉 (可能遺失資料) 這兩種類型的手動容錯移轉會在不同情況下支援。 如需詳細資訊,請參閱容錯移轉和容錯移轉模式 (Always On可用性群組)

SEEDING_MODE = { AUTOMATIC |MANUAL }

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

AUTOMATIC

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

注意

若要直接植入,您必須使用GRANT CREATE ANY DATABASE選項呼叫ALTER AVAILABILITY GROUP,以允許在每個次要複本上建立資料庫。

MANUAL

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

BACKUP_PRIORITY = n

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

  • 1..100 表示可以選擇可用性複本來執行備份。 1 表示最低優先權,100 表示最高優先權。 如果 BACKUP_PRIORITY = 1,則只有當目前沒有更高優先權的可用性複本可用時,才會選擇此可用性複本來執行備份。

  • 0 表示這個可用性複本不會用來執行備份。 例如,這對於您永遠不希望將備份容錯移轉到其中的遠端可用性複本十分有用。

如需詳細資訊,請參閱使用中次要複本:次要複本上的備份 (Always On可用性群組)

SECONDARY_ROLE ( ... )

指定會在此可用性複本目前擁有次要角色 (亦即,每當它是次要複本時) 時生效的角色專屬設定。 在括弧內,指定或兩個次要角色選項。 如果您同時指定兩個選項,則使用逗號分隔清單。

次要角色選項如下:

ALLOW_CONNECTIONS = { NO | READ_ONLY | ALL }

指定執行次要角色之給定可用性複本 (也就是做為次要複本) 的資料庫是否可接受來自用戶端的連接,下列其中一個值:

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

READ_ONLY

只允許連線到 Application Intent 屬性設定為 ReadOnly 之次要複本中的資料庫。 如需此屬性的詳細資訊,請參閱搭配使用連接字串關鍵字搭配SQL Server Native Client

ALL

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

如需詳細資訊,請參閱使用中次要複本:可讀取的次要複本 (Always On可用性群組)

READ_ONLY_ROUTING_URL ='TCP:// system-addressport'

指定向此可用性複本路由傳送讀取意圖連接要求所使用的 URL。 這是 Database Engine 接聽的 URL。 一般而言,SQL Server的預設實例會在 TCP 埠 1433 上接聽。

針對具名執行個體,您可以查詢 sys.dm_tcp_listener_states 動態管理檢視的 porttype_desc 資料行來取得連接埠號碼。 伺服器執行個體會使用 Transact-SQL 接聽程式 (type_desc='TSQL' )。

如需計算複本之唯讀路由 URL 的詳細資訊,請參閱計算 Always On 的 read_only_routing_url \(英文\)。

注意

針對SQL Server的具名實例,應該將 Transact-SQL 接聽程式設定為使用特定埠。 如需詳細資訊,請參閱設定伺服器接聽特定 TCP 通訊埠 (SQL Server 組態管理員)

PRIMARY_ROLE ( ... )

指定會在此可用性複本目前擁有主要角色 (亦即,每當它是主要複本時) 時生效的角色專屬設定。 在括弧內,指定或兩個主要角色選項。 如果您同時指定兩個選項,則使用逗號分隔清單。

主要角色選項如下:

ALLOW_CONNECTIONS = { READ_WRITE | ALL }

指定執行主要角色之給定可用性複本 (也就是做為主要複本) 的資料庫可從用戶端接受的連接類型,下列其中一個值:

READ_WRITE

不允許 Application Intent 連接屬性設為 ReadOnly 的連接。 當 Application Intent 屬性設為 ReadWrite 或是未設定 Application Intent 連接屬性時,便會允許連接。 如需 Application Intent 連接屬性的詳細資訊,請參閱搭配使用連接字串關鍵字與 SQL Server Native Client

ALL

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

READ_ONLY_ROUTING_LIST = { ('_server_instance_' [ , ...n ] ) |NONE }

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

  • 設定為允許所有連接或唯讀連接 (請參閱 SECONDARY_ROLE 選項的 ALLOW_CONNECTIONS 引數,如上所示)。

  • 定義其唯讀的路由 URL (請參閱 SECONDARY_ROLE 選項的 READ_ONLY_ROUTING_URL 引數,如上所示)。

READ_ONLY_ROUTING_LIST 值如下:

server_instance

指定在次要角色下執行時,屬於可讀取次要複本之複本主機之SQL Server實例的位址。

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

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

指定當此可用性複本是主要複本時,不支援唯讀路由。 此為預設行為。

READ_WRITE_ROUTING_URL = { ('server_instance') }

適用于:從 SQL Server 2019 (15.x) ) 開始SQL Server (

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

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

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

SESSION_TIMEOUT = 整數

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

重要

我們建議您讓逾時期限保持在 10 秒或更久。

如需會話逾時期間的詳細資訊,請參閱可用性群組概觀 Always On (SQL Server)

AVAILABILITY GROUP ON

指定構成分散式可用性群組的兩個可用性群組。 每個可用性群組都屬於它自己的 Windows Server 容錯移轉叢集 (WSFC)。 當您建立分散式可用性群組時,目前SQL Server實例上的可用性群組會變成主要可用性群組。 第二個可用性群組會變成次要可用性群組。

您需要將次要可用性群組聯結至分散式可用性群組。 如需詳細資訊,請參閱 ALTER AVAILABILITY GROUP (Transact-SQL)

ag_name

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

LISTENER_URL ='TCP:// system-addressport'

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

LISTENER_URL 子句是必要的。

'TCP:// system-addressport'

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

system-address

這是能明確識別接聽程式的字串,例如系統名稱、完整網域名稱或 IP 位址。

port

這是與可用性群組之鏡像端點相關聯的連接埠號碼。 請注意,這不是接聽程式的連接埠。

AVAILABILITY_MODE = { SYNCHRONOUS_COMMIT |ASYNCHRONOUS_COMMIT |CONFIGURATION_ONLY }

指定在主要複本可以認可指定主要資料庫上的交易之前,主要複本是否必須等候次要可用性群組認可將記錄檔記錄強化 (寫入) 至磁碟。

SYNCHRONOUS_COMMIT

指定在次要可用性群組上強化交易之前,主要複本必須等候認可交易。 您最多可以為兩個可用性群組指定 SYNCHRONOUS_COMMIT,包括主要可用性群組在內。

ASYNCHRONOUS_COMMIT

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

AVAILABILITY_MODE 子句是必要的。

FAILOVER_MODE = { MANUAL }

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

MANUAL

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

FAILOVER_MODE 子句是必要的,且 MANUAL 是唯一的選項。 不支援自動容錯移轉至次要可用性群組。

SEEDING_MODE = { AUTOMATIC |MANUAL }

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

AUTOMATIC

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

MANUAL

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

LISTENER 'dns_name' (listener_option )

為這個可用性群組定義新的可用性群組接聽程式。 LISTENER 是選擇性引數。

重要

在您建立第一個接聽程式之前,強烈建議您閱讀建立或設定可用性群組接聽程式 (SQL Server)

針對給定的可用性群組建立接聽程式之後,我們強烈建議您執行以下操作:

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

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

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

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

重要

NetBIOS 只會辨識 DNS 名稱中的前 15 個字元。 如果您有兩個由相同 Active Directory 所控制的 WSFC 叢集,而且嘗試使用超過 15 個字元的名稱以及完全相同的 15 個字元前置詞,在這兩個叢集中建立可用性群組接聽程式,就會收到一則錯誤,指出系統無法讓虛擬網路名稱資源上線。 如需有關 DNS 名稱之前置詞命名規則的詳細資訊,請參閱< 指派網域名稱>。

listener_option

LISTENER 會採用下列 < 其中一個listener_option > 選項:

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')

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

指定可用性群組接聽程式會使用一個或多個靜態 IP 位址,而不使用 DHCP。 若要建立跨多個子網路的可用性群組,接聽程式組態中每個子網路都需要一個靜態 IP 位址。 對於給定的子網路,靜態 IP 位址可以是 IPv4 位址或 IPv6 位址。 請與網路系統管理員連絡以取得會主控新可用性群組複本之每個子網路的靜態 IP 位址。

例如:

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

ip4_address

指定可用性群組接聽程式的 IPv4 四部分位址。 例如: 10.120.19.155

ipv4_mask

指定可用性群組接聽程式的 IPv4 四部分遮罩。 例如: 255.255.254.0

ipv6_address

指定可用性群組接聽程式的 IPv6 位址。 例如: 2001::4898:23:1002:20f:1fff:feff:b3a3

PORT = listener_port

指定將供 WITH IP 子句所指定之可用性群組接聽程式使用的連接埠號碼 (listener_port)。 PORT 為選擇性。

支援預設通訊埠編號 1433。 但是,如果您有安全考量,我們建議您使用不同的通訊埠編號。

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

必要條件和限制

如需建立可用性群組的必要條件相關資訊,請參閱可用性群組的必要條件、限制和建議 Always On (SQL Server)

如需 AVAILABILITY GROUP Transact-SQL 語句限制的相關資訊,請參閱Always On可用性群組的 Transact-SQL 語句概觀 (SQL Server) 。

安全性

權限

需要系統管理員 (sysadmin) 固定伺服器角色的成員資格,以及 CREATE AVAILABILITY GROUP 伺服器權限、ALTER ANY AVAILABILITY GROUP 權限或 CONTROL SERVER 權限。

範例

A. 在次要複本、彈性容錯移轉原則和連線存取上設定備份

下列範例會針對兩個使用者資料庫 MyAgThisDatabase 建立名為 ThatDatabase 的可用性群組。 下表摘要說明針對選項指定的值,這些選項是針對整個可用性群組所設定。

群組選項 設定 描述
AUTOMATED_BACKUP_PREFERENCE SECONDARY 這個自動備份喜好設定會指示應該在次要複本上進行備份,但是主要複本是唯一線上複本 (這是預設行為) 的情況例外。 若要讓 AUTOMATED_BACKUP_PREFERENCE 設定有任何效果,您必須在可用性資料庫上撰寫備份工作的指令碼,以便將自動備份喜好設定納入考量。
FAILURE_CONDITION_LEVEL 3 這個失敗狀況層級會指定應該在嚴重 SQL Server 內部錯誤發生時起始自動容錯移轉,例如執行緒同步鎖定遭到遺棄、嚴重的寫入存取違規或是傾印過多。
HEALTH_CHECK_TIMEOUT 600000 這個健康情況檢查逾時值 (60 秒) 會指定 WSFC 叢集將等待 60000 毫秒,讓 sp_server_diagnostics 系統預存程序傳回關於伺服器執行個體的伺服器健全狀況資訊,這個伺服器執行個體會在叢集假設主機伺服器執行個體緩慢或無回應之前,自動裝載同步認可的複本。 (預設值為 30000 毫秒)。

三個可用性複本會由 COMPUTER01COMPUTER02COMPUTER03 電腦上的預設伺服器執行個體所主控。 下表摘要說明針對每個複本之複本選項所指定的值。

複本選項 COMPUTER01 的設定 COMPUTER02 的設定 COMPUTER03 的設定 描述
ENDPOINT_URL TCP://COMPUTER01:5022 TCP://COMPUTER02:5022 TCP://COMPUTER03:5022 在此範例中,這些系統是相同的網域,因此端點 URL 可以使用電腦系統的名稱做為系統位址。
AVAILABILITY_MODE SYNCHRONOUS_COMMIT SYNCHRONOUS_COMMIT ASYNCHRONOUS_COMMIT 其中兩個複本會使用同步認可模式。 同步時,它們支援容錯移轉,但不會失去資料。 使用非同步認可可用性模式的第三個複本。
FAILOVER_MODE AUTOMATIC AUTOMATIC MANUAL 同步認可複本支援自動容錯移轉和計畫的手動容錯移轉。 同步認可的可用性模式複本僅支援強制手動容錯移轉。
BACKUP_PRIORITY 30 30 90 更高的優先順序 90 會被指派給非同步認可的複本,而非同步認可的副本。 備份會傾向於在主控非同步認可複本的伺服器執行個體上進行。
SECONDARY_ROLE ( ALLOW_CONNECTIONS = NO,

READ_ONLY_ROUTING_URL = 'TCP://COMPUTER01:1433' )
( ALLOW_CONNECTIONS = NO,

READ_ONLY_ROUTING_URL = 'TCP://COMPUTER02:1433' )
( ALLOW_CONNECTIONS = READ_ONLY,
READ_ONLY_ROUTING_URL = 'TCP://COMPUTER03:1433' )
只有非同步認可的複本會當做可讀取的次要複本。

指定電腦名稱和預設的 Database Engine 通訊埠編號 (1433)。

此引數是選擇性的。
PRIMARY_ROLE ( ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = (COMPUTER03) )
( ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = (COMPUTER03) )
( ALLOW_CONNECTIONS = READ_WRITE,
READ_ONLY_ROUTING_LIST = NONE )
在主要角色中,所有複本都會拒絕讀取意圖的連線嘗試。

如果本機複本是以次要角色執行,則會將讀取意圖的連線要求路由傳送至 COMPUTER03。 當該複本以主要角色執行時,就會停用唯讀路由。

此引數是選擇性的。
SESSION_TIMEOUT 10 10 10 此範例會指定預設的工作階段逾時值 (10)。 此引數是選擇性的。

最後,此範例會指定選用的 LISTENER 子句,以建立新可用性群組的可用性群組接聽程式。 系統會針對此接聽程式指定唯一的 DNS 名稱 MyAgListenerIvP6。 兩個複本位於不同的子網路上,因此接聽程式必須使用靜態 IP 位址。 針對這兩個可用性複本,WITH IP 子句都會指定使用 IPv6 格式的靜態 IP 位址 2001:4898:f0:f00f::cf3c2001:4898:e0:f213::4ce2。 此範例也會指定使用選用的 PORT 引數指定通訊埠 60173 做為接聽程式通訊埠。

CREATE AVAILABILITY GROUP MyAg   
   WITH (  
      AUTOMATED_BACKUP_PREFERENCE = SECONDARY,  
      FAILURE_CONDITION_LEVEL  =  3,   
      HEALTH_CHECK_TIMEOUT = 600000  
       )  
  
   FOR   
      DATABASE  ThisDatabase, ThatDatabase   
   REPLICA ON   
      'COMPUTER01' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER01:5022',  
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = AUTOMATIC,  
         BACKUP_PRIORITY = 30,  
         SECONDARY_ROLE (ALLOW_CONNECTIONS = NO,   
            READ_ONLY_ROUTING_URL = 'TCP://COMPUTER01:1433' ),
         PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,   
            READ_ONLY_ROUTING_LIST = (COMPUTER03) ),  
         SESSION_TIMEOUT = 10  
         ),   
  
      'COMPUTER02' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER02:5022',  
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = AUTOMATIC,  
         BACKUP_PRIORITY = 30,  
         SECONDARY_ROLE (ALLOW_CONNECTIONS = NO,   
            READ_ONLY_ROUTING_URL = 'TCP://COMPUTER02:1433' ),  
         PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,   
            READ_ONLY_ROUTING_LIST = (COMPUTER03) ),  
         SESSION_TIMEOUT = 10  
         ),   
  
      'COMPUTER03' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER03:5022',  
         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,  
         FAILOVER_MODE =  MANUAL,  
         BACKUP_PRIORITY = 90,  
         SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY,   
            READ_ONLY_ROUTING_URL = 'TCP://COMPUTER03:1433' ),  
         PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,   
            READ_ONLY_ROUTING_LIST = NONE ),  
         SESSION_TIMEOUT = 10  
         );
GO  
ALTER AVAILABILITY GROUP [MyAg]
  ADD LISTENER 'MyAgListenerIvP6' ( WITH IP ( ('2001:db88:f0:f00f::cf3c'),('2001:4898:e0:f213::4ce2') ) , PORT = 60173 );   
GO  

相關工作

另請參閱

ALTER AVAILABILITY GROUP (Transact-SQL)
ALTER DATABASE SET HADR (Transact-SQL)
DROP AVAILABILITY GROUP (Transact-SQL)
針對可用性群組組態Always On進行疑難排解 (SQL Server)
可用性群組 (SQL Server) Always On概觀
可用性群組接聽程式、用戶端連線和應用程式容錯移轉 (SQL Server)