疑難排解 AlwaysOn 可用性群組組態 (SQL Server)
此主題中的資訊可協助您疑難排解為 AlwaysOn 可用性群組 設定伺服器執行個體時常見的問題。 一般組態問題包含 AlwaysOn 可用性群組 未啟用、不正確地設定帳戶、資料庫鏡像端點不存在、端點無法存取 (SQL Server 錯誤 1418)、網路存取不存在,以及聯結資料庫命令失敗 (SQL Server 錯誤 35250)。
[!附註]
請確定您符合 AlwaysOn 可用性群組 必要條件。 如需詳細資訊,請參閱<AlwaysOn 可用性群組的必要條件、限制和建議 (SQL Server)>。
本主題內容:
章節 |
描述 |
---|---|
AlwaysOn 可用性群組未啟用 |
如果 SQL Server 執行個體未啟用 AlwaysOn 可用性群組,此執行個體不會支援可用性群組建立,也無法裝載任何可用性複本。 |
帳戶 |
討論正確設定在底下執行 SQL Server 之帳戶的需求。 |
端點 |
討論如何診斷伺服器執行個體的資料庫鏡像端點問題。 |
系統名稱 |
摘要說明在端點 URL 中指定伺服器執行個體之系統名稱的替代方式。 |
網路存取 |
說明裝載可用性複本的每個伺服器執行個體必須要透過 TCP 存取其他伺服器執行個體之通訊埠的需求。 |
端點存取 (SQL Server 錯誤 1418) |
包含有關此 SQL Server 錯誤訊息的資訊。 |
聯結資料庫失敗 (SQL Server 錯誤 35250) |
討論因為與主要複本的連接不在作用中,次要資料庫聯結至可用性群組失敗的可能原因和解決方案。 |
唯讀路由未正確運作 |
|
相關工作 |
在《SQL Server 2012 線上叢書》中包含工作導向主題的清單,這些主題與疑難排解可用性群組組態特別相關。 |
相關內容 |
包含《SQL Server 線上叢書》外部的相關資源清單。 |
AlwaysOn 可用性群組 功能必須在每個 SQL Server 2012 執行個體上啟用。 如需詳細資訊,請參閱<啟用和停用 AlwaysOn 可用性群組 (SQL Server)>。
必須正確設定用來執行 SQL Server 的帳戶。
帳戶有正確的權限嗎?
如果夥伴是以相同網域使用者帳戶執行,則正確使用者登入會自動存在於兩個 master 資料庫中。 這樣可簡化資料庫的安全性組態,建議您使用。
如果兩個伺服器執行個體是以不同的帳戶執行,則每一個帳戶的登入都必須在遠端伺服器執行個體的 master 中建立,而且該登入必須被授與 CONNECT 權限,才能連接到該伺服器執行個體的資料庫鏡像端點。 如需詳細資訊,請參閱<設定資料庫鏡像或 AlwaysOn 可用性群組的登入帳戶 (SQL Server)>。
如果 SQL Server 服務是以內建帳戶執行 (例如本機系統、本機服務或網路服務,或是非網域帳戶),您必須將憑證用於端點驗證。 如果服務帳戶使用同一個網域中的網域帳戶,您可以選擇在所有複本位置上授與每一個服務帳戶的 CONNECT 存取,或者也可以使用憑證。 如需詳細資訊,請參閱<使用資料庫鏡像端點憑證 (Transact-SQL)>。
[回到頁首]
必須正確設定端點。
確定將要裝載可用性複本的每個 SQL Server 執行個體,即每個「複本位置」(Replica Location),都擁有資料庫鏡像端點。 若要判斷給定的伺服器執行個體上是否有資料庫鏡像端點,請使用 sys.database_mirroring_endpoints 目錄檢視。 如需詳細資訊,請參閱<建立 Windows 驗證的資料庫鏡像端點 (Transact-SQL)>或<允許資料庫鏡像端點使用傳出連接的憑證 (Transact-SQL)>。
檢查通訊埠編號是否正確。
若要識別目前關聯於伺服器執行個體之資料庫鏡像端點的通訊埠,請使用下列 Transact-SQL 陳述式:
SELECT type_desc, port FROM sys.tcp_endpoints; GO
對於難以解釋的 AlwaysOn 可用性群組 設定問題,我們建議您檢查每個伺服器執行個體,以判斷它是否正在正確的通訊埠上接聽。 如需有關驗證通訊埠可用性的詳細資訊,請參閱<MSSQLSERVER_1418>。
確定端點已啟動 (STATE=STARTED)。 在每個伺服器執行個體上,使用下列 Transact-SQL 陳述式:
SELECT state_desc FROM sys.database_mirroring_endpoints
如需 state_desc 資料行的詳細資訊,請參閱<sys.database_mirroring_endpoints (Transact-SQL)>。
若要啟動端點,請使用下列 Transact-SQL 陳述式:
ALTER ENDPOINT Endpoint_Mirroring STATE = STARTED AS TCP (LISTENER_PORT = <port_number>) FOR database_mirroring (ROLE = ALL); GO
如需詳細資訊,請參閱<ALTER ENDPOINT (Transact-SQL)>。
確定來自其他伺服器的登入具有 CONNECT 權限。 若要判斷誰具有端點的 CONNECT 權限,請在每個伺服器執行個體上使用下列 Transact-SQL 陳述式:
SELECT 'Metadata Check'; SELECT EP.name, SP.STATE, CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id)) AS GRANTOR, SP.TYPE AS PERMISSION, CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id)) AS GRANTEE FROM sys.server_permissions SP , sys.endpoints EP WHERE SP.major_id = EP.endpoint_id ORDER BY Permission,grantor, grantee; GO
[回到頁首]
您可以使用能夠明確識別系統的任何名稱,來當做端點 URL 中伺服器執行個體的系統名稱。 伺服器位址可以是系統名稱 (如果系統位於同一個網域內)、完整網域名稱或 IP 位址 (最好是靜態 IP 位址)。 使用完整網域名稱保證可以運作。 如需詳細資訊,請參閱<在加入或修改可用性複本時指定端點 URL (SQL Server)>。
裝載可用性複本的每個伺服器執行個體必須要透過 TCP 存取其他伺服器執行個體之通訊埠。 如果伺服器執行個體位在互不信任的不同網域 (不受信任的網域) 中,這點尤其重要。
此 SQL Server 訊息指出無法連繫端點 URL 中指定的伺服器網路位址或該位址不存在,並建議您確認網路位址名稱,然後重新發出命令。 如需詳細資訊,請參閱<MSSQLSERVER_1418>。
[回到頁首]
本節討論因為與主要複本的連接不在作用中,次要資料庫聯結至可用性群組失敗的可能原因和解決方案。
解決方案:
檢查防火牆設定是否允許裝載主要複本和次要複本的伺服器執行個體之間的端點通訊埠通訊 (預設為通訊埠 5022)。
檢查網路服務帳戶是否有端點的連接權限。
確認下列組態值設定,並視需要加以更正。
|
關於... |
動作 |
註解 |
連結 |
---|---|---|---|---|
目前主要複本 |
確定可用性群組接聽程式在線上。 |
確認接聽程式是否在線上:
重新啟動離線接聽程式:
|
||
目前主要複本 |
確認 READ_ONLY_ROUTING_LIST 只包含裝載可讀取之次要複本的伺服器執行個體。 |
|
sys.availability_replicas (Transact-SQL) |
|
read_only_routing_list 中的每個複本 |
確定 Windows 防火牆未封鎖 READ_ONLY_ROUTING_URL 通訊埠。 |
— |
||
read_only_routing_list 中的每個複本 |
在 SQL Server 組態管理員中,確認:
|
— |
||
read_only_routing_list 中的每個複本 |
確定 READ_ONLY_ROUTING_URL (TCP://system-address:port) 包含正確的完整網域名稱 (FQDN) 和通訊埠編號。 |
— |
計算 AlwaysOn 的 read_only_routing_url |
|
用戶端系統 |
確認用戶端驅動程式支援唯讀路由。 |
— |
回到頁首
[回到頁首]
[回到頁首]
資料庫鏡像和 AlwaysOn 可用性群組的傳輸安全性 (SQL Server)