数据库同步之事务

      之前在介绍数据库同步的时候仅提供了两种方法,一个是数据库自带的复制技术还有一个是利用WINFORM应用程序实现同步,其实除了这两种方法还有很多其他的方法,比如说镜像,事务日志传送,分布式事务等等,其实镜像好像在SQL2000中没有找到,那就看看SQL2000中提供的两种和事务相关的同步技术,事务日志和分布式事务服务

      ①:事务日志:可能很多数据库的同步功能都基于了事务日志来实现的,因为对主服务器中的数据库不会产生任何的影响。

      主要实现思想:在主服务器上建立一个主服务器和备份服务器都可以访问到的共享文件夹,然后将主服务器的数据库备份文件.bak备份到这个文件夹中,备份服务器还原这个备份文件到备份服务器上的数据库,这样就可以实现主服务器和备份服务器之间的同步了。在这个过程中可能需要建立的作业包括备份作业,还原作业,具体的步骤可以参看这里http://www.csharpwin.com/csharpspace/729.shtml。一旦涉及到作业就会出现实时性的问题,在一些情况下这种‘时差’是不允许的。而且实现感觉也挺复杂的,所以重新考虑了一下分布式事务可否在实时性上有所突破

     ②:分布式事务:首先为主服务器建立链接服务器(也就是建立起和备份服务器之间的关系)。

     (1):建立链接,如果已经存在链接删除重新建立链接

-- 查看数据库是否已经存在链接
declare   @serverName   varchar ( 30 )
set   @serverName = ' 备份服务器机器名 '
if   exists ( select   1   from  master.dbo.sysservers  where  srvname = @serverName )
begin
  
exec  sp_dropserver  @serverName , ' droplogins '
end

     (2):建立新的链接(建立之前保证服务Distributed Transaction Coordinator是启动的。)

exec  sp_addlinkedserver  ' 链接前缀名称(可随便起,以后要用) ' , '' , ' SQLOLEDB ' , ' 备份服务器机器名 '
exec  sp_addlinkedsrvlogin  ' 链接前缀名 ' , ' false ' , null , ' 数据库登录名(sa) ' , ' 数据库登录密码(123456) '

      如果实现主、副服务器数据库的实时同步,最容易想到的方法就是建立触发器。在主服务器的数据库表中建立触发器。

CREATE   trigger  dbo.DispatherData_insert  on  dbo.DispatherData after  insert
as
begin
  
declare   @date   nvarchar ( 20 )
  
set   @date   =   convert ( nvarchar ( 20 ), getdate (), 120 )
  
set   XACT_ABORT  on --需要加上
  
insert   into  链接前缀名称. 数据库名称 .dbo. 表名  values  (.... )
end

     在第二步建立完链接后需要验证链接是否成功,可以利用一个查询语句查看

select   *   from  链接前缀名称.数据库名称.dbo.表名

     可以往往单独运行类型的CRUD语句没有问题,如果放在触发器或是存储过程中就出现如下的提示问题:该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。这个时候可以到进行如下的设置,控制面板—>管理工具—>组件服务,在打开的组件服务对话框中,展开组件服务—>计算机—>我的电脑,右击属性,选择MSDTC选项卡,点击其中的安全设置,设置以后的效果图如下:

     

      OK!完成了,这时候就可以实现主、副服务器的同步了。

转载于:https://www.cnblogs.com/wangyong/archive/2011/05/10/2042340.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值