數據庫同步方式有很多種,這里以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
結果我們會發現數據已經同步了,如下圖: