前提:有兩個服務器,分別是sql2000和sql2005,兩個中都含有一個叫test的數據庫,且裏面的數據表和結構都是徹底相同sql
1,首先添加個人作法是在server1上創建一個連接服務器,直接指向到server2,數據庫
我是在sql2000上創建一個連接服務器,指向sql2005,方便在sql2000服務器上直接操做sql2005服務器
exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql實例名或ip' exec sp_addlinkedsrvlogin 'srv2','false',null,'用戶名','密碼' go
這樣咱們就能夠用 srv2.庫名.dbo.表名 來操做sql2005服務器了分佈式
2,啓動 msdtc(分佈式事務處理服務)
工具
個人電腦
--控制面板--管理工具--服務--右鍵 Distributed Transaction Coordinator--屬性--啓動--並將啓動類型設置爲自動啓動
網站
3,實現數據同步,有2中方法spa
1,觸發器代理
2,存儲過程加事務code
觸發器server
--新增同步 --id爲主鍵,自增 create trigger tr_insert_A on A for insert as set xact_abort on insert srv2.庫名.dbo.A(a,b,c,) select a,b,c from inserted go --修改同步 create trigger tr_update_A on A for update as set xact_abort on update b set a=i.a,b=i.b,c=i.c from srv2.庫名.dbo.A b,inserted i where b.id=i.id go --刪除同步 create trigger tr_delete_A on A for delete as set xact_abort on delete b from srv2.庫名.dbo.A b,deleted d where b.id=d.id go
存儲過程加事務
--存儲過程 create proc p_process as --更新修改過的數據 update b set bill_num=i.bill_num,receipt_num=i.receipt_num,sheet_id=i.sheet_id,discount,meals,All_money,income,zhushi,notes,addtime from srv2.庫名.dbo.author b,author i where b.id=i.id and (b.name<>i.name or b.telphone<>i.telphone) --插入新增的數據 insert srv2.庫名.dbo.author(id,name,telphone) select id,name,telphone from author i where not exists( select * from srv2.庫名.dbo.author where id=i.id) --刪除已經刪除的數據(若是須要的話) delete b from srv2.庫名.dbo.author b where not exists( select * from author where id=b.id) go
--而後建立一個做業定時調用上面的同步處理存儲過程就好了 --企業管理器 --管理 --SQL Server代理 --右鍵做業 --新建做業 --"常規"項中輸入做業名稱 --"步驟"項 --新建 --"步驟名"中輸入步驟名 --"類型"中選擇"Transact-SQL 腳本(TSQL)" --"數據庫"選擇執行命令的數據庫 --"命令"中輸入要執行的語句: exec p_process --肯定 --"調度"項 --新建調度 --"名稱"中輸入調度名稱 --"調度類型"中選擇你的做業執行安排 --若是選擇"反覆出現" --點"更改"來設置你的時間安排
而後將SQL Agent服務啓動,並設置爲自動啓動,不然你的做業不會被執行
設置方法:
個人電腦--控制面板--管理工具--服務--右鍵 SQLSERVERAGENT--屬性--啓動類型--選擇"自動啓動"--肯定.
ps.
觸發器同步數據比較快速,可是會使網站變慢,
而存儲過程加事務的方式同步數據不是很及時,可是能夠把執行時間設定在網站流量少的時候,不會影響網站的反應速度