[英]SQL Synonym to a Always On Listener
我有 2 個 Microsoft SQL 服務器數據庫服務器DBServer1和DBServer2以及 2 個數據庫DB1和DB2 。 每個數據庫都位於兩台服務器之間的不同可用性組中。 所以:
可用性組 1 (AG1) 在 DBServer1 和 DBServer2 之間的集群中包含一個 DB1,並且具有 listenerIP,例如 192.168.80.1
可用性組 2 (AG2) 在 DBServer1 和 DBServer2 之間的集群中包含一個 DB2 並具有諸如 192.168.80.2 的 listenerIP
數據庫DB1有一些同義詞指向DB2的監聽器的一些表。 例如:
USE [DB1]
CREATE SYNONYM [dbo].[REMOTETABLE] FOR [192.168.80.2].[DB2].[dbo].[REMOTETABLE]
然后我嘗試對 DB1 執行查詢,例如:
SELECT *
FROM [DB1].[dbo].[REMOTETABLE]
然而,同義詞並沒有像我預期的那樣工作。 當兩個數據庫都在同一個服務器中時(要么都在DB1中,要么都在DB2中),查詢工作完美,並從DB2返回 REMOTETABLE 的內容。 但是,當其中一個數據庫位於DBServer1中而另一個位於DBServer2中時,查詢將失敗並出現以下錯誤:
目標數據庫“DB2”正在參與一個可用性組,當前無法訪問以進行查詢。 數據移動已暫停,或者可用性副本未啟用讀取訪問。
要允許對該可用性組中的此數據庫和其他數據庫進行只讀訪問,請啟用對該組中一個或多個輔助可用性副本的讀取訪問權限。 有關詳細信息,請參閱 SQL 服務器聯機叢書中的 ALTER AVAILABILITY GROUP 語句。
如果同義詞指向聽眾,我想了解為什么會發生這種情況。 另外,有沒有辦法讓同義詞與聽眾一起工作?
非常感謝
好吧,當我發現問題時,我將自動回答自己。
首先,我們需要配置一個鏈接服務器以建立連接。
其次,主要問題是由於權限。 當由於故障轉移而轉移數據庫時,用戶將失去對數據庫的映射權限(不再可訪問)。 假設我們有一個用戶,該用戶可以訪問 DB1 和 DB2。 當 DB1 和 DB2 駐留在同一台服務器 DBServer1 上時,用戶具有到 DB1 和 DB2 的映射,因為它們是可訪問的,但在 DBServer2 中沒有映射。
當 DB2 由於故障轉移轉移到 DBServer2 時。 用戶只映射到 DBServer1 中的 DB1(因為 DB2 在 DBServer2 中並且不可訪問)和 DB2 在 DBServer2 中(因為 DB1 仍在 DBServer1 中並且不可訪問)。 這種不匹配會導致用戶身份驗證失敗,因為它嘗試使用相同的憑據進行身份驗證。
這可以通過在 linkedServer 配置中配置用戶模擬來解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.