SQL Server事務復制搭建與同步經驗


0. 環境

  1. 無域環境
  2. 發布服務和分發服務器同一台主機
角色 主機名 IP 發布名 發布庫名/訂閱庫名
發布服務器 Server1 192.168.1.100 test3 db1
分發服務器(與發布服務器同一實例) Server1 192.168.1.100 - -
訂閱服務器 Client1 192.168.1.200 - db1

1. 修改host文件

在發布服務器和訂閱服務器都修改C:\Windows\System32\drivers\etc文件,加入IP和主機名。如果是請求訂閱,則發布服務器不用修改也要可以;如果是推送請求,則必需設置。因為SQL Server復制不能通過IP進行相關的設置。

2. 創建快照文件夾及相應的用戶和權限

比如快照文件在發布服務器的D:\ReplData下。在發布服務器和訂閱服務器創建相同的Windows用戶( 如果不想發布服務器創建新的Windows用戶,則需要在發布服務器開啟Guest用戶),如repl_admin,並加入各自的administrator組中,並設置密碼不能過期,不能修改密碼。設置D:\ReplData文件對於新建的用戶repl_admin完全讀寫權限,並設置共享此文件夾。

這里,可能會有疑問為什么repl_admin已經是administrator組的用戶,對D:\ReplData文件夾是讀取權限的,為什么還要設置repl_admin完全讀寫權限?后來測試在生成快照文件時,無法在文件夾\\Server1\ReplData寫入。后面第4步會提到\\Server1\ReplData這個文件夾。

3. 設置SQL Server Agent的啟動用戶

在發布服務器設置SQL Server Agent的啟動用戶為repl_admin(最好是在SQL Server Configuration Manager進行設置),並重啟Agent。同樣,在訂閱服務器也做同樣的步驟。注意,重啟Agent可能會影響SQL Job的計划任務,生產環境上請檢查重啟帶來的影響。

4. 在發布服務器新建發布和分發

在SSMS上,根據向導一步一步創建新的發布。如果沒有分發服務器,在向導中,會進行創建。(分發的屬性)設置快照文件為\\Server1\ReplData。最后可以生成創建發布的SQL腳本,可以保存起來,以后再重啟創建,或是其他服務器需要創建發布,只需要修改一下腳本,再執行即可。

為什么不直接設置D:\ReplData?其實是可以的,但默認使用\\Server1\ReplData這個文件的話,在訂閱端默認也是讀取這個快照文件夾\\Server1\ReplData,這樣比較方便。

當然,可以手動再修改(可以單獨修改發布的快照文件夾路徑,也可以修改訂閱時的快照文件夾路徑),不過還是建議使用分發的設置的默認文件的網絡路徑格式。

也可以使用FTP或其他方法把快照文件復制到訂閱服務器做初始化即可。SQL Server復制也支持備份數據庫的方式進行訂閱的初始化。

在第1步中,默認快照文件夾也是可以放到真正的網絡盤上,而不是發布服務器上。考慮到直接寫到網絡盤,但需要考慮這可能會造成網絡影響,如果在生成很大的快照過程中,造成網絡阻塞,甚至中斷,對生產造成影響。

5. 在訂閱服務器新建訂閱

在SSMS上,根據向導一步一步創建新的訂閱(以請求訂閱pull subcription為例)。在Distribution Agent Security這一步,設置是這樣的:

  • Run under the SQL Server Agent service account
  • Connect to the Distribution: Using the following SQL Server login
    這里使用了發布服務器的sa用戶和密碼。當然也可以另外創建專門的SQL Server復制賬號來連接。
  • Connect to the Subscriber: By impersonating the process account

如果是推送push subcription的話,第2,3個選項是相反的。即Using the following SQL Server login填寫的是訂閱服務器的SQL Server賬號,讓分發服務器有權限推送數據到訂閱服務器。

6. 設置添加新項目不初始化整個快照

在發布服務器經常會新創建表或其他數據庫對象,如存儲過程或函數等,如果要把這些新的項目加入到已經存在的訂閱中時,需要初始化這些項目。但默認的設置是初始化整個快照所有項目的。這對於大的快照來說,成本很高。

下面設置只初始化新添的項目。

use db1;
GO

EXEC sys.sp_changepublication 
	@publication = 'test3', 
    @property = N'immediate_sync', 
    @value = N'false'
GO

EXEC sys.sp_changepublication 
	@publication = 'test3', 
    @property = N'allow_anonymous',
    @value = N'false'
GO

然后再啟動快照代理即可對新添加的項目生成快照。
(右鍵選擇發布,選擇“查看快照代理狀態”——“啟動”)

相當於運行以下腳本:

EXEC sys.sp_startpublication_snapshot
@publication = 'test3'
go


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM