0. 環境
- 無域環境
- 發布服務和分發服務器同一台主機
| 角色 | 主機名 | 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
