数据同步

数据同步

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

触发器同步参照:
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
 
  

你可能感兴趣的:(数据同步)