Sql-Server

如何通過連接到 AG 偵聽器將事務複製設置到具有兩個副本的 Always On 可用性組 (AG)

  • November 6, 2018

我想使用其可用性組偵聽器將 SQL Server 實例(發布者)上的一些表複製到具有兩個副本(節點)的 Always On 可用性組(AG)。分發者與發布者相同。應該通過連接到 AG 偵聽器將發布伺服器上的一些數據庫表複製(事務複製)到遠端 Always On 可用性組 (AG) 的兩個副本。我成功地建立了一個出版物。我可以建構訂閱並將 AG 偵聽器設置為訂閱伺服器並且沒有看到任何錯誤,但是當我檢查 AG 偵聽器時,本地訂閱文件夾中沒有任何內容。兩個副本的本地訂閱文件夾中也沒有任何內容。我嘗試使用微軟的官方文件但它並沒有解決問題。我搜尋了很多,但找不到適合這種情況的文件。

我想描述一下設置對我有用的複制的整個過程。我希望它對你也有用:)

如果使用 SQL Server Management Studio 的 GUI 創建發布,則不需要執行步驟 1-5 中提到的腳本,可以快速跳轉到步驟 6。但是,您也可以使用以下腳本。

  1. 介紹經銷商。以下查詢在可以與 Publisher 相同的 Distributor 上執行。Distributor 必須是目前不屬於可用性組並且將來不會成為可用性組的一部分的 SQL 實例。
USE master;
GO
EXEC sys.sp_adddistributor
@distributor = 'WIN-ABCDE123F', -- IP address doesn't work
@password = 'pa$$w0rd'; -- an arbitrary password
  1. 在分發伺服器上創建分發數據庫。在分發伺服器上執行以下命令。@security_mode 參數用於確定從複製代理執行的發布者驗證儲存過程如何連接到 SQL 偵聽器。如果設置為 1,則 Windows 身份驗證用於連接 SQL 偵聽器。如果設置為 0,則使用 SQL Server 身份驗證。如果是這樣,則必須提供@login 和@password 參數。
USE master;
GO
EXEC sys.sp_adddistributiondb
@database = 'distribution',
@security_mode = 1;
  1. 將發布者添加到分發者。大多數時候,發布者與分發者相同。在分發伺服器上執行以下命令。
USE master;
GO
EXEC sys.sp_adddistpublisher
@publisher = 'WIN-ABCDE123F',
@distribution_db = 'distribution',
@working_directory = '\\WIN-ABCDE123F\WorkingDir',
@security_mode = 1;

@working_directory 是一個 UNC 路徑。有關 UNC 的更多資訊,請點擊此處。其預設值為 SQL Server 實例的 ReplData 文件夾,例如 C:\Program Files\Microsoft SQL Server\MSSQL\MSSQ.1\ReplData。 4. 將分發者添加到發布者。如果 Publisher 與 Distributor 不同,您必須在 Publisher 上執行以下命令。如果不是,則與第 1 步命令相同,無需再次執行。

USE master;
GO
exec sys.sp_adddistributor
@distributor = 'WIN-ABCDE123F',
@password = 'pa$$w0rd';
  1. 在 Publisher 上創建出版物。您可以使用 GUI 或一些腳本來完成。
  2. 設置快照安全帳戶。為快照安全代理創建一個 Windows 使用者帳戶,例如 repl_snapshot。使用 SQL Server Management Studio GUI 授予對它的所需訪問權限。然後打開 Replication\Local Publications 文件夾。右鍵點擊發布並選擇屬性。從“選擇頁面”面板中,選擇代理安全,點擊安全設置,選擇“在以下 Windows 帳戶下執行”並在“程序帳戶”框中鍵入:‘WIN-ABCDE123F\repl_snapshot’。輸入其密碼並確認。您也可以使用管理員帳戶,但由於安全問題不建議這樣做。
  3. 在發布者上執行以下腳本以創建訂閱並將訂閱代理添加到發布者。
use [publication_db]
EXEC sp_addsubscription @publication = N'PUBLICATION_NAME',  
  @subscriber = N'SQL_Listener_Name', -- IP address doesn't work  
  @destination_db = N'db_on_subscriber',  
  @subscription_type = N'Push',  
  @sync_type = N'automatic', @article = N'all', 
  @update_mode = N'read only', @subscriber_type = 0; 
GO 

EXEC sp_addpushsubscription_agent @publication = N'PUBLICATION_NAME',  
  @subscriber = N'SQL_Listener_Name', -- IP address doesn't work 
  @subscriber_db = N'db_on_subscriber',  
  @subscriber_login='SQL_LOGIN_SQL_LISTENER',
  @subscriber_password='PASSWORD', @subscriber_security_mode = 0; 
GO

您可以看到訂閱是僅在 SQL 偵聽器上創建的,而不是在節點(副本)上創建的。在執行複制之前,在發布者上,轉到複製/本地發布。選擇“驗證訂閱…”,選擇訂閱並確認。再次轉到複製/本地出版物。點擊查看快照代理狀態。在打開的對話框中,點擊開始並等待該過程完成。如果一切順利,您就可以開始複製了。轉到複製/本地出版物。右鍵點擊訂閱並選擇查看同步狀態。點擊開始並等待該過程完成。

引用自:https://dba.stackexchange.com/questions/215302