JBOSS 点滴

丰丰的博客

数据同步

可以利用触发器同步,在触发器中通过系统表获取数据库中的表、视图等对象,然后同步。

触发器同步参照:
SQL code
--====================================================
--
发布/订阅的效果最好.  
--
自己写触发器同步的实时性和可控制性最好.
--
====================================================
如果只是简单的数据同步,可以用触发器来实现.下面是例子:
--测试环境:SQL2000,远程主机名:xz,用户名:sa,密码:无,数据库名:test  

--创建测试表,不能用标识列做主键,因为不能进行正常更新  
  --在本机上创建测试表,远程主机上也要做同样的建表操作,只是不写触发器  
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[test]')   and   OBJECTPROPERTY(id,   N'IsUserTable')   =   1)
drop   table   [test]
create   table   test(id   int   not   null   constraint   PK_test   primary   key
,name  
varchar(10))
go
--创建同步的触发器  
  create   trigger   t_test   on   test
for   insert,update,delete
as
set     XACT_ABORT   on
--启动远程服务器的MSDTC服务  
  exec   master..xp_cmdshell   'isql   /S"xz"   /U"sa"   /P""   /q"exec   master..xp_cmdshell   ''net   start   msdtc'',no_output"',no_output
--启动本机的MSDTC服务  
  exec   master..xp_cmdshell   'net   start   msdtc',no_output
--进行分布事务处理,如果表用标识列做主键,用下面的方法  
  BEGIN   DISTRIBUTED   TRANSACTION
delete   from   openrowset('sqloledb','xz';'sa';'',test.dbo.test)
where   id   in(select   id   from   deleted)
insert   into   openrowset('sqloledb','xz';'sa';'',test.dbo.test)
select   *   from   inserted
commit   tran
go
--插入数据测试  
  insert   into   test
select   1,'aa'
union   all   select   2,'bb'
union   all   select   3,'c'
union   all   select   4,'dd'
union   all   select   5,'ab'
union   all   select   6,'bc'
union   all

posted on 2009-07-29 14:14 半导体 阅读(183) 评论(0)  编辑  收藏 所属分类: sqlserver


只有注册用户登录后才能发表评论。


网站导航: