SQL SERVER 2008 利用釋出訂閱方式實現資料庫同步
資料庫同步方式有很多種,這裡以SQL Server 2008 為例利用資料庫釋出和訂閱的方式來演示資料庫的同步技術。由於就有一臺計算機,只能在同一個伺服器下兩個不同的資料庫之間進行資料同步進行演示。
首先我們在SQL Server 中建立兩資料庫 Lx_Data1 和 LxData2,並在兩資料庫中分別建立表t_student,指令碼如下:
-
CREATE TABLE t_student
-
(
-
Id INT NOT NULL,
-
Name NVARCHAR(10) NULL,
-
Age TINYINT NULL,
-
School NVARCHAR (20) NULL,
-
Class NVARCHAR (10) NULL,
-
Score FLOAT NULL,
-
CONSTRAINT PK_Student_Id PRIMARY KEY CLUSTERED (Id)
-
)
釋出訂閱分為兩個步驟:1、釋出。2訂閱。首先在資料來源資料庫伺服器上對需要同步的資料進行釋出,然後在目標資料庫伺服器上對上述釋出進行訂閱。釋出可以釋出一張表的部分資料,也可以對整張表進行釋出,還可以是儲存過程等等。下面來演示一下這兩個操作過程:
釋出
注意:釋出的時候SQL Server 需要有實際的伺服器名稱才能連線到伺服器。不支援通過伺服器別名、IP地址或者其他備用名稱進行連線。因此如果當前的SQL Server的連線是IP地址的話,最好斷開連線,以實際的伺服器名稱重新進行登入。
釋出的具體過程如下:
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
結果我們會發現資料已經同步了,如下圖: