SQL Server 事務複製爬坑記

  SQL Server 複製功能折騰了好幾天了,現特將其配置過程以及其間遇到的問題記錄下來,以備往後查閱。同時,也讓「同道」同窗們少走沒必要要的彎路。若是有不對之處,歡迎你們指正,歡迎溝通交流。html

1、複製功能概述sql

  SQL Server 複製功能實現了主從庫的分離,從而將主庫的壓力分解掉,主庫就主要負責數據的更、改等,而主庫主要負責查詢。(廢話一句:本人之因此入了這個坑,仍是由於項目須要,我勒個去~~,真的老血都吐了3.7壇了都)。另外,有了主、從庫,則從另外一個方面,也多了一層安全性,即:備份。萬一主從出了什麼問題,從庫卻還在。數據庫

  本文主要講述的是經過:發佈 -------- 訂閱的方式實現數據庫的主、從分離。所以,必然的,將須要配置一個發佈服務器 與 一個訂閱服務器。其中發佈服務器負責將數據分佈到相應的訂閱服務器上,而訂閱服務器,則負責接收數據,並將數據整合、更新到本身庫上,從而保證其數據與主庫同樣。下面將本身配置發佈與訂閱的流程以及遇到的問題詳細記錄以下。安全

  注意:如下配置在阿里雲ECS服務器環境下操做。服務器

2、配置前的準備工做網絡

DBServer 機器兩臺,分別爲:DBServer_master 與 DBServer_slave,操做系統均爲:Windows Server 2008 r2 x64阿里雲

SQL Server x64 Enterprize 版本(注意:使用企業版本,標準版本好像不支持事務複製,先前用的是綠色版本是不支持的,後來改用企業版就能夠了)。在安裝 SQL Server 時,建議全選全部組件。不然複製相關的組件必須要鉤選。spa

3、發佈與訂閱操作系統

  請查看參考文獻資料。關於這部分的操做網絡上能夠查到很多,所以再也不多作介紹。.net

4、注意事項

  關於這部份內容其實才是真正的核心所在,網絡上的文章幾乎都只介紹了若是建立發佈與訂閱的標準流程,但其間可能會遇到的很是很是多的問題都被省掉不寫。現特將本人遇到的問題都一一記錄下來,以備你們查閱,少走彎路。

  1. Master服務器的網絡可見須要開啓。開啓步驟以下:
    a) 服務 -> SSDP Discovery 啓動該服務並設置自動啓動
    b) 服務 -> UPnP Device Host 啓動該服務並設置自動啓動。(注意:該服務必定是後於 a) 點的服務開啓)
    c) 右鍵 "網絡" 圖標 -> 打開網絡和共享中心 -> 更改高級共享設置 -> 點選"啓用網絡發現"
    d) 右鍵 "網絡" 圖標 -> 打開網絡和共享中心 -> 更改高級共享設置 -> 點選"啓用共享以即可以訪問網絡的用戶能夠讀取和寫入公用文件夾中的文件"
  2. Slave服務器也按照上面第1點的操做開啓網絡可見性
  3. Master 服務器 與 Slave 服務器都創建以下 Windows 帳戶,以供 SQL Server 事務複製中進行鏈接使用。
    a) 控制面板 -> 用戶帳戶 -> 管理其餘帳戶 -> 建立一個新帳戶 -> 輸入新用戶名稱(如:sql_dbuser)和密碼(如:abcdefg)。
    提示:選擇標準帳戶便可。
  4. 新建目錄(如:D:\abc\master_slave),並將 master_slave 目錄共享
    注意:
    a) 新建完共享目錄後,必定記得在 Slave 服務器上嘗試打開該遠程目錄,若是能夠打開,則說明該目錄可遠程訪問。(不然還怎麼同步數據了?)
    b) Master 服務器與 Slave 服務器的網絡環境搭建完成後,雙方要互相ping以及telnet一下,看下是否可以互通,只有互通了,纔可能順序完成複製。
    提示:telnet的端口通常是1433,由於數據庫安裝好後,沒什麼特殊更改,默認就是1433端口。
    c) 正常狀況下,要開放1433端口。(本人是沒處理該細節,由於先前就已經在運行的Master服務器,因此確定是有開放的)
  5. master_slave 目錄共享後,爲其添加 sql_dbuser 用戶的讀寫權限。(注意:建議將 Everyone 給移除)
  6. Master 服務器與 Slave 服務器的 SQL Server 代理服務以 sql_dbuser 用戶身份登陸。下面以 Slave 服務器的 SQL Server 代理服務的設置爲例進行描述
    a) 打開"SQL Server 配置管理器" -> SQL Server 服務 -> 右鍵"SQL Server 代理 (MSSQLSERVER)" -> 屬性
    b) 點選"本帳戶" -> 在帳戶名右側點擊"瀏覽" -> 輸入"sql_dbuser" -> 檢查名稱 -> 點擊肯定 -> 輸入密碼。(注意:SQL Server 代理須要重啓)
  7. Master 服務器與 Slave 服務器須要開啓 Named Pipes 以及 TCP/IP 協議。
    a) 打開"Sql Server Configuration Manager" -> SQL Server 網絡配置 -> MSSQLSERVER 的協議
    b) 右鍵"Named Pipes" -> 啓用
    c) 右鍵"TCP/IP" -> 啓用
    注意:右鍵"TCP/IP" -> 屬性 -> IP 地址 -> IP2的 -> "活動"有可能須要設置爲"激活"(本人這邊是設置爲激活狀態的,本來是未激活的)
  8. 在建立發佈或訂閱的過程當中,有可能會由於計算機名被修改,致使建立不了。此時可以使用下面語句判斷計算機名稱是否被修改,以及修正該問題
    1 IF SERVERPROPERTY('servername') <> @@SERVERNAME
    2 BEGIN
    3     DECLARE @server sysname
    4     SET @server = @@SERVERNAME
    5     EXEC sp_dropserver @server = @server
    6     SET @server = CAST(SERVERPROPERTY('servername') as sysname)
    7     EXEC sp_addserver @server = @server , @local = 'LOCAL'
    8 END
  9. Master 服務器須要建立別名
    a) 打開"Sql Server Configuration Manager" -> SQL Native Client 10.0 配置(32/64位) -> 別名
    b) 右鍵 -> 新建別名... -> 
            在別名處輸入:計算機名。(如:DBServer_master)
            在端口處輸入:1433
            服務器處輸入:127.0.0.1
  10. Slave 服務器須要建立別名
    a) 打開"Sql Server Configuration Manager" -> SQL Native Client 10.0 配置(32/64位) -> 別名
    b) 右鍵 -> 新建別名... ->
            在別名處輸入:DBServer_master
            在端口處輸入:1433
            服務器處輸入:DBServer_master 的內網IP地址
  11. Master 服務器與 Slave 服務器的服務器代理帳戶須要開啓。下面以 Slave 服務器的 SQL Server 設置爲便進行描述
    a) 打開"Microsoft SQL Server Management Studio" -> 鏈接數據庫對象(注意:請以本地計算機登陸,不要使用IP或localhost之類的登陸,數據庫帳戶可使用 sa 帳戶),假如鏈接成功後的數據庫對象爲:iZir3n162rkr3iZ (SQL Server 10.50.1600 - sa) -> 右鍵 -> 屬性
    b) 點選"安全性" -> 將"服務器代理帳戶"下的"啓用服務器代理帳戶"複選框鉤選 -> 輸入代理帳戶 sql_dbuser 以及密碼 -> 肯定
  12. 在 Slave 服務器上若是新建好了訂閱後,記得設置一下快照的信息。
    a) 右鍵新建好的本地訂閱 -> 屬性 -> 快照 -> 將"快照位置" 配置爲 "備用文件夾"
    b) 將"快照文件夾" 配置爲 "\\{Master cumputer name}\master_slave" 路徑
  13. 在 Master 服務器上若是新建好了發佈後,記得設置一下快照的信息。
    a) 右鍵新建好的本發發布 -> 屬性 -> 快照 -> 將"快照文件的位置"下的 "將文件放入默認文件夾" 複選框的鉤取消
    b) 將"快照文件的位置"下的 "將文件放入下列文件夾" 複選框的鉤選中,而後指定先前建立好的共享目錄路徑。(如:D:\abc\master_slave)
  14. 成功新建立好本地發佈與本地訂閱後,能夠分析並執行一下以下語句
     1 SELECT immediate_sync ,allow_anonymous FROM dbo .syspublications
     2 
     3 -- sp_helppublication;
     4  
     5 EXEC sp_changepublication
     6     @publication = 'xxxxxx_Pub',    -- 此處將 xxxxxx_Pub 換成本身建立的本地發佈
     7     @property = 'allow_anonymous' ,
     8     @value = 'false'
     9 GO
    10 EXEC sp_changepublication
    11     @publication = 'xxxxxx_Pub',    -- 此處將 xxxxxx_Pub 換成本身建立的本地發佈
    12     @property = 'immediate_sync' ,
    13     @value = 'false'
    14 GO
  15. 一個注意點:在成功創建好了發佈與訂閱後,對於新增的表,是沒辦法自動同步的,因此必須要從新單獨對這些新增的表進行鉤選同步纔可,但記錄的修改、字段的添加什麼的,卻是能夠的。

5、參考文獻(資料)

  主要參考資料

  •  https://blog.csdn.net/u012861467/article/details/76411216
    這篇文章說的是快照複製,但有許多細節、注意事項也是有說起到,對我的的幫助很多,點個贊
  • http://blog.51cto.com/46562434/1156582
    這篇文章說的是如何開啓 Windows Server 2008 r2 的網絡發現的
  • https://www.cnblogs.com/linyanyao/p/4513257.html
    這篇文章說的是當SQL Server安裝後,計算機名稱被更改了,要如何才能確認是否被修改,以及如何才能解決修正

  備用參考資料

  • https://www.cnblogs.com/songafeng/p/3839955.html這篇文章說的是同一局域網發佈不了其餘發佈、訂閱的解決辦法。(提示:本人沒用到這塊處理就已經OK了,因此我的感受這個是非必要的)
相關文章
相關標籤/搜索