高可用性/災害復原的 SQL Server Native Client 支援

本主題討論SQL Server Native Client可用性群組的 SQL Server 2012) Always On 新增 (支援。 如需可用性群組Always On的詳細資訊,請參閱可用性群組接聽程式、用戶端連線和應用程式容錯移轉 (SQL Server) 建立和設定可用性群組 (SQL Server) 容錯移轉叢集和 AlwaysOn 可用性群組 (SQL Server) 使用中次要複本: (AlwaysOn 可用性群組) 可讀取的次要複本。

您可以在連接字串中指定給定可用性群組的可用性群組接聽程式。 如果SQL Server Native Client應用程式連線到容錯移轉可用性群組中的資料庫,原始連線就會中斷,而且應用程式必須開啟新的連線,才能在容錯移轉之後繼續工作。

如果您未連線到可用性群組接聽程式,而且如果多個 IP 位址與主機名稱相關聯,SQL Server Native Client會循序逐一查看與 DNS 專案相關聯的所有 IP 位址。 如果 DNS 伺服器所傳回的第一個 IP 位址未繫結至任何網路介面卡 (NIC),這項作業可能會很費時。 連線到可用性群組接聽程式時,SQL Server Native Client嘗試平行建立所有 IP 位址的連線,如果連線嘗試成功,驅動程式將會捨棄任何擱置的連線嘗試。

注意

增加連接逾時並實作連接重試邏輯可提高應用程式連接到可用性群組的機率。 此外,因為連接可能會由於可用性群組容錯移轉而失敗,所以您應該實作連接重試邏輯,並重試失敗的連接,直到重新連接為止。

使用 MultiSubnetFailover 進行連接

在連接到 SQL Server 2012 可用性群組接聽程式或 SQL Server 2012 容錯移轉叢集執行個體時,永遠指定 MultiSubnetFailover=YesMultiSubnetFailover 對於 SQL Server 2012 中的所有可用性群組和容錯移轉叢集執行個體可促進更快的容錯移轉,並大幅縮短單一和多重子網路 AlwaysOn 拓撲的容錯移轉時間。 在多重子網路容錯移轉期間,用戶端會平行嘗試連接。 在子網容錯移轉期間,SQL Server Native Client會積極重試 TCP 連線。

連線 MultiSubnetFailover 屬性工作表示應用程式正在可用性群組或容錯移轉叢集實例中部署,而且SQL Server Native Client會嘗試連線到主要SQL Server實例上的資料庫,方法是嘗試連線到所有 IP 位址。 為連線指定 MultiSubnetFailover=Yes 時,用戶端會重試 TCP 連線,其速度比作業系統的預設 TCP 重新傳輸間隔更快。 這種方式可在容錯移轉 AlwaysOn 可用性群組或 AlwaysOn 容錯移轉叢集執行個體之後更快重新連線,且同時適用於單一和多重子網路可用性群組和容錯移轉叢集執行個體。

如需連接字串關鍵字的詳細資訊,請參閱搭配 SQL Server Native Client 使用連接字串關鍵字

當連接到可用性群組接聽程式或容錯移轉叢集執行個體以外的某個項目時,指定 MultiSubnetFailover=Yes 將會產生負面效能影響,而且不支援這樣的處理方式。

請使用下列指導方針,連接到可用性群組或容錯移轉叢集執行個體中的伺服器:

  • 在連接到單一子網路或多重子網路時,使用 MultiSubnetFailover 連接屬性;這會提高這兩種可用性群組接聽程式的效能。

  • 若要連接到可用性群組,在連接字串中指定可用性群組的可用性群組接聽程式做為伺服器。

  • 連線到設定超過 64 個 IP 位址的 SQL Server 執行個體會導致連線失敗。

  • 使用 MultiSubnetFailover 連線屬性之應用程式的行為不受驗證類型影響:SQL Server 驗證、Kerberos 驗證或 Windows 驗證。

  • 您可以增加 loginTimeout 的值,來容納容錯移轉時間並減少應用程式連接重試次數。

  • 不支援分散式工作階段。

如果唯讀路由不在作用中,在下列狀況下,連接到可用性群組中的次要複本位置將會失敗:

  1. 如果未設定次要複本位置接受連接。

  2. 如果應用程式使用 ApplicationIntent=ReadWrite (下文討論),而且已針對唯讀存取設定次要複本位置。

如果設定主要複本拒絕唯讀工作負載,而且連接字串包含 ApplicationIntent=ReadOnly,則連接會失敗。

從資料庫鏡像升級到使用多子重網路叢集

如果連接字串中有 MultiSubnetFailoverFailover_Partner 連接關鍵字,則會發生連接錯誤。 如果使用 MultiSubnetFailover ,而且SQL Server傳回容錯移轉夥伴回應,指出它是資料庫鏡像組的一部分,也會發生錯誤。

如果您將目前使用資料庫鏡像的SQL Server Native Client應用程式升級為多重子網案例,您應該移除 Failover_Partner 連接屬性,並將它 MultiSubnetFailover 取代為 設定 Yes 為 ,並將連接字串中的伺服器名稱取代為可用性群組接聽程式。 如果連接字串使用 Failover_PartnerMultiSubnetFailover=Yes,驅動程式會發生錯誤。 不過,如果連接字串使用 Failover_PartnerMultiSubnetFailover=No (或 ApplicationIntent=ReadWrite),應用程式就會使用資料庫鏡像。

如果可用性群組中的主要資料庫使用資料庫鏡像,而且如果在連接到主要資料庫 (而不是可用性群組接聽程式) 的連接字串中使用 MultiSubnetFailover=Yes,驅動程式會傳回錯誤。

指定應用程式意圖

ApplicationIntent=ReadOnly 時,用戶端在連接到啟用 AlwaysOn 的資料庫時會要求讀取工作負載。 伺服器會在連接時和在 USE 資料庫陳述式期間,只針對啟用 AlwaysOn 的資料庫強制執行此意圖。

ApplicationIntent 關鍵字不適用於舊版唯讀資料庫。

資料庫可以允許或不允許 AlwaysOn 目標資料庫上的讀取工作負載 (這會透過 PRIMARY_ROLESECONDARY_ROLE Transact-SQL 陳述式的 ALLOW_CONNECTIONS 子句來完成)。

ApplicationIntent 關鍵字用於啟用唯讀路由。

唯讀路由

唯讀路由是可確保資料庫的唯讀複本之可用性的功能。 若要啟用唯讀路由:

  1. 您必須連接到 AlwaysOn 可用性群組的可用性群組接聽程式。

  2. ApplicationIntent 連接字串關鍵字必須設為 ReadOnly

  3. 可用性群組必須由資料庫管理員設定為啟用唯讀路由。

使用唯讀路由的多個連接可能不會連接至相同的唯讀複本。 資料庫同步處理的變更或伺服器路由組態的變更,可能會導致用戶端連接至不同的唯讀複本。 若要確保所有唯讀要求連接至相同的唯讀複本,請勿將可用性群組接聽程式傳遞給 Server 連接字串關鍵字。 請改為指定唯讀執行個體的名稱。

唯讀路由可能比連接到主要複本的時間更長,因為唯讀路由先連接到主要複本,再尋找最佳的可讀取次要複本。 因此,您應該增加登入逾時。

ODBC

已新增兩個 ODBC 連接字串關鍵字,以支援SQL Server Native Client中的可用性群組Always On:

  • ApplicationIntent

  • MultiSubnetFailover

如需 SQL Server Native Client 中 ODBC 連接字串關鍵字的詳細資訊,請參閱搭配使用連接字串關鍵字搭配SQL Server Native Client

同等的連接屬性如下:

  • SQL_COPT_SS_APPLICATION_INTENT

  • SQL_COPT_SS_MULTISUBNET_FAILOVER

如需 SQL Server Native Client 中 ODBC 連接屬性的詳細資訊,請參閱SQLSetConnectAttr

MultiSubnetFailover 關鍵字的功能將會在使用 SQL Server Native Client 驅動程式的 ApplicationIntent ODBC 資料來源管理員中公開,從 2012 年SQL Server開始。

SQL Server Native Client ODBC 應用程式可以使用三個函式的其中一個來進行連線:

函式 描述
SQLBrowseConnect SQLBrowseConnect 傳回的伺服器清單不包括 VNN。 您只會看到伺服器清單,其中沒有任何指示,指出伺服器是獨立伺服器,或是 Windows Server 容錯移轉叢集中的主要或次要伺服器, (WSFC) 叢集,其中包含已針對Always On可用性群組啟用的兩個或多個SQL Server實例。 如果您連接到伺服器而且發生失敗狀況,可能是因為您已經連接到伺服器,而且 ApplicationIntent 設定與伺服器組態不相容。

因為 SQLBrowseConnect 無法辨識 Windows Server 容錯移轉叢集中的伺服器, (WSFC) 叢集中包含兩個或多個已針對Always On可用性群組啟用的SQL Server實例, SQLBrowseConnect 所以會 MultiSubnetFailover 忽略連接字串關鍵字。
SQLConnect SQLConnect 透過資料來源名稱 (DSN) 或連接屬性來支援 ApplicationIntentMultiSubnetFailover
SQLDriverConnect SQLDriverConnect 透過連接字串關鍵字、連接屬性或 DSN 來支援 ApplicationIntentMultiSubnetFailover

OLE DB

SQL Server Native Client中的 OLE DB 不支援 MultiSubnetFailover 關鍵字。

SQL Server Native Client中的 OLE DB 將支援應用程式意圖。 OLE DB 應用程式與 ODBC 應用程式的應用程式意圖將會有相同的行為 (請參閱上面的內容)。

新增了一個 OLE DB 連接字串關鍵字,以支援 SQL Server Native Client 中的 Always On 可用性群組:

  • Application Intent

如需SQL Server Native Client中連接字串關鍵字的詳細資訊,請參閱搭配使用連接字串關鍵字與SQL Server Native Client

同等的連接屬性如下:

  • SSPROP_INIT_APPLICATIONINTENT

  • DBPROP_INIT_PROVIDERSTRING

SQL Server Native Client OLE DB 應用程式可以使用其中一種方法來指定應用程式意圖:

IDBInitialize::Initialize
IDBInitialize::Initialize 會使用之前設定的屬性集合來初始化資料來源及建立資料來源物件。 將應用程式意圖指定為提供者屬性或是擴充屬性字串的一部分。

IDataInitialize::GetDataSource
IDataInitialize::GetDataSource 會採用可包含 Application Intent 關鍵字的輸入連接字串。

IDBProperties::GetProperties
IDBProperties::GetProperties 會擷取目前在資料來源上設定的屬性值。 您可以透過 DBPROP_INIT_PROVIDERSTRING 屬性和 SSPROP_INIT_APPLICATIONINTENT 屬性擷取 Application Intent 值。

IDBProperties::SetProperties
若要設定 ApplicationIntent 屬性值,請呼叫 IDBProperties::SetProperties 來傳入 SSPROP_INIT_APPLICATIONINTENT 屬性 (該屬性的值為 "ReadWrite" 或 "ReadOnly"),或是傳入 DBPROP_INIT_PROVIDERSTRING 屬性 (該屬性的值包含 "ApplicationIntent=ReadOnly" 或 "ApplicationIntent=ReadWrite")。

您可以在 [資料連結屬性] 對話方塊中,[全部] 索引標籤的 [應用程式的意圖屬性] 欄位內指定應用程式意圖。

當建立隱含連接時,隱含連接將會使用父連接的應用程式意圖設定。 同樣地,從相同資料來源建立的多個工作階段將會繼承資料來源的應用程式意圖設定。

另請參閱

SQL Server Native Client 功能
搭配 SQL Server Native Client 使用連接字串關鍵字