一.本文所涉及的內(nèi)容(Contents)
二.背景(Contexts)
在服務(wù)器A有一個(gè)數(shù)據(jù)庫(kù)Task,需要把部分表部分字段發(fā)布訂閱到服務(wù)器B的TaskSiteInfo數(shù)據(jù)庫(kù)上,但是A服務(wù)器有些特別,因?yàn)樗擞袀€(gè)默認(rèn)的實(shí)例之外,還有一個(gè)命名實(shí)例:TZR06\SQLSERVER2008R2,如果是默認(rèn)實(shí)例到不會(huì)遇到太多的問(wèn)題,現(xiàn)在因?yàn)橛忻麑?shí)例在創(chuàng)建發(fā)布訂閱的過(guò)程中出現(xiàn)了一些異常,所以這里做為記錄;
三.搭建步驟(Procedure)
(一) 環(huán)境信息
系統(tǒng)環(huán)境:Windows Server 2008 R2 + SQL Server 2008 R2
發(fā)布服務(wù)器:192.168.100.6,1433,服務(wù)器名稱:tzr06
發(fā)布服務(wù)器命名實(shí)例:SQLSERVER2008R2
發(fā)布數(shù)據(jù)庫(kù):Task
分發(fā)服務(wù)器:與發(fā)布服務(wù)器同一臺(tái)機(jī)器
訂閱服務(wù)器:192.168.100.8,1433,服務(wù)器名稱:tzr08
訂閱數(shù)據(jù)庫(kù):TaskSubscribe
數(shù)據(jù)庫(kù)帳號(hào):ReplicationUser/ ReplicationPassword
(二) 搭建過(guò)程
上面提到的,發(fā)布服務(wù)器上有個(gè)默認(rèn)實(shí)例和一個(gè)命名實(shí)例,本來(lái)默認(rèn)實(shí)例的數(shù)據(jù)庫(kù)端口為1433,后來(lái)我把它禁用了,再把命名實(shí)例的端口設(shè)置為1433,所以這個(gè)需要借助別名來(lái)實(shí)現(xiàn)發(fā)布訂閱。
A. 發(fā)布服務(wù)器配置
首先在發(fā)布數(shù)據(jù)庫(kù)和訂閱數(shù)據(jù)庫(kù)上創(chuàng)建相同的帳號(hào)和密碼(ReplicationUser/ ReplicationPassword),并且設(shè)置Task數(shù)據(jù)庫(kù)的安全對(duì)象,設(shè)置這樣的帳號(hào)的目的就是為了和程序連接到數(shù)據(jù)庫(kù)的帳號(hào)區(qū)分開(kāi),可以做權(quán)限上的控制,方便問(wèn)題的排查;
-- 創(chuàng)建發(fā)布服務(wù)器帳號(hào)密碼 USE [ master ] GO CREATE LOGIN [ ReplicationUser ] WITH PASSWORD = N ' ReplicationPassword ' , DEFAULT_DATABASE = [ master ] , CHECK_EXPIRATION = OFF , CHECK_POLICY = OFF GO EXEC master..sp_addsrvrolemember @loginame = N ' ReplicationUser ' , @rolename = N ' sysadmin ' GO USE [ Task ] GO CREATE USER [ ReplicationUser ] FOR LOGIN [ ReplicationUser ] GO USE [ Task ] GO ALTER USER [ ReplicationUser ] WITH DEFAULT_SCHEMA = [ dbo ] GO
(Figure1:帳號(hào)密碼)
在E盤目錄下創(chuàng)建文件夾:E:\ReplData,并設(shè)置這個(gè)文件夾為共享目錄,共享用戶為bfadmin;
(Figure2:文件夾權(quán)限)
需要設(shè)置SQL Server Agent登陸帳號(hào)為上面文件夾訪問(wèn)用戶bfadmin;
(Figure3:SQL Server Agent登陸帳號(hào))
(Figure4:測(cè)試網(wǎng)絡(luò)共享)
(Figure5:分發(fā)服務(wù)器)
如果你設(shè)置快照文件夾路徑為:E:\ReplData,即使你的發(fā)布服務(wù)器本身就是分發(fā)服務(wù)器,如果訂閱服務(wù)器是另外一臺(tái)機(jī)器,那么在請(qǐng)求(Pull)訂閱(如果是推送(Push)訂閱就沒(méi)有這個(gè)限制)模式下訂閱代理是無(wú)法訪問(wèn)到這個(gè)快照文件的;除非你發(fā)布服務(wù)器、分發(fā)服務(wù)器和訂閱服務(wù)器都是同一臺(tái)機(jī)器;你應(yīng)該設(shè)置快照文件夾路徑為:\\tzr06\ ReplData;
(Figure6:快照文件夾)
(Figure7:選擇發(fā)布數(shù)據(jù)庫(kù))
(Figure8:事務(wù)發(fā)布)
(Figure9:選擇對(duì)象)
(Figure10:選擇對(duì)象)
(Figure11:選擇對(duì)象)
(Figure12:初始化訂閱)
(Figure13:安全設(shè)置)
使用上面創(chuàng)建好的ReplicationUser帳號(hào)作為連接到發(fā)布服務(wù)器的帳號(hào)和密碼;
(Figure14:設(shè)置帳號(hào)密碼)
(Figure15:發(fā)布選項(xiàng))
(Figure16:發(fā)布名稱)
(Figure17:查看復(fù)制情況)
B. 訂閱服務(wù)器配置
創(chuàng)建完發(fā)布服務(wù)器(分發(fā)服務(wù)器也一起創(chuàng)建了),接下來(lái)就可以創(chuàng)建訂閱服務(wù)器了,下面是訂閱服務(wù)器設(shè)置的具體步驟:
-- 創(chuàng)建訂閱服務(wù)器帳號(hào)密碼 USE [ master ] GO CREATE LOGIN [ ReplicationUser ] WITH PASSWORD = N ' ReplicationPassword ' , DEFAULT_DATABASE = [ master ] , CHECK_EXPIRATION = OFF , CHECK_POLICY = OFF GO EXEC master..sp_addsrvrolemember @loginame = N ' ReplicationUser ' , @rolename = N ' sysadmin ' GO USE [ TaskSiteInfo ] GO CREATE USER [ ReplicationUser ] FOR LOGIN [ ReplicationUser ] GO USE [ TaskSiteInfo ] GO ALTER USER [ ReplicationUser ] WITH DEFAULT_SCHEMA = [ dbo ] GO
創(chuàng)建完了數(shù)據(jù)庫(kù)帳號(hào),我們接著來(lái)創(chuàng)建訂閱,按照前面提到的在發(fā)布服務(wù)器上有命名實(shí)例,所以這里是按照TZR06\SQLSERVER2008R2來(lái)設(shè)置服務(wù)器名稱的,但是在連接過(guò)程中出現(xiàn)了下面的錯(cuò)誤:
(Figure18:查找發(fā)布服務(wù)器錯(cuò)誤信息)
使用上面的配置在訂閱服務(wù)器上使用【連接服務(wù)器】的方式同樣無(wú)法登錄到發(fā)布服務(wù)器,防火墻的入站規(guī)則已經(jīng)加入允許1433端口了,而且在發(fā)布服務(wù)器使用netstat查看端口,也是有監(jiān)聽(tīng)的,為什么會(huì)連接不上呢?后來(lái)在【連接服務(wù)器】加入1433是可以登錄的,如下圖所示:
(Figure19:登錄發(fā)布服務(wù)器)
使用同樣的方式卻無(wú)法查找到發(fā)布服務(wù)器,出現(xiàn)了新的錯(cuò)誤信息,如下圖所示:
(Figure20:查找發(fā)布服務(wù)器錯(cuò)誤信息)
既然需要加端口號(hào),那我們就嘗試使用別名的方式,在64位的操作系統(tǒng)中,需要同時(shí)設(shè)置32位和64位的網(wǎng)絡(luò)配置,設(shè)置別名為:TZR06
(Figure21:別名參數(shù)值)
(Figure22:32位別名)
(Figure23:64位別名)
(Figure24:查找發(fā)布服務(wù)器錯(cuò)誤信息)
難道是TZR06有沖突?修改別名為:TZR06Task
(Figure25:修改32位和64位的別名)
(Figure26:查找發(fā)布服務(wù)器錯(cuò)誤信息)
在發(fā)布服務(wù)器上創(chuàng)建發(fā)布的時(shí)候,如果SQL Server數(shù)據(jù)庫(kù)實(shí)例名與服務(wù)器名不一致,也會(huì)出現(xiàn)上面的錯(cuò)誤,所以在發(fā)布服務(wù)器上執(zhí)行下面的SQL語(yǔ)句:
/* 返回有關(guān)服務(wù)器實(shí)例的屬性信息 Windows 服務(wù)器和與指定的SQL Server 實(shí)例關(guān)聯(lián)的實(shí)例信息 */ SELECT CONVERT (sysname, SERVERPROPERTY( ' servername ' )); /* 返回運(yùn)行SQL Server 的本地服務(wù)器的名稱 如果連接默認(rèn)實(shí)例,則@@SERVERNAME僅返回servername 如果連接命名實(shí)例,則@@SERVERNAME函數(shù)返回的字符串以servername\instancename的格式標(biāo)識(shí)實(shí)例名 */ SELECT @@SERVERNAME AS ' Server Name '
上面的結(jié)果為:
(Figure27:查找發(fā)布服務(wù)器錯(cuò)誤信息)
如果兩個(gè)值不同,那到可以通過(guò)下面的方式進(jìn)行修改:
/* SQL Server數(shù)據(jù)庫(kù)實(shí)例名與服務(wù)器名不一致的解決辦法 */ IF SERVERPROPERTY( ' SERVERNAME ' ) <> @@SERVERNAME BEGIN DECLARE @server SYSNAME SET @server = @@SERVERNAME EXEC sp_dropserver @server = @server SET @server = CAST (SERVERPROPERTY( ' SERVERNAME ' ) AS SYSNAME) EXEC sp_addserver @server = @server , @local = ' LOCAL ' END
后來(lái)請(qǐng)教高文佳,突然想到:“在分發(fā)服務(wù)器和訂閱服務(wù)器上設(shè)置別名的時(shí)候,別名應(yīng)該跟服務(wù)器的實(shí)例名要一致”繼續(xù)做嘗試,修改別名為:TZR06\SQLSERVER2008R2
(Figure28:修改32位和64位的別名)
(Figure29:選擇發(fā)布)
(Figure30:請(qǐng)求訂閱)
(Figure31:選擇訂閱數(shù)據(jù)庫(kù))
(Figure32:分發(fā)代理安全性)
(Figure34:同步計(jì)劃)
(Figure35:初始化)
(Figure36:創(chuàng)建訂閱)
(Figure37:本地訂閱)
四.注意事項(xiàng)(Attention)
1. 如果一開(kāi)始你在發(fā)布服務(wù)器上設(shè)置的快照文件為本地路徑,比如設(shè)置成E:\ReplData,那么有可能出現(xiàn)下面的錯(cuò)誤:
(Figure38:系統(tǒng)找不到指定的路徑)
這個(gè)時(shí)候你重新發(fā)布訂閱是沒(méi)有默認(rèn)路徑可以設(shè)置的,可以修改?我沒(méi)找到可以設(shè)置的地方,只能通過(guò)另外一種方式進(jìn)行修改,在發(fā)布屬性中修改快照路徑:
(Figure39:默認(rèn)文件夾)
(Figure40:設(shè)置文件夾)
在訂閱服務(wù)器上修改訂閱屬性的快照文件夾:
(Figure41:備用文件夾)
2. 在訂閱服務(wù)器上同樣需要設(shè)置SQL Server Agent登陸帳號(hào)為上面文件夾訪問(wèn)用戶bfadmin,不然會(huì)出現(xiàn)下面的錯(cuò)誤:
(Figure42:錯(cuò)誤信息)
設(shè)置帳號(hào)之后需要重啟SQL Server Agent服務(wù)
(Figure43:訂閱服務(wù)器SQL Server Agent設(shè)置)
3. 在發(fā)布服務(wù)器上無(wú)法對(duì)訂閱服務(wù)器進(jìn)行【重新初始化】,報(bào)下面錯(cuò)誤信息,即使在發(fā)布服務(wù)器上設(shè)置了:
(Figure44:錯(cuò)誤信息)
上面這個(gè)錯(cuò)誤暫時(shí)還沒(méi)有解決,不過(guò)關(guān)于命名實(shí)例的復(fù)制已經(jīng)成功了,雖然成功了,但是還是要建議大家盡量不要在生產(chǎn)環(huán)境中安裝多實(shí)例,避免出現(xiàn)不必要的問(wèn)題;
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
