天天看點

SQL Server 跨網段(跨機房)複制

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

  1. ​​本文所涉及的内容(Contents)​​
  2. ​​背景(Contexts)​​
  3. ​​解決方案(Solution)​​
  4. ​​搭建過程(Process)​​
  5. ​​注意事項(Attention)​​
  6. ​​參考文獻(References)​​

二.背景(Contexts)

  搭建SQL Server複制的時候,如果網絡環境是區域網路内,通過主機名就可以實作了,但是如果是跨網段、跨機房異地搭建複制的時候就需要注意了,因為SQL Server複制不支援通過IP連接配接分發伺服器,那有什麼辦法解決跨網段、跨機房的問題呢?

三.解決方案(Solution)

  在跨網段、跨機房進行SQL Server複制的時候需要區分兩種情況:一種是外網IP的1433端口對應了這台機器SQL Server的資料庫端口;另外一種情況是外網IP對應SQLServer機器的端口不是1433;下面是幾種解決方案:

A. 如果外網IP端口是1433,可以在Windows的host檔案中指定IP位址與主機名的對應關系,主機名必須跟真實的主機名一樣?

B. 因為你的外網IP端口不是1433,是以你無法在host檔案中跟IP位址一起指定端口;這種情況下,如果條件允許(安全性和端口數),你可以在防火牆中開放外網IP的1433端口對應這個釋出伺服器的1433端口,并且限制某個IP可以通路這個端口,程式等通路釋出資料庫就使用另外的21433端口,保證了1433端口的安全;又可以解決端口映射問題,可以畫張圖解釋;

​​

SQL Server 跨網段(跨機房)複制

(Figure1:邏輯結構圖)

C. 另外一種方案是在SQL Server配置管理器裡建立一個SQL Server别名,這個别名需要跟主機名一樣,不需要啟用SQL Server Browser服務;

四.搭建過程(Process)

(一) 環境資訊

系統環境:Windows Server 2008 + SQL Server 2008

釋出伺服器:192.168.1.101,1924,192.168.1.101,1433,伺服器名稱:USER-H2B2A89PEK

分發伺服器:與釋出伺服器同一台機器

訂閱伺服器:192.168.1.102,1433,伺服器名稱:QuZhoushiwei105

釋出資料庫:Task

訂閱資料庫:TaskSubscribe

資料庫帳号:ReplicationUser/ ReplicationPassword

(二) 搭建步驟

  上面的釋出伺服器的外網IP開通了兩個端口,一個是預設的1433,一個是1924,如果是預設的1433,可以通過host檔案,而如果隻有端口1924的話就隻能通過SQL Server别名方式實作,這裡為了做測試就一起開通了這2個端口了。

A. 下面是通過host檔案的形式建立訂閱的具體步驟:

1) 在釋出伺服器上建立釋出,具體操作可以參考:SQL Server 複制事務釋出,隻有搭建成功之後下面的步驟才能進行;

2) 設定訂閱伺服器C:\Windows\System32\drivers\etc目錄的host檔案,添加分發伺服器(我的環境是釋出伺服器與分發伺服器是一起的,是以這裡指定的是釋出伺服器的位址)資訊:192.168.1.101 USER-H2B2A89PEK

3) 設定分發伺服器C:\Windows\System32\drivers\etc目錄的host檔案,添加訂閱伺服器資訊:192.168.1.102 QuZhoushiwei105

4) 在訂閱伺服器上建立訂閱,具體步驟如下:

SQL Server 跨網段(跨機房)複制

(Figure2:連接配接釋出伺服器)

SQL Server 跨網段(跨機房)複制

(Figure3:成功連接配接釋出伺服器)

SQL Server 跨網段(跨機房)複制

(Figure4:選擇推送訂閱)

SQL Server 跨網段(跨機房)複制

(Figure5:選擇訂閱資料庫)

SQL Server 跨網段(跨機房)複制

(Figure6:推送訂閱帳号密碼)

SQL Server 跨網段(跨機房)複制

(Figure7:代理計劃)

SQL Server 跨網段(跨機房)複制

(Figure8:初始化)

SQL Server 跨網段(跨機房)複制

(Figure9:成功後的訂閱資訊與作業)

SQL Server 跨網段(跨機房)複制

(Figure10:建立訂閱的狀态資訊)

B. 下面是通過SQL Server别名的形式建立訂閱的具體步驟:

1) 在釋出伺服器上建立釋出,具體操作可以參考:​​SQL Server 複制事務釋出​​,隻有搭建成功之後下面的步驟才能進行;

2) 在訂閱伺服器上建立分發伺服器(我的環境是釋出伺服器與分發伺服器是一起的,是以這裡指定的是釋出伺服器的位址)的别名;

SQL Server 跨網段(跨機房)複制

(Figure11:訂閱伺服器上的别名)

  在分發伺服器上,如果别名的設定包括:SQL Native Client 10.0 配置(32位)和SQL Native Client 10.0 配置,需要都設定訂閱伺服器的别名,如果沒有像Figure13那樣進行設定,

SQL Server 跨網段(跨機房)複制

(Figure12:分發伺服器上的别名)

SQL Server 跨網段(跨機房)複制

(Figure13:分發伺服器上的别名)

3) 接下來的步驟按照Figure2到Figure8進行就可以了,同樣,最後一樣可以達到Figure9、Figure10的效果;

五.注意事項(Attention)

1. 使用請求訂閱,分發作業是在訂閱伺服器上建立的;使用推送訂閱,分發作業是在分發伺服器上建立;

2. 在釋出伺服器上建立釋出的時候,如果SQL Server資料庫執行個體名與伺服器名不一緻,将會出現下面的錯誤:

SQL Server 跨網段(跨機房)複制

(Figure14:釋出錯誤)

在訂閱伺服器上建立訂閱的時候,如果SQL Server資料庫執行個體名與伺服器名不一緻,将會出現下面的錯誤:

SQL Server 跨網段(跨機房)複制

(Figure15:訂閱錯誤)

3. 可以通過下面的SQL腳本修改不一緻的問題,修改之後記得重新開機SQL Server服務才能生效;

SQL Server 跨網段(跨機房)複制
/*
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      
SQL Server 跨網段(跨機房)複制

4. 分發伺服器上的快照檔案會給删除?

CareySon:After the snapshot is applied at all Subscribers, replication cleanup deletes the associated .bcp file for the initial snapshots automatically.

5. 如果通過修改host檔案部署釋出訂閱,你必須使用推送訂閱模式,如果你使用請求訂閱模式,因為你無法讀取快照檔案,将會報下面的錯誤:

SQL Server 跨網段(跨機房)複制

(Figure16:請求訂閱無法讀取快照檔案錯誤資訊)

使用别名的形式部署釋出訂閱,同樣會存在相同的問題,CareySon在Azure上通過開通相關權限的方式可以使用請求訂閱方式,但是過程比較複雜,這裡就不做讨論了;

6. 如果隻在訂閱伺服器的host檔案上指定了分發伺服器(這裡指定是釋出伺服器,因為我的釋出伺服器與分發伺服器是一起的),沒有在分發伺服器的host檔案上指定訂閱伺服器位址,将會發生下面的錯誤:

SQL Server 跨網段(跨機房)複制

(Figure17:釋出伺服器連接配接不上訂閱伺服器)

7. 如果伺服器同時存在“SQL Native Client 10.0 配置(32位)”和“SQL Native Client 10.0 配置”,測試發現“SQL Native Client 10.0 配置(32位)”設定的别名是提供給:查找SQL Server釋出伺服器使用的,錯誤資訊類似Figure19所示;“SQL Native Client 10.0 配置”設定的别名是提供給:分發伺服器作業推送到訂閱伺服器使用的,錯誤資訊類似Figure17所示;具體原因不清楚,求科普;

SQL Server 跨網段(跨機房)複制

(Figure18:别名)