簡體   English   中英

SQL 始終在線監聽器的同義詞

[英]SQL Synonym to a Always On Listener

我有 2 個 Microsoft SQL 服務器數據庫服務器DBServer1DBServer2以及 2 個數據庫DB1DB2 每個數據庫都位於兩台服務器之間的不同可用性組中。 所以:

  • 可用性組 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM