Sql-Server
確定訂閱何時在事務複製中變為非活動狀態
當我嘗試在我的一些出版物上發送跟踪令牌以獲得延遲時,我收到以下錯誤 -
未找到有效訂閱。發布必須具有活動訂閱才能發布跟踪令牌。
這些出版物也有訂閱。我可以通過重新初始化\重建複製來解決這個問題,但我想知道是否有辦法告訴訂閱何時停止接收任何內容?我想確定這有多久沒有工作了。
正在複製的表上沒有時間戳,因此我可以據此計算出來。我檢查了複製監視器,瀏覽了分發數據庫中的幾個表,檢查了作業歷史記錄和 SQL 日誌,但無法確定這一點。是否在某處記錄了時間戳,顯示從分發者到訂閱者的最後一次同步?
我們在 SQL Server 2012 SP4 上使用 SQL 事務複製(推送)。
我強烈建議您根據 Brent 部落格的建議設置 Replication Canary 程序:monitoring-sql-server-transactional-replication。
我們創建了自己的變體:
- 確保您的發布伺服器和訂閱伺服器的時鐘同步
- 為每個出版物創建一個表,該表將包含具有結構的單行
範例腳本:
CREATE TABLE [{Schema}].[{PublicationName}_Canary] ( [ID] INT NOT NULL, [PublicationDate] DATETIME NOT NULL, CONSTRAINT [PK_{PublicationName}_Canary] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (ONLINE = ON) ON [PRIMARY] ) ON [PRIMARY] GO INSERT INTO [{Schema}].[{PublicationName}_Canary] (ID, PublicationDate) VALUES (1, SYSUTCDATETIME())
- 創建一個將在間隔內更新單行的作業,我喜歡使用每隔幾秒執行一次的東西,即:7 秒(導致金絲雀在奇數時間通過,因此我們更有可能發現可能得到的預定操作如果間隔太寬/同步而無法錯過金絲雀,則錯過)
- 將此表添加到您的出版物
- 在訂閱伺服器上創建一個表來記錄金絲雀以及它們何時到達(不要忘記創建一個清理過程來清除舊數據!)
範例腳本:
CREATE TABLE [{Schema}].[Replication_Canary_Log] ( [Publication] SYSNAME NOT NULL, [PublicationDate] DATETIME NOT NULL, [SubscriberDate] DATETIME NOT NULL, ) ON [PRIMARY] GO
- 更改該 Canary 文章的更新儲存過程,以
[Replication_Canary_Log]
在更新到達訂閱者時插入到您的範例腳本:
ALTER PROCEDURE [dbo].[sp_MSupd_{Schema}{PublicationName}_Canary] @c1 int = NULL, @c2 DATETIME = NULL, @pkc1 int = NULL, @bitmap binary(1) AS begin /* I've removed the main body of the replication stored procedure for brevity */ /* Customization of this Replication proc to log every time an update arrives */ DECLARE @SubscriberDate DATETIME2 = SYSUTCDATETIME(), @Publication SYSNAME = '{PublicationName}' INSERT INTO [{Schema}].[Replication_Canary_Log] ([Publication], [PublicationDate], [SubscriberDate]) VALUES (@Publication , @PublicationDate, @SubscriberDate) end GO
完成上述所有操作後,您現在只需要監視
[{Schema}].[Replication_Canary_Log]
表中的最新行以跟踪何時出現延遲…如果您的出版物因任何原因停止寫入訂閱者,您將獲得延遲峰值(自最後一隻金絲雀來了)。對我們來說,這可以讓我們找出原因:
- 網路曇花一現
- 對需要很長時間才能應用的複製表的批量更改
- 訂閱者已被標記為非活動狀態,需要重新同步
- 還有什麼原因。。
您必須查看錯誤日誌或作業歷史記錄(前提是未清除或回收)。
請參閱我對 T-Rep 的回答 .. 如何啟動訂閱:https ://dba.stackexchange.com/a/38999/8783