引用皱建的
/*--同步两个数据库的示例测试环境及同步要求:有数据库服务器srv1和srv2,两台电脑能互相访问,有数据
srv1.库名..author有字段:id,name,phone,
srv2.库名..author有字段:id,name,telphone,adress要求:
srv1.库名..author增加记录则srv1.库名..author记录增加
srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新
--*/--大致的处理步骤
--1.在 srv1 上创建连接服务器,以便在 srv1 中操作 srv2,实现同步
exec sp_addlinkedserver  'srv2','','SQLOLEDB','srv2的sql实例名或ip'
exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密码'
go--2.在 srv1 和 srv2 这两台电脑中,启动 msdtc(分布式事务处理服务),并且设置为自动启动
我的电脑--控制面板--管理工具--服务--右键 Distributed Transaction Coordinator--属性--启动--并将启动类型设置为自动启动
go

解决方案 »

  1.   

    --3.实现同步处理--a.在srv1..author中创建触发器,实现数据即时同步
    --新增同步
    create trigger tr_insert_author on author
    for insert
    as
    set xact_abort on
    insert srv2.库名.dbo.author(id,name,telphone)
    select id,name,telphone from inserted
    go--修改同步
    create trigger tr_update_author on author
    for update
    as
    set xact_abort on
    update b set name=i.name,telphone=i.telphone
    from srv2.库名.dbo.author b,inserted i
    where b.id=i.id
    go--删除同步
    create trigger tr_delete_author on author
    for delete
    as
    set xact_abort on
    delete b 
    from srv2.库名.dbo.author b,deleted d
    where b.id=d.id
    go
      

  2.   

    --3.实现同步处理的方法2,定时同步--在srv1中创建如下的同步处理存储过程
    create proc p_process 
    as
    --更新修改过的数据
    update b set name=i.name,telphone=i.telphone
    from srv2.库名.dbo.author b,author i
    where b.id=i.id and
    (b.name<>i.name or b.telphone<>i.telphone)--插入新增的数据
    insert srv2.库名.dbo.author(id,name,telphone)
    select id,name,telphone from author i
    where not exists(
    select * from srv2.库名.dbo.author where id=i.id)--删除已经删除的数据(如果需要的话)
    delete b 
    from srv2.库名.dbo.author b
    where not exists(
    select * from author where id=b.id)
    go--然后创建一个作业定时调用上面的同步处理存储过程就行了企业管理器
    --管理
    --SQL Server代理
    --右键作业
    --新建作业
    --"常规"项中输入作业名称
    --"步骤"项
    --新建
    --"步骤名"中输入步骤名
    --"类型"中选择"Transact-SQL 脚本(TSQL)"
    --"数据库"选择执行命令的数据库
    --"命令"中输入要执行的语句: exec p_process 
    --确定
    --"调度"项
    --新建调度
    --"名称"中输入调度名称
    --"调度类型"中选择你的作业执行安排
    --如果选择"反复出现"
    --点"更改"来设置你的时间安排
    然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行设置方法:
    我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
      

  3.   

    2、如果有B的数据库的表bb被改动,用触发器将aa表覆盖bb,使单独对bb表的改动无效
    -------
    你这个有点问题吧!
    要是我在bb表插入一条aa表没有的记录呢!??
    怎么覆盖阿!?
    还是不让他插入呢!?
      

  4.   

    2、如果有B的数据库的表bb被改动,用触发器将aa表覆盖bb,使单独对bb表的改动无效
    -------
    你这个有点问题吧!
    要是我在bb表插入一条aa表没有的记录呢!??
    怎么覆盖阿!?
    还是不让他插入呢!?--------------------------------bb表要和aa表同步  aa表没有的记录bb表也不能有
      

  5.   

    晕死了exec sp_addlinkedserver  'srv2','','SQLOLEDB','srv2的sql实例名或ip'
    exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密码'
    gocreate trigger tr_insert_author on author
    for insert
    as
    set xact_abort on
    insert srv2.库名.dbo.author(id,name)
    select id,namefrom inserted
    go
    只要运行 insert into author(id,name)
    values(2,'33') 就出服务器: 消息 7391,级别 16,状态 1,过程 tr_insert_author,行 5
    该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
    [OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
    OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。但是insert hrserver.srv2.dbo.author(id,name)
    select id,name from author 没有问题
    如果把这句写到触发器就出上面的错误!~!~!~
      

  6.   

    Distributed Transaction Coordinator两台机器都起动了!~为什么!~?!~
      

  7.   

    --转载:
    解决windows 2003+Sql2000中OLEDB分布式事务无法启动的解决方案 开发分布式数据库软件时,经常碰到下面的错误:
    服务器: 消息 7391,级别 16,状态 1,行 6
    该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分
    布式事务。
    [OLE/DB provider returned message: 不能在指定的事务处理器中
    获得新事务。]
    ---------------------------------------------------------------------------------------------
    服务器: 消息 8520,级别 20,状态 1,行 8
    内部 MSDTC 事务的提交失败: Result Code = 0x8004d019。连接中断
    ---------------------------------------------------------------------------------------------搜索了网上类似问题的解决方案,都建议采用下面的方法(方法一):
    1、运行 regedt32,浏览至 HKEY_LOCAL_MACHINE oftware\Microsoft\MSDTC。
    添加一个 DWORD 值 TurnOffRpcSecurity,值数据为 1。
    2、重启MS DTC服务。
    3、打开“管理工具”的“组件服务”。
        a. 浏览至"启动管理工具"。    b. 选择"组件服务"。    c. 展开"组件服务"树,然后展开"我的电脑"。    d. 右键单击"我的电脑",然后选择"属性"。     在 MSDTC 选项卡中,确保选中了下列选项: 
    网络 DTC 访问 网络管理 网络事务XA 事务
    另外,"DTC 登录帐户"一定要设置为"NT Authority\NetworkService"。4、重启MS DTC服务。
    5、再次运行 regedt32,浏览至 HKEY_LOCAL_MACHINE oftware\Microsoft\MSDTC,然后删除 TurnOffRpcSecurity 项。但是实际上该方法基本上解决不了问题,经过长时间的反复实践,我终于按下面的方法解决了:
    (方法二)
    1、按照方法一的方法处理一遍,如果不行,再继续下面的方法
    2、安装windows 2003 sp1,安装好后,方法一中的第4步设置对话框和原来不一样了,选择“事务管理通讯”中的“不要求验证”
    3、最好安装好MDAC2.8
    3、通过查找,在C:找到名为“hosts”的文件(没有扩展名),通常路径为C:\WINDOWS\system32\drivers\etc,将对方服务器的IP和计算机对应起来,参考如下:
    ==========================================================================================
    # Copyright (c) 1993-1999 Microsoft Corp.
    #
    # This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
    #
    # This file contains the mappings of IP addresses to host names. Each
    # entry should be kept on an individual line. The IP address should
    # be placed in the first column followed by the corresponding host name.
    # The IP address and the host name should be separated by at least one
    # space.
    #
    # Additionally, comments (such as these) may be inserted on individual
    # lines or following the machine name denoted by a '#' symbol.
    #
    # For example:
    #
    #      102.54.94.97     rhino.acme.com          # source server
    #       38.25.63.10     x.acme.com              # x client host127.0.0.1 localhost
    192.168.1.2 中心
    192.168.1.3 西站
    192.168.106.35 信息中心2
    ==============================================================================================
    一定要将每台服务器的hosts文件都修改好
    通过以上办法,分布式就可以正常运行了,速度也非常快  
      

  8.   

    简单的可以用SQL的导入导出来实现
    复杂的可以利用SQL的复制功能来实现,具体方法在下面可以看到
    http://blog.csdn.net/sxycgxj/archive/2006/01/06/571949.aspx