Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1063210
  • 博文数量: 284
  • 博客积分: 8223
  • 博客等级: 中将
  • 技术积分: 3188
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-01 13:26
文章分类

全部博文(284)

文章存档

2012年(18)

2011年(33)

2010年(83)

2009年(147)

2008年(3)

分类: 数据库开发技术

2009-05-30 10:32:52

  双向复制是数据库冗余的一种基本功能,不过,各种数据库在性能和设计的侧重点上有所不同。 MSServer有很三种不同的复制方式:镜像复制、合并复制、事务复制。
  镜像复制:相当于有一个主数据库和一个镜像数据库,主数据库的数据库单向传输到镜像数据库中,所以,某时间点上,数据库只能单向的从主数据库传向镜像数据库。如要实现双向的功能,必须使用微软提供的主从机制,以保证数据库数据库的一致性。不可能支持双机互备的传输。
  合并复制:两个或更多个数据库合并发布,每台机上的数据库都可以进行修改,并提供冲突解决机制。缺点是,为了保证数据一致性,合并复制会在每个表上增加一列,用于冲突解决,所以,对于大表的存储性能产生影响。
  事务复制:提供两种方法实现双向复制,1为对等复制,2为双向复制。
  (1)对等复制是sqlserver2005上新增加的技术,可以实现数据在两台服务器上的双向传输,而且不需要新增列,不存在主从概念。双机同时为主,也同时为从。遗憾的是该功能在2008上才完善,在sqlserver2005上实现的对等复制存在缺陷,其缺陷在于不提供冲突解决机制。虽然双向传输没哟问题,但如果在传输过程中遇到冲突,比如primary key,服务就会在这个事务上不停的回滚和重复,导致整个复制服务的挂起。为了完成冲突的解决问题,我尝试了很多的方法,但最后还是不能实现。官方的解决方法是:1.使用sqlserver2008,增加的冲突解决参数;2. 使用双向复制。
  (2)双向复制实际上就是对等复制的手动版。对等复制最大的好处在于使用一个向导完成全部的配置过程,并且实现的全部存储过程和job无法修改;而双向复制则使用sql脚本配置全部功能,因此操作过程比较复杂,需要一定的sqlserver基础,但也因此带来了便利,即可以修改复制过程中的存储过程。在对等复制中,当己方接收到对侧传输过来的sql操作时,会调用自己的存储过程,完成相应的sql操作,因此,修改相关的存储过程,在插入数据前验证数据是否不存在, 删除数据前验证数据是否已存在,就可以避开相应的冲突,保持数据库的持续运行。这实际上是丢弃数据冲突的一种配置方法,当然,你也可以修改存储过程,实现更为复杂的冲突解决方式。非常灵活。
  这里,将我当时实现对等复制和双向复制的过程写在下面供参考。
 
 
文件: 尝试.rar
大小: 4625KB
下载: 下载
阅读(2130) | 评论(0) | 转发(0) |
0

上一篇:OCI编程

下一篇:多进程环境

给主人留下些什么吧!~~