关于SQL SERVER数据同步自己的一些设计经验
2012-04-04 18:14
507 查看
不过这个项目已经过去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 (被简化后的远程表)表中没有被同步的数据即可,同步完回写同步标记。
按照项目的要求基础数据在总部存储,然后同步到各个分厂。里面一些详细的需求不详说了。直接进入正题。
同步方式:数据库之间的同步,不再做程序上的干涉了。
实现步骤:
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 (被简化后的远程表)表中没有被同步的数据即可,同步完回写同步标记。
相关文章推荐
- (转)关于SQL SERVER数据同步自己的一些设计经验
- 关于大数据的处理的一些经验
- 关于Nokia手机数据传输部分的一些进展(转自自己的主页)
- 关于REST API设计的一些小经验
- 一步一步教你在 Android 里创建自己的账号系统(二)--同步数据以及设计账号页面
- 关于代码阅读的编程实现技巧及自己工作学习的一些经验(推荐看后面的后记)
- 自己积累的一些关于Velocity的经验
- 转录自己之前的一些关于PADS PCB设计技巧
- 关于产品设计自己的一些想法
- 关于SQL SERVER数据同步中的几个坑
- 如何利用ccform自定义表单来增加自己的控件,关于Sys_FrmEle表结构与数据存储设计?
- 关于设计模式的一些经验
- redis和mysq数据同步和redi的一些设计
- 关于数据权限设计的一些想法
- 关于项目中的一些经验:封装activity、service的基类,封装数据对象
- 关于数据库设计的一些经验
- 关于类的数据成员的访问权限设计的一些思考
- RTP 与RTCP 解释. 含同步时间戳 RTP协议是real-time transport protocol的缩写,被设计来传输流媒体数据,有着广泛的应用,其它相关介绍自己去看RFC,我不打算
- 关于数据库表的一些研究,写给自己&小白看
- 关于类的数据成员的访问权限设计的一些思考(转)