原文地址:
http://www.cnblogs.com/thtfria/archive/2012/04/04/2432167.html
不過這個項目已經過去N天但是資料同步部分起初是我的一些設計思想。這個項目是某電力公司的一卡通項目,這個項目將來需要在全國20幾個分廠都要做。
按照項目的要求基礎資料在總部儲存,然後同步到各個分廠。裡面一些詳細的需求不詳說了。直接進入正題。
同步方式:資料庫之間的同步,不再做程式上的幹涉了。
實現步驟:
1、總部的表建立觸發器,來記錄對錶的增、刪、改的動作,將動作記錄到一張中間表中(中間表需要加一個同步標記的欄位來表示資料是否已經被同步過)
CREATE trigger [TG_JC_ZZJG] on [dbo].[JC_ZZJG]
for insert,delete,update
as
begin
-- 插入 1
IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)
begin
INSERT INTO T_JC_ZZJG
(CZLX,BH,MC,QMC,SJBH,LXR,LXDH,LXDZ,BZ,GSBJ,GSBH)
select 1,i.BH,i.MC,i.QMC,i.SJBH,i.LXR,i.LXDH,i.LXDZ,i.BZ,i.GSBJ,i.GSBH
from inserted i
end
-- 更新 2
IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
begin
INSERT INTO T_JC_ZZJG
(CZLX,BH,MC,QMC,SJBH,LXR,LXDH,LXDZ,BZ,GSBJ,GSBH)
select 2,u.BH,u.MC,u.QMC,u.SJBH,u.LXR,u.LXDH,u.LXDZ,u.BZ,u.GSBJ,u.GSBH
from inserted u
end
-- 刪除 3
IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
begin
INSERT INTO T_JC_ZZJG
(CZLX,BH,GSBH)
select 3,d.BH,D.GSBH
from deleted d
end
end
2、分廠建立遠端連線
//添加遠端連線
EXEC sp_addlinkedserver @server = 'ZBEZCAS',@srvproduct='',@provider = 'SQLOLEDB',@provstr = 'DRIVER={SQL Server};SERVER='127.0.0.1';UID='sa';PWD='sa';
//設定串連串連的登入名稱
EXEC sp_addlinkedsrvlogin 'ZBEZCAS','false',NULL,'sa','sa'
3、分廠建立同義字,來簡化訪問表(這步只是簡化操作,沒有別的太大意思)
CREATE SYNONYM T_JC_ZZJG FOR ZBEZCAS.EZCAS.DBO.T_JC_ZZJG
4、分廠執行同步資料,完畢後回寫同步標記為“已同步”
具體的同步方法使用的是預存程序,直接同步處理T_JC_ZZJG (被簡化後的遠端資料表)表中沒有被同步的資料即可,同步完回寫同步標記。