角色 | 主機名 | IP | 發佈名 | 發佈庫名/訂閱庫名 |
---|---|---|---|---|
發佈服務器 | Server1 | 192.168.1.100 | test3 | db1 |
分發服務器(與發佈服務器同一實例) | Server1 | 192.168.1.100 | - | - |
訂閱服務器 | Client1 | 192.168.1.200 | - | db1 |
在發佈服務器和訂閱服務器都修改C:\Windows\System32\drivers\etc
文件,加入IP和主機名。若是是請求訂閱,則發佈服務器不用修改也要能夠;若是是推送請求,則必需設置。由於SQL Server複製不能經過IP進行相關的設置。sql
好比快照文件在發佈服務器的D:\ReplData
下。在發佈服務器和訂閱服務器建立相同的Windows用戶( 若是不想發佈服務器建立新的Windows用戶,則須要在發佈服務器開啓Guest用戶),如repl_admin,並加入各自的administrator組中,並設置密碼不能過時,不能修改密碼。設置D:\ReplData文件對於新建的用戶repl_admin徹底讀寫權限,並設置共享此文件夾。數據庫
這裏,可能會有疑問爲何repl_admin已是administrator組的用戶,對D:\ReplData
文件夾是讀取權限的,爲何還要設置repl_admin徹底讀寫權限?後來測試在生成快照文件時,沒法在文件夾\\Server1\ReplData
寫入。後面第4步會提到\\Server1\ReplData
這個文件夾。服務器
在發佈服務器設置SQL Server Agent的啓動用戶爲repl_admin(最好是在SQL Server Configuration Manager進行設置),並重啓Agent。一樣,在訂閱服務器也作一樣的步驟。注意,重啓Agent可能會影響SQL Job的計劃任務,生產環境上請檢查重啓帶來的影響。網絡
在SSMS上,根據嚮導一步一步建立新的發佈。若是沒有分發服務器,在嚮導中,會進行建立。(分發的屬性)設置快照文件爲\\Server1\ReplData
。最後能夠生成建立發佈的SQL腳本,能夠保存起來,之後再重啓建立,或是其餘服務器須要建立發佈,只須要修改一下腳本,再執行便可。函數
爲何不直接設置D:\ReplData
?實際上是能夠的,但默認使用\\Server1\ReplData
這個文件的話,在訂閱端默認也是讀取這個快照文件夾\\Server1\ReplData
,這樣比較方便。測試
固然,能夠手動再修改(能夠單獨修改發佈的快照文件夾路徑,也能夠修改訂閱時的快照文件夾路徑),不過仍是建議使用分發的設置的默認文件的網絡路徑格式。代理
也可使用FTP或其餘方法把快照文件複製到訂閱服務器作初始化便可。SQL Server複製也支持備份數據庫的方式進行訂閱的初始化。code
在第1步中,默認快照文件夾也是能夠放到真正的網絡盤上,而不是發佈服務器上。考慮到直接寫到網絡盤,但須要考慮這可能會形成網絡影響,若是在生成很大的快照過程當中,形成網絡阻塞,甚至中斷,對生產形成影響。server
在SSMS上,根據嚮導一步一步建立新的訂閱(以請求訂閱pull subcription爲例)。在Distribution Agent Security這一步,設置是這樣的:對象
若是是推送push subcription的話,第2,3個選項是相反的。即Using the following SQL Server login填寫的是訂閱服務器的SQL Server帳號,讓分發服務器有權限推送數據到訂閱服務器。
在發佈服務器常常會新建立表或其餘數據庫對象,如存儲過程或函數等,若是要把這些新的項目加入到已經存在的訂閱中時,須要初始化這些項目。但默認的設置是初始化整個快照全部項目的。這對於大的快照來講,成本很高。
下面設置只初始化新添的項目。
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