在 SQL Server 2019 中啟用事務複製的可更新訂閱
入門和注意事項
本文旨在複製 SQL Server 2019。 其中一個功能是啟用「可續訂訂閱」。
默認情況下,在早期版本的 SQL Server 中啟用此功能,但自 2017 起(可能)已禁用此功能。
此功能可能會在將來的 SQL Server 版本中刪除。 除非升級現有環境,否則建議在新建環境中替換它,例如合併複製。
環境
使用兩台伺服器和一台 SQL 伺服器。 Windows 伺服器在安裝后立即處於未設置的其他狀態。
- 第一個(發佈端)
-
- Windows Server 2019 Standard Edition
- SQL Server 2019 Developer Edition (Standard Edition 以上必須)
- SQL Server Management Studio 18.9.1
- 第二台(訂戶端)
-
- Windows Server 2019 Standard Edition
- SQL Server 2019 Express Edition
- SQL Server Management Studio 18.9.1
目的
更新了第一台伺服器或第二台伺服器上的表記錄 確保彼此伺服器上的表記錄同步。
順便說一下,一個發佈端是好的,但訂閱者可以有好幾個。 此外,即使一台伺服器有多個 SQL Server 實例,它也會正常工作。
安裝 SQL 伺服器
SQL 伺服器安裝不是此提示的主要部分,因此請省去詳細資訊。 僅列出與複製相關的內容。
安裝發佈端需要標準版或更高版本。 此提示將開發人員版安裝為測試環境。
訂閱者對快速版沒有問題。 當然,其他版本也沒關係,具體取決於資料庫配置。
在“選擇功能”下,選擇“資料庫引擎服務”和“SQL Server 複製”。 發佈端和訂閱伺服器端都相同。
實例配置是發佈端和訂閱伺服器端的預設值。 如果更改實例名稱,則只是在後續伺服器規範中指定實例名稱。
在發佈端,將“SQL Server 代理”設置為自動啟動。 您可以稍後更改此設定。
此提示使用 SQL Server sa 帳戶對複製進行身份驗證。 因此,請啟用 SQL Server 身份驗證。 如果不想在安全方面使用sa帳戶,請將 SQL Server 身份驗證替換為 Windows 身份驗證或其他帳戶,如下所述。
使此設置在兩台伺服器上都相同。
SQL Server Management Studio 的安裝
安裝下載的 SQL Server 管理工作室。 安裝螢幕將僅安裝,因此將省略說明。
如果系統提示您安裝後重新啟動,請重新啟動 Windows。 此外,如果 Windows 更新中有修補程式,請安裝它。
在發佈端創建資料庫和表
在發佈端創建表時,訂閱伺服器會自動複製表和記錄。
我省略了細節,因為創建方法與常規過程相同。
在 SQL 伺服器管理工作室中,創建名為「發佈資料庫」的資料庫。
建立名為「使用者」的表並按如下方式註冊列: 只要確保記錄同步,就可以對表的名稱、數量和列內容進行任何操作。 但是,只需要主鍵。
您已經添加了一些記錄,以確保在創建複製後同步記錄。
設置遠端連接
將資料庫設置為可遠端訪問彼此的伺服器。 有關詳細資訊,請參閱下面的提示。
資料夾許可權設置
在發佈伺服器上開啟以下資料夾的屬性: 資料夾的路徑取決於 SQL Server 版本和實例名稱。
- C:\Program Files\Microsoft SQL Server\MSSQL15. MSSQLSERVER\MSSQL\ReplData
從「安全」選項卡添加「服務」帳戶並將其設置為「完全控制」。
配置分發
這一次,您將在與發佈相同的伺服器上創建分發。
啟動 SQL 伺服器管理工作室,右鍵按下「複製」,然後選擇「配置分發」。
按兩下一步“。
選中「<使自己的伺服器>成為您自己的分發伺服器」。。
然後,按兩下一步以完成它。
創建出版物
我最初從嚮導創建它,如下圖所示, 在 SQL Server 2019 中,從嚮導創建記錄不會啟用「可更新訂閱」,並且無法在表之間同步記錄。
因此,我們將使用 T-SQL 創建發佈。
下面是用於使用 SQL Server 身份驗證創建發佈的 SQL。 請根據您的設定更改密碼。
-- トランザクションパブリケーションを追加するための宣言
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'パブリケーションDB';
SET @publication = N'パブリケーション';
SET @login = 'sa';
SET @password = 'saパスワード';
USE [パブリケーションDB]
-- パブリケーションデータベースでトランザクションレプリケーションを有効にする。
EXEC sp_replicationdboption
@dbname=@publicationDB,
@optname=N'publish',
@value = N'true';
-- sp_addlogreader_agent を実行して、エージェントジョブを作成します。
EXEC sp_addlogreader_agent
@publisher_login = @login,
@publisher_password = @password,
@publisher_security_mode = 0;
-- 即時更新、キュー更新、およびプルサブスクリプションをサポートするトランザクションパブリケーションを作成します。
EXEC sp_addpublication
@publication = @publication,
@status = N'active',
@allow_sync_tran = N'true',
@allow_queued_tran = N'true',
@allow_pull = N'true',
@independent_agent = N'true',
-- 関連するデフォルトのプロパティを明示的に宣言する
@conflict_policy = N'pub wins';
-- デフォルトのスケジュールを使用して、パブリケーションの新しいスナップショットジョブを作成します。
EXEC sp_addpublication_snapshot
@publication = @publication,
@publisher_login = @login,
@publisher_password = @password,
@publisher_security_mode = 0;
GO
要進行 Windows 身份驗證,請將「sp_addlogreader_agent」和「sp_addpublication_snapshot」更改為:
SQL Server 身份驗證
@publisher_login = @login,
@publisher_password = @password,
@publisher_security_mode = 0;
Windows 身份驗證
@job_login = @login,
@job_password = @password,
@publisher_security_mode = 1;
成功建立後,將顯示以下資訊:
此外,請打開已創建的發佈的屬性,並確保啟用了“可更新訂閱”。
指定文章
如果最初在嚮導中創建它,則同時指定文章, 由於上述文稿沒有文章處理,因此請從屬性中指定它。
從左側功能表中選擇「文章」,選中要同步的表,然後按下「確定」 按鈕。
“msrepl_tran_version”將添加到要同步的表的列中,同時添加表觸發器。
創建訂閱
右鍵按下剛剛創建的發佈,然後選擇「新建訂閱」。
按兩下一步“。
選擇您建立的發佈。
勾選取「 在分發伺服器<伺服器名稱>執行所有代理」 。
按兩下「添加 SQL Server 訂閱伺服器」 按鈕。
指定要註冊為訂閱伺服器的伺服器(+ 實例名稱)。
如果沒有訂閱伺服器資料庫,請創建一個新資料庫。 如果已存在,則顯示所選內容。
指定資料庫后,按兩下一步。
如果您有多個訂閱者,則可以在此處註冊任意數量的訂閱者。
按兩下“...”按鈕。
現在,代理運行是sa帳戶,但請根據您的環境進行設置。
選擇「連續運行」。。
“可續訂訂閱”設置應與操作匹配。
如果「同時提交更改」 則會立即同步,但所有伺服器都必須運行。
“將更改排隊,如果可能,提交”會在運行時提交,即使伺服器未運行也是如此, 但是,同步計時很慢。
選中「使用預定義的連結伺服器或遠端伺服器」。
選擇“立即”。
按兩下一步“。
按兩下“完成”按鈕。
如果沒有錯誤,請關閉它。
幾分鐘后,您可以看到資料庫是在訂閱伺服器上創建的,並且表也已創建。
您可以驗證記錄是否也同步。
如果一段時間后未同步,請執行以下操作:
右鍵按兩下創建的訂閱,然後選擇「重新初始化」。
選中「使用新快照」,然後按下設置為重新初始化按鈕。
如果出現錯誤,請重試。
檢查操作
嘗試添加或更改發佈端的表。
等待幾秒鐘,您將看到它與訂閱者同步。
現在,嘗試更改訂閱伺服器上的記錄。
您可以驗證發佈端是否已同步。
如果有多個訂閱伺服器,請確保訂閱伺服器之間同步。