Sql Server 2008R2 數據庫發布與訂閱


背景描述: 

發布服務器A: (遠程端) , 數據庫服務名: GUANWANG1

訂閱服務器B: (本機)   ,  數據庫服務名: PC-LLRDBA

需要從服務器A中數據庫發布,然后在B中訂閱A發布的數據庫;

 

------------------------------------------------第一步: 准備工作------------------------------------------------

准備工作1: 配置機器名和數據庫服務名一致

先檢查A,B中的機器名和數據庫服務名是否一致,這個很重要!

查看方法: 

1.檢查SQL Server 的服務器名稱

?
1
2
3
4
use master
go
select @@servername
select serverproperty( 'servername' )

 

如果查出來的兩個名字不一樣,那就需要把他們的名字改成一樣的,方法如下:

2.刪除所有之前配置的publishers('old_server_name'為之前的服務名)

?
1
2
3
4
5
select * from msdb.dbo.MSdistpublishers
DELETE FROM msdb.dbo.MSdistpublishers
select * from msdb.dbo.MSdistpublishers
exec sp_droplinkedsrvlogin 'old_server_name' , null
exec sp_dropserver 'old_server_name' , 'droplogins'

 

執行完后,重啟SQL Server服務

3.配置計算機名與服務名一致

?
1
2
3
4
5
6
7
8
9
10
USE master
  GO
  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

 

4.查看服務名

?
1
sp_helpserver

  

 

准備工作2: 配置數據庫服務器名稱的別稱

 

因為數據庫發布和訂閱,不能用ip登陸,必須用服務名登陸

方法之一是改服務器的登陸別稱!

 

首先在本機B配置連接服務器A的登陸別稱: 

先在[開始],[所有程序]中打開[SQL Server配置管理器]:

 

 在[SQL Native Client 10.0配置(32位)]中的別名中配置,如圖:

 

這里的別名必須和服務器B的服務器名一致也就是GUANWANG1,實際的按照自己的名字改動;

端口號是:1433

服務器是對應的服務器機器的IP地址

協議是TCP/IP

 

同理,在下面的[SQL Native Client 10.0配置]中也一樣配置下!

 

 

 然后在服務器A中也要配置訪問本機B的別稱,這一步不能少,否則后面本地訂閱的時候會失敗並報錯,"進程無法連接到 Subscriber“PC-LLRDBA”。 "

切記,這里是雙向的,當初我查了好久才想起來,服務端也要配置這個......

具體的方法同上:注意別名是本機B的服務名PC-LLRDBA, IP是本機的IP,實在不知道在cmd下config一下就有了!

 

 

 

准備工作好了后,就進行第二步發布

------------------------------------------------第二步:發布------------------------------------------------

登陸服務器A數據庫,用別名登陸:

在[復制],[本地發布]中右鍵新建發布

 

 

 

選擇你要發布的數據庫

 

選擇發布類型:(具體選哪種,自己百度下各種的差異),我這里選事務發布

 

 可以選擇發布的對象(表,存儲過程,視圖等等),也可以選擇部分內容,點開勾選就行了

 

 如果沒有特別篩選的,就直接下一步(比如說我只要同步Order表中2014年以后的數據,那么你可以點添加,增加篩選條件)

 

 

選擇立即xxx,繼續下一步

 

 

輸入發布服務器的sa賬戶登陸密碼就行了

 

 

 

 

 

 

 

 

OK,到此發布完成,你可以刷新后查看:

 

 

------------------------------------------------第三步:訂閱------------------------------------------------

 

 這里選擇查找SQL Server發布服務器

 

 

 

選中需要的訂閱的數據庫發布:

 

 

 

 

在本地新建一個同名的數據庫:

 

 

 

 

 點擊與訂閱服務器的連接下面的按鈕

 

 

 

選擇定義計划: 

 

 

 

 

 

 

 

 

 

 

訂閱就完成,然后刷新查看內容:

 

 

 

等過一段時間,數據同步完成后就可以查看數據了,是否一致了!

 ------------------------------------------------訂閱完成------------------------------------------------

 

 

訂閱失敗案例: 

訂閱完成后,卻發現本地訂閱中沒有內容,但是剛剛確實已經訂閱成功了啊,為什么呢?

 

 然后在發布服務器中,右鍵本地發布中的數據庫,啟動復制監視器

 

 發現是報錯了

 

 

 

 

這個原因可能有好多種:

1:>>訂閱的時候,輸入的密碼輸錯了,我第一次就是輸成了發布服務器的密碼

 

 

 

2:>>對應的協議要開啟

 

 

3:>>對應的服務要開啟Sql Server Browser和Sql Server 代理(MSSQLSERVER)

 

 

這三個都檢查無誤了,基本上就搞定了吧!

 

 

還有一種報錯是:"對路徑"XXXXX"訪問被拒絕或者沒有訪問路徑"xxx"的權限"等,這個錯誤一般是用戶的權限不夠導致的,解決方法如下: 

使用SQL Server發布數據庫快照的配置中,如果你選擇了使用SQL Server代理,而SQL Server代理服務使用的登陸身份不具有對存放快照文件位置的讀寫權限時,就會出現該錯誤。

解決的方法是可以修改SQL Server代理服務的登錄身份,具體做法為:程序->Sql Server Configuration Manager->在左邊欄選擇”SQL Server服務“->在右側面板中"SQL Server 代理”一行上右擊,選擇“屬性”,在彈出的對話框中選擇"內置賬戶“->LocalSystem即可。

 

 

 

 

 

 

出處:https://www.cnblogs.com/DBArtist/p/5803271.html

==============================================================================

SQL SERVER 使用訂閱發布同步數據庫

一、數據庫復制涉及

   1、發布服務器:   

  數據的來源服務器,維護源數據,決定哪些數據將被分發,檢測哪些數據發生了修改,並將這些信息提交給分發服務器。

   2、分發服務器:        

  分發服務器負責把從發布服務器拿來的數據傳送至訂閱服務器。

   3、訂閱服務器:
         訂閱服務器就是發布服務器數據的副本,接收維護數據。

   4、訂閱類型
       推訂閱
          推訂閱是指由發布服務器將所有發生修改過的數據復制給訂閱者,這種在數據同步性價比較高的場合,推薦使用推訂閱。
       拉訂閱
          拉訂閱是指訂閱服務器在經過一段時間就會向發布服務器要求復制出版數據庫發生的變化的數據。

 
     發布,分發,訂閱可以部署在獨立的服務器上面也可以部署在一台sql server 上面,然而分開部署肯定能提高性能。

 

二、復制代理:

  1、快照代理
  快照代理在分發者上創建並存儲快照文件,任務是:在分發數據庫中准備已發布表的架構和初始數據以及其他對象、存儲快照文件並記錄出版數據庫和訂閱服務器之間的同步信息,快照代理運行在分發者服務器上,並與出版者相連接。每一個出版物都有自己的快照代理。與各種類型的復制一起使用。

  2、日志閱讀代理
日志讀取器代理與事務性復制一起使用。它將發布服務器上的事務日志中標記為復制的事務移至分發數據庫中。使用事務性復制發布的每個數據庫都有自己的日志讀取器代理,該代理運行於分發服務器上並與發布服務器連接(分發服務器與發布服務器可以是同一台計算機)。

  3、分發代理
分發代理與快照復制和事務性復制一起使用。它將初始快照應用於訂閱服務器,並將分發數據庫中保存的事務移至訂閱服務器。分發代理既可以運行於分發服務器(對於推送訂閱),也可運行於訂閱服務器(對於請求訂閱)。

  4、合並代理   
合並代理與合並復制一起使用。它將初始快照應用於訂閱服務器,並移動和協調所發生的增量數據更改。每個合並訂閱都有自己的合並代理,該代理同時連接到發布服務器和訂閱服務器並對它們進行更新。合並代理既可以運行於分發服務器(對於推送訂閱),也可以運行於訂閱服務器(對於請求訂閱)。默認情況下,合並代理將訂閱服務器上的更改上載到發布服務器,然后將發布服務器上的更改下載到訂閱服務器。

  5、隊列閱讀代理
隊列讀取器代理與包含排隊更新選項的事務性復制一起使用。該代理運行於分發服務器,並將訂閱服務器上所做更改移回至發布服務器。與分發代理和合並代理不同,只有一個隊列讀取器代理的實例為給定分發數據庫的所有發布服務器和發布提供服務。

 

三、復制類型: 

SQL SEVER提供了三大類復制類型:快照復制、事務復制、合並復制。可以在實際應用中使用相應的復制類型,每一種復制類型都在不同程序上實現數據的一致性。

  1、快照復制
如其名字所言,快照復制指在某一時刻給出版數據庫中的出版數據照相,然后將數據復制到訂閱者服務器。快照復制實現較為簡單,其所復制的只是某一時刻數據庫的瞬間數據,
快照復制是將整個出版物傳送給訂閱者,就是在某一時刻將出版數據進行一次“照相”,生成一個描述出版數據庫中數據的當前狀態的一個文件,然后在相應的時間將其復制到訂閱都的數據庫上,快照復制並不是不停的監視出版數據庫中發生的變化情況,它是對出版數據庫進行一次掃描,把所有出版數據中的數據從源數據庫送至目標數據庫,而不僅僅是變化的數據。如果數據量很大,那么要復制的數據就很多。因此對網絡資源要求很高,不僅要有較快的傳輸速度,而且要保證傳輸的可靠性。

快照復制是最為簡單的一種復制類型,能夠在出版者和訂閱者之間保證數據的一致性。快照復制通常使用在以下場合:
       在一定時間內出現大量的更改的操作,但數據總量不大,變化周期較長。


  2、 事務復制
快照復制是將整個數據集發送給訂閱服務器,由於體積大而造成復制周期較長,會形成復制滯后問題。那么事務復制使用事務日志來生成將復制到訂閱服務器的事務,因為它只復制事務也就是變化,所以滯后也比快照復制低得多,因為將不斷地在訂閱服務器處得到及時應用。
事務復制有三個組件:
快照代理,它生成架構,數據以及跟蹤復制過程所需的數據;
分發代理:它分發快照和隨后的命令;
日志讀取器代理:它讀取發布數據的事務日志。
在事務復制中,當出版數據庫發生變化時,這種變化就會立即傳遞給訂閱者。並在較短時間內完成(幾秒),而不是像快照復制那樣要經過很長一段時間間隔。因此,事務復制是一種接近實時地從源到目標分發數據的方法。由於某種原因事務復制的頻率較高。所以必須保證在訂閱者與出版者之間要有可靠的網絡連接。

  
  3、合並復制
合並復制是為移動用戶設計的,可以在發布服務器或是訂閱服務器處執行修改,在合並代理運行時,這些修改將同步,多用於發布服務器與訂閱服務都修改數據的情況下。工作原理如下:在要復制的每個表上實現觸發器,並使用包含GUID列唯一標識要復制的表中的每一行。對其中的任何一個表進行修改時,都會將更改將記錄一個數據表中,在合並代理運行時,它收集數據表中的GUID,這些GUID指出了在發布服務器和訂閱服務器處修改過的行。對於只在發布服務器或是訂閱端修改的數據則直接進行相應操作,如INSERT,UPDATE,DELETE,如果雙方都有GUID則按照用戶指定的方式解決沖突,默認發布服務器伏先。


配置復制:
無論是快照復制,事務性復制還是合並復制,創建復制都要經過以下幾個步驟:
1.    創建發布服務器。選擇要發布的服務器。如果有條件的,也可以分發服務器,在這里我們就將發布服務器和分發服務器設置在同一台計算機上。
2.    不論是發布服務器還是訂閱服務器必須開啟代理服務。
3.    創建一個發布。即將需要的數據庫及對象發布出來。
4.    選擇一個適合自己的發布類型。
5.    設置復制代理及安全,即指定可以運行代理的用戶帳號。
創建可以使用此發布的訂閱服務器。

 

 

四、發布的具體過程如下:

1、展開SQL Server 2008 服務器下的 【復制】 節點,會發現有【本地發布】和【本地訂閱】兩個節點,右擊【本地發布】節點,選擇【新建發布】: 

2、如果服務器第一次進行發布設置,會彈出【發布向導】對話框,設置【分發服務器】,選擇第一個:

 3、點擊【下一步】會詢問我們【啟動SQL SERVER代理】的方式,由於是演示,我選則的是 手動方式:

4、點擊【下一步】,會出現設置【快照文件夾】對話框,我們選擇默認:

5、點擊【下一步】,選擇要發布的數據庫,我們選擇 數據庫 Lx_Data1:

6、點擊【下一步】,選擇【發布類型】,我們選擇 【事務發布】。這里要說明一下如果您對此對話框里面的各種發布類型不是很理解,請點擊這里 選擇適當的復制類型

7、點擊【下一步】,選擇數據庫中的發布對象,我們的這個例子數據庫只有一個表 t_student,我們選擇這個表:

8、點擊【下一步】,進入【篩選表行】對話框:

 9、如果需要篩選表行點擊【添加】就會出現如下的篩選器對話框:

10、我們不做篩選,要全部同步,點擊【取消】后,直接【下一步】,進入【快照代理】設置對話框:

11、這里有兩個選擇一個是立即創建快照,一個是指定一個計划(比如可以指定xxx天xxx時間運行),我們選擇第一個,並點擊【下一步】進入【代理的安全性】設置:

12、點擊【安全性設置】,我們選擇 SQL SERVER 用戶:

13、點擊【確定】 后,返回 【代理安全性】設置對話框,繼續點擊【下一步】:

14、點擊【下一步】,我們給發布進行命名為:“Lx_Data1_Publisher” :

15、點擊【完成】,就會創建發布,並會顯示創建發布的結果:

訂閱

發布完成后,我們要進行訂閱,過程如下:

1、右鍵點擊【本地訂閱】節點,打開,【新建訂閱向導】對話框:

2、我們選擇發布服務器 Lx-PC 中的數據庫發布 Lx_Data1_Publisher,然后點擊【下一步】:

3、在【分發代理位置】對話框中,選擇第一項,點擊【下一步】:

4、在【訂閱服務器】對話框中,我們選擇訂閱數據庫 Lx_Data2,然后點擊【下一步】:

5、在【分發代理安全性】對話框中,我們點擊“...”,進入安全性設置,我們選則的是 SQL 帳戶:

6、輸入帳號和密碼后,點擊【確定】,返回【安全性設置】對話框,點擊【下一步】:

7、我們選擇默認的“連續運行”,點擊【下一步】,進入【初始化訂閱】對話框:

8、初始化時間,選擇 “立即” 初始化,點擊【下一步】:

9、不創建腳本文件,點擊【下一步】:

10、點擊【完成】,就會創建訂閱,並顯示創建結果:

至此,服務器的發布和訂閱都已經創建成功了。我們來測試一下,此時兩個數據庫表中都沒有任何數據,向Lx_Data1中的 t_student 表中插入兩條數據:

use Lx_Data1
go
insert into t_student values (1,'史泰龍',22,'紐約小學','一班',92)
insert into t_student values (2,'施瓦辛格',23,'華盛頓小學','一班',90)

 然后我們查看兩個數據庫的結果:

復制代碼
復制代碼
use Lx_Data1
go
select * from t_student

use Lx_Data2
go
select * from t_student
復制代碼
復制代碼

 結果我們會發現數據已經同步了,如下圖:

五、注意事項

1、無論是發布復制還是訂閱服務 一定要在sql server安裝的服務器本機操作,不能是遠程連接操作

2、將這個文件夾共享出來,然戶用共享文件夾的UNC路徑作為快照文件夾路徑。這個文件夾要賦予SQL Server Service和Agent Service讀寫權限。

3、sql server 另外一種鏡像實現數據副本,鏡像是只能主服務器讀寫,從服務器是不支持讀寫的,而復制是可以從服務器讀 主服務器寫。所以我們實現讀寫分離往往是通過數據庫的復制來實現。

4、UNC 可以做的網絡驅動映射或者FTP連接

5、再發布服務器設置訂閱的時候 系統會提示使用計算機名,而在不同的網絡內計算機名不可以直接訪問,這個時候需要設置別名,別名要注意64 client 和32client都要加

 

 

出處:https://www.cnblogs.com/zhengcheng/p/4492423.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM