SQL Server 多實例下的複製

一.本文所涉及的內容(Contents)

  1. 本文所涉及的內容(Contents)
  2. 背景(Contexts)
  3. 搭建步驟(Procedure)
  4. 注意事項(Attention)

二.背景(Contexts)

  在服務器A有一個數據庫Task,須要把部分表部分字段發佈訂閱到服務器B的TaskSiteInfo數據庫上,可是A服務器有些特別,由於它除了有個默認的實例以外,還有一個命名實例:TZR06\SQLSERVER2008R2,若是是默認實例到不會遇到太多的問題,如今由於有命名實例在建立發佈訂閱的過程當中出現了一些異常,因此這裏作爲記錄;數據庫

三.搭建步驟(Procedure)

(一) 環境信息安全

系統環境:Windows Server 2008 R2 + SQL Server 2008 R2服務器

發佈服務器:192.168.100.6,1433,服務器名稱:tzr06網絡

發佈服務器命名實例:SQLSERVER2008R2函數

發佈數據庫:Task測試

分發服務器:與發佈服務器同一臺機器spa

訂閱服務器:192.168.100.8,1433,服務器名稱:tzr08操作系統

訂閱數據庫:TaskSubscribe3d

數據庫賬號:ReplicationUser/ ReplicationPassword代理

(二) 搭建過程

  上面提到的,發佈服務器上有個默認實例和一個命名實例,原本默認實例的數據庫端口爲1433,後來我把它禁用了,再把命名實例的端口設置爲1433,因此這個須要藉助別名來實現發佈訂閱。

A. 發佈服務器配置

首先在發佈數據庫和訂閱數據庫上建立相同的賬號和密碼(ReplicationUser/ ReplicationPassword),而且設置Task數據庫的安全對象,設置這樣的賬號的目的就是爲了和程序鏈接到數據庫的賬號區分開,能夠作權限上的控制,方便問題的排查;

--建立發佈服務器賬號密碼
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

wps_clip_image-8981

(Figure1:賬號密碼)

在E盤目錄下建立文件夾:E:\ReplData,並設置這個文件夾爲共享目錄,共享用戶爲bfadmin;

wps_clip_image-8763

(Figure2:文件夾權限)

須要設置SQL Server Agent登錄賬號爲上面文件夾訪問用戶bfadmin;

wps_clip_image-29477

(Figure3:SQL Server Agent登錄賬號)

wps_clip_image-2693

(Figure4:測試網絡共享)

wps_clip_image-1661

(Figure5:分發服務器)

若是你設置快照文件夾路徑爲:E:\ReplData,即便你的發佈服務器自己就是分發服務器,若是訂閱服務器是另一臺機器,那麼在請求(Pull)訂閱(若是是推送(Push)訂閱就沒有這個限制)模式下訂閱代理是沒法訪問到這個快照文件的;除非你發佈服務器、分發服務器和訂閱服務器都是同一臺機器;你應該設置快照文件夾路徑爲:\\tzr06\ ReplData;

wps_clip_image-27389

(Figure6:快照文件夾)

wps_clip_image-6197

(Figure7:選擇發佈數據庫)

wps_clip_image-5271

(Figure8:事務發佈)

wps_clip_image-5826

(Figure9:選擇對象)

wps_clip_image-24573

(Figure10:選擇對象)

wps_clip_image-13321

(Figure11:選擇對象)

wps_clip_image-3034

(Figure12:初始化訂閱)

wps_clip_image-7934

(Figure13:安全設置)

使用上面建立好的ReplicationUser賬號做爲鏈接到發佈服務器的賬號和密碼;

wps_clip_image-4731

(Figure14:設置賬號密碼)

wps_clip_image-31543

(Figure15:發佈選項)

wps_clip_image-22937

(Figure16:發佈名稱)

wps_clip_image-3613

(Figure17:查看複製狀況)

B. 訂閱服務器配置

建立完發佈服務器(分發服務器也一塊兒建立了),接下來就能夠建立訂閱服務器了,下面是訂閱服務器設置的具體步驟:

--建立訂閱服務器賬號密碼
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

建立完了數據庫賬號,咱們接着來建立訂閱,按照前面提到的在發佈服務器上有命名實例,因此這裏是按照TZR06\SQLSERVER2008R2來設置服務器名稱的,可是在鏈接過程當中出現了下面的錯誤:

wps_clip_image-30021

(Figure18:查找發佈服務器錯誤信息)

使用上面的配置在訂閱服務器上使用【鏈接服務器】的方式一樣沒法登陸到發佈服務器,防火牆的入站規則已經加入容許1433端口了,並且在發佈服務器使用netstat查看端口,也是有監聽的,爲何會鏈接不上呢?後來在【鏈接服務器】加入1433是能夠登陸的,以下圖所示:

wps_clip_image-5793

(Figure19:登陸發佈服務器)

使用一樣的方式卻沒法查找到發佈服務器,出現了新的錯誤信息,以下圖所示:

wps_clip_image-16198

(Figure20:查找發佈服務器錯誤信息)

既然須要加端口號,那咱們就嘗試使用別名的方式,在64位的操做系統中,須要同時設置32位和64位的網絡配置,設置別名爲:TZR06

wps_clip_image-11165

(Figure21:別名參數值)

wps_clip_image-20082

(Figure22:32位別名)

wps_clip_image-7762

(Figure23:64位別名)

wps_clip_image-30153

(Figure24:查找發佈服務器錯誤信息)

難道是TZR06有衝突?修改別名爲:TZR06Task

wps_clip_image-2451

(Figure25:修改32位和64位的別名)

wps_clip_image-29011

(Figure26:查找發佈服務器錯誤信息)

在發佈服務器上建立發佈的時候,若是SQL Server數據庫實例名與服務器名不一致,也會出現上面的錯誤,因此在發佈服務器上執行下面的SQL語句:

/*
返回有關服務器實例的屬性信息
Windows 服務器和與指定的SQL Server 實例關聯的實例信息
*/
SELECT CONVERT(sysname, SERVERPROPERTY('servername'));
/*
返回運行SQL Server 的本地服務器的名稱
若是鏈接默認實例,則@@SERVERNAME僅返回servername
若是鏈接命名實例,則@@SERVERNAME函數返回的字符串以servername\instancename的格式標識實例名
*/
SELECT @@SERVERNAME AS 'Server Name'

上面的結果爲:

wps_clip_image-15272

(Figure27:查找發佈服務器錯誤信息)

若是兩個值不一樣,那到能夠經過下面的方式進行修改:

/*
SQL Server數據庫實例名與服務器名不一致的解決辦法
*/
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

後來請教高文佳,忽然想到:「在分發服務器和訂閱服務器上設置別名的時候,別名應該跟服務器的實例名要一致」繼續作嘗試,修改別名爲:TZR06\SQLSERVER2008R2

wps_clip_image-22296

(Figure28:修改32位和64位的別名)

wps_clip_image-22511

(Figure29:選擇發佈)

wps_clip_image-21671

(Figure30:請求訂閱)

wps_clip_image-14008

(Figure31:選擇訂閱數據庫)

wps_clip_image-17928

(Figure32:分發代理安全性)

wps_clip_image-32000(Figure33:設置賬號密碼)

wps_clip_image-22798

(Figure34:同步計劃)

wps_clip_image-29422

(Figure35:初始化)

wps_clip_image-18531

(Figure36:建立訂閱)

wps_clip_image-5947

(Figure37:本地訂閱)

四.注意事項(Attention)

1. 若是一開始你在發佈服務器上設置的快照文件爲本地路徑,好比設置成E:\ReplData,那麼有可能出現下面的錯誤:

wps_clip_image-21441

(Figure38:系統找不到指定的路徑)

這個時候你從新發布訂閱是沒有默認路徑能夠設置的,能夠修改?我沒找到能夠設置的地方,只能經過另一種方式進行修改,在發佈屬性中修改快照路徑:

wps_clip_image-7924

(Figure39:默認文件夾)

wps_clip_image-1850

(Figure40:設置文件夾)

在訂閱服務器上修改訂閱屬性的快照文件夾:

wps_clip_image-19512

(Figure41:備用文件夾)

2. 在訂閱服務器上一樣須要設置SQL Server Agent登錄賬號爲上面文件夾訪問用戶bfadmin,否則會出現下面的錯誤:

wps_clip_image-12671

(Figure42:錯誤信息)

設置賬號以後須要重啓SQL Server Agent服務

wps_clip_image-7125

(Figure43:訂閱服務器SQL Server Agent設置)

3. 在發佈服務器上沒法對訂閱服務器進行【從新初始化】,報下面錯誤信息,即便在發佈服務器上設置了:

wps_clip_image-10620

(Figure44:錯誤信息)

上面這個錯誤暫時尚未解決,不過關於命名實例的複製已經成功了,雖然成功了,可是仍是要建議你們儘可能不要在生產環境中安裝多實例,避免出現沒必要要的問題;

相關文章
相關標籤/搜索