可用性組只讀路由不適用於 SQL 登錄
我們有以下可用性組配置:
server1.domain.com - primary server2.domain.com - sync secondary server3.domain.com - async secondary sql-listener.domain.com - availability group listener DNS name
最近我們設置了只讀路由 (ROR)
只讀路由 URL:
server1 - TCP://server1.domain.com:1433 server2 - TCP://server2.domain.com:1433 server3 - TCP://server3.domain.com:1433
只讀路由列表:
server1: server2, server3, server1 server2: server1, server3, server2 server3: server2, server1, server3
在使用 Windows 身份驗證登錄 (Domain\MyLogin) 和 Options >> Additional Connection Parameters 選項卡 -> ApplicationIntent=ReadOnly 在 SSMS 中進行測試時,它執行良好
雖然
server1
是主要的,但我使用上述參數在 SSMS 中連接到 AG 偵聽器(sql-listener.domain.com)並執行select @@servername
,它顯示server 2
,這意味著 ROR 有效問題/疑問:
當我嘗試使用 SQL 身份驗證登錄 (SQLAuthLogin) 和
ApplicationIntent=ReadOnly
參數在 SSMS 中連接到 AG 偵聽器,然後執行select @@servername
時,它顯示了我server1
>>> So in my case, ROR does not work with SQL Authentication Login is there any way to fix this ?
補充:在 server1 和 server2 上仔細檢查 SQLAuthLogin 的 SID - SID 相同,SQLAuthLogin 可以登錄到兩個伺服器並查詢 MyDatabase 就好了
問題不在 SQL 或 Windows 身份驗證方法中,而是在 default_database 設置中
發現對於我的 Windows 身份驗證登錄
default_database = [MyDatabase]
(參與可用性組),而我的 SQL 身份驗證登錄有default_database = [master]
由於上述設置,在使用 Windows 身份驗證在 SSMS 中連接時,只讀路由在
ApplicationIntent=ReadOnly
指定後立即起作用。對於 SQL Authentication Login,不僅ApplicationIntent=ReadOnly
需要指定,還應該包含Initial Catalog=[MyDatabase]
添加
Initial Catalog=[MyDatabase]
修復了問題,SQL 身份驗證登錄可以連接並被定向到只讀輔助