数据库同步小弟想做一个数据库同步的功能,不知道有没有现有的数据库函数,或是怎么做。求大神教我.....[解决
数据库同步
小弟想做一个数据库同步的功能,不知道有没有现有的数据库函数,或是怎么做。
求大神教我.....
[解决办法]
--Merge表同步功能测试
--2010.10.28
--wgl
-------------------------------------------------------
--建立环境
IF OBJECT_ID('B1') IS NOT NULL DROP TABLE B1
IF OBJECT_ID('B2') IS NOT NULL DROP TABLE B2
GO
CREATE TABLE B1 (ID1 INT,VAL1 VARCHAR(50),l1 int,l2 int,l3 int)
CREATE TABLE B2 (ID2 INT,VAL2 VARCHAR(50),l1 int,l2 int,l3 int)
GO
INSERT INTO B1 VALUES(1,'A',1,1,1),(2,'B',2,2,2),(3,'C',3,3,3),(4,'D',4,4,4)
GO
--SELECT * FROM B1
--SELECT * FROM B2
--同步语句 Merge,T1与T2同步。
MERGE INTO B2 AS tb_target USING B1 AS tb_source ON tb_target.id2=tb_source.id1
WHEN NOT MATCHED BY TARGET THEN INSERT(id2,val2,l1,l2,l3) VALUES(id1,val1,l1,l2,l3)
WHEN NOT MATCHED BY SOURCE THEN DELETE
WHEN MATCHED THEN UPDATE SET tb_target.val2=tb_source.val1 --AND tb_target.val2<>tb_source.val1
OUTPUT $ACTION,ISNULL(DELETED.ID2,INSERTED.ID2) AS ID,DELETED.VAL2,DELETED.l1,DELETED.l2,DELETED.l3,INSERTED.VAL2,INSERTED.l1,INSERTED.l2,INSERTED.l3;
--输出结果:
/*
%ACTION ID VAL2 VAL2
----------------------
INSERT1NULLA
INSERT2NULLB
INSERT3NULLC
*/
--T2 内容:
/*
ID2VAL2
--------
1A
2B
3C
*/
--这说明T1的数据已经同步到T2了。现在做一些其他操作,修改,更新,插入,删了。
UPDATE B1 SET VAL1='E' WHERE ID1=2
GO
DELETE FROM B1 WHERE ID1 =3
GO
INSERT B1 VALUES (5,'F',5,5,5)
GO
UPDATE B1 SET l3=99999 WHERE ID1=4
GO
SELECT * FROM B1
SELECT * FROM B2
--结果:
/*
ID1VAL1
--------
1A
2E
5F
*/
--修改之后,再运行MERGE语句。
MERGE INTO B2 AS tb_target USING B1 AS tb_source ON tb_target.id2=tb_source.id1
WHEN NOT MATCHED BY TARGET THEN INSERT(id2,val2,l1,l2,l3) VALUES(id1,val1,l1,l2,l3) --如果与源表不匹配,则插入
WHEN NOT MATCHED BY SOURCE THEN DELETE--如果源表没有,则删除
WHEN MATCHED THEN UPDATE SET tb_target.val2=tb_source.val1,tb_target.l1=tb_source.l1,tb_target.l2=tb_source.l2,tb_target.l3=tb_source.l3 --AND tb_target.val2<>tb_source.val1 全部更新
OUTPUT $ACTION,ISNULL(DELETED.ID2,INSERTED.ID2) AS ID,DELETED.VAL2,DELETED.l1,DELETED.l2,DELETED.l3,INSERTED.VAL2,INSERTED.l1,INSERTED.l2,INSERTED.l3;
--执行结果:
/*
$ACTIONIDVAL2VAL2
------------------------
INSERT5NULLF
UPDATE2BE
DELETE3CNULL
*/
--查询T2的内容:
/*
ID2VAL2
--------
1A
2E
5F
*/
--T2 的内容已经正明同步了。
[解决办法]
SQLServer本身的高可用性(HA)不就可以吗
1)集群
2)镜像
3)日志传送
4)发布订阅
[解决办法]
网上搜索下数据库复制吧.一个数据库做发布,另外一个数据库做订阅.可以实现的.
[解决办法]
针对你这个应用,sqlserver群集是最简单的解决方案,以下仅提供个思路
1.通过群集增加高可用性
2.对数据库经常备份
3.写个SMO代码监控索引使用状况
4.针对个别增长较快的数据表进行表分区(注意分区最好有两块以上硬盘)
我有另外的方案是针对跨平台,跨数据类型的整合系统
个人觉得针对自身应用做针对性方案比较有效,不需要做数据同步这种方案
