我看到分发订阅似乎只能是同个局域网的机器才可以,我两台远程服务器怎么进行同步?

解决方案 »

  1.   

    复制前要做好的准备工作: 1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户 
    我的电脑 
    --控制面板 
    --管理工具 
    --计算机管理 
    --用户和组 
    --右键用户 
    --新建用户 
    --建立一个隶属于administrator组的登陆windows的用户 2.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作: 我的电脑--D:\   新建一个目录,名为:   PUB 
    --右键这个新建的目录 
    --属性--共享 
    --选择 "共享该文件夹 " 
    --通过 "权限 "按纽来设置具体的用户权限,保证第一步中创建的用户具有对该文件夹的所有权限 
    --确定 
    3.设置SQL代理(SQLSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置) 开始--程序--管理工具--服务 
    --右键SQLSERVERAGENT 
    --属性--登陆--选择 "此账户 " 
    --输入或者选择第一步中创建的windows登录用户名 
    -- "密码 "中输入该用户的密码 4.设置SQL   Server身份验证模式,解决连接时的权限问题(发布/订阅服务器均做此设置) 企业管理器 
    --右键SQL实例--属性 
    --安全性--身份验证 
    --选择 "SQL   Server   和   Windows " 
    --确定 5.在发布服务器和订阅服务器上互相注册 
    企业管理器 
    --右键SQL   Server组 
    --新建SQL   Server注册... 
    --下一步--可用的服务器中,输入你要注册的远程服务器名 --添加 
    --下一步--连接使用,选择第二个 "SQL   Server身份验证 " 
    --下一步--输入用户名和密码 
    --下一步--选择SQL   Server组,也可以创建一个新组 
    --下一步--完成 6.对于只能用IP,不能用计算机名的,为其注册服务器别名 
        (在连接端配置,比如,在订阅服务器上配置的话,服务器名称中输入的是发布服务器的IP) 
    开始--程序--Microsoft   SQL   Server--客户端网络实用工具 
    --别名--添加 
    --网络库选择 "tcp/ip "--服务器别名输入SQL服务器名 
    --连接参数--服务器名称中输入SQL服务器ip地址 
    --如果你修改了SQL的端口,取消选择 "动态决定端口 ",并输入对应的端口号
      

  2.   

    用强制订阅实现数据库同步操作 
    大量和批量的数据可以用数据库的同步机制处理:
    //
    说明:
    为方便操作,所有操作均在发布服务器(分发服务器)上操作,并使用推模式
    在客户机器使用强制订阅方式。有疑问联系作者:[email protected]测试通过//
    --1:环境
    服务器环境:
    机器名称: ZehuaDb 
    操作系统:Windows 2000 Server
    数据库版本:SQL 2000 Server 个人版客户端
    机器名称:Zlp
    操作系统:Windows 2000 Server
    数据库版本:SQL 2000 Server 个人版--2:建用户帐号
    在服务器端建立域用户帐号
    我的电脑管理->本地用户和组->用户->建立 
    UserName:zlp
    UserPwd:zlp--3:重新启动服务器MSSQLServer
    我的电脑->控制面版->管理工具->服务->MSSQLServer 服务
    (更改为:域用户帐号,我们新建的zlp用户 .\zlp,密码:zlp) --4:安装分发服务器
    A:配置分发服务器
    工具->复制->配置发布、订阅服务器和分发->下一步->下一步(所有的均采用默认配置)
    B:配置发布服务器
    工具->复制->创建和管理发布->选择要发布的数据库(SZ)->下一步->快照发布->下一步->
    选择要发布的内容->下一步->下一步->下一步->完成
    C:强制配置订阅服务器(推模式,拉模式与此雷同)
    工具->复制->配置发布、订阅服务器和分发->订阅服务器->新建->SQL Server数据库->输入客户端服务器名称(ZLP)->使用SQL Server 身份验证(sa,空密码)->确定->应用->确定
    D:初始化订阅
    复制监视器->发布服务器(ZEHUADB)->双击订阅->强制新建->下一步->选择启用的订阅服务器->ZLP->
    下一步->下一步->下一步->下一步->完成--5:测试配置是否成功
    复制监视器->发布服务器(ZEHUADB)->双击SZ:SZ->点状态->点立即运行代理程序
    查看:
    复制监视器->发布服务器(ZEHUADB)->SZ:SZ->选择ZLP:SZ(类型强制)->鼠标右键->启动同步处理
    如果没有错误标志(红色叉),恭喜您配置成功--6:测试数据
    --在服务器执行:
    选择一个表,执行如下SQL
    insert into WQ_NEWSGROUP_S select '测试成功',5复制监视器->发布服务器(ZEHUADB)->SZ:SZ->快照->启动代理程序
                                          ->ZLP:SZ(强制)->启动同步处理去查看同步的 WQ_NEWSGROUP_S 是否插入了一条新的记录测试完毕,通过。
    --7修改数据库的同步时间,一般选择夜晚执行数据库同步处理
    (具体操作略) :D/*
    注意说明:
    服务器一端不能以(local)进行数据的发布与分发,需要先删除注册,然后新建注册本地计算机名称卸载方式:工具->复制->禁止发布->是在"ZehuaDb"上静止发布,卸载所有的数据库同步配置服务器注意:发布服务器、分发服务器中的SQLServerAgent服务必须启动
          采用推模式: "D:\Microsoft SQL Server\MSSQL\REPLDATA\unc" 目录文件可以不设置共享
          拉模式:则需要共享~!
      

  3.   

    少量数据库同步可以采用触发器实现,同步单表即可:========================================================配置过程中可能出现的问题,总结如下:(感谢作者: 余枫 提供的帮助) ========================================================在SQL Server 2000里设置和使用数据库复制之前,应先检查相关的几台SQL Server服务器下面几点是否满足:
        
        1、MSSQLserver和Sqlserveragent服务是否是以域用户身份启动并运行的(.\administrator用户也是可以的)
        
            如果登录用的是本地系统帐户local,将不具备网络功能,会产生以下错误:
            
            进程未能连接到Distributor '@Server name' 
            
          (如果您的服务器已经用了SQL Server全文检索服务, 请不要修改MSSQLserver和Sqlserveragent服务的local启动。
           会照成全文检索服务不能用。请换另外一台机器来做SQL Server 2000里复制中的分发服务器。)    
            
          修改服务启动的登录用户,需要重新启动MSSQLserver和Sqlserveragent服务才能生效。    
            
        2、检查相关的几台SQL Server服务器是否改过名称(需要srvid=0的本地机器上srvname和datasource一样)
        
           在查询分析器里执行:
             use master
             select srvid,srvname,datasource from sysservers    
             
           如果没有srvid=0或者srvid=0(也就是本机器)但srvname和datasource不一样, 需要按如下方法修改:
             
             USE master
            GO
            -- 设置两个变量
            DECLARE @serverproperty_servername  varchar(100), 
                    @servername    varchar(100)
            -- 取得Windows NT 服务器和与指定的 SQL Server 实例关联的实例信息
            SELECT @serverproperty_servername = CONVERT(varchar(100), SERVERPROPERTY('ServerName'))
            -- 返回运行 Microsoft SQL Server 的本地服务器名称
            SELECT @servername = CONVERT(varchar(100), @@SERVERNAME)
            -- 显示获取的这两个参数
            select @serverproperty_servername,@servername
            --如果@serverproperty_servername和@servername不同(因为你改过计算机名字),再运行下面的
            --删除错误的服务器名
            EXEC sp_dropserver @server=@servername
            --添加正确的服务器名
            EXEC sp_addserver @server=@serverproperty_servername, @local='local'
            
           修改这项参数,需要重新启动MSSQLserver和Sqlserveragent服务才能生效。    
           
           这样一来就不会在创建复制的过程中出现18482、18483错误了。    3、检查SQL Server企业管理器里面相关的几台SQL Server注册名是否和上面第二点里介绍的srvname一样
        
            不能用IP地址的注册名。
            
          (我们可以删掉IP地址的注册,新建以SQL Server管理员级别的用户注册的服务器名)
            
           这样一来就不会在创建复制的过程中出现14010、20084、18456、18482、18483错误了。    
            
        4、检查相关的几台SQL Server服务器网络是否能够正常访问
        
            如果ping主机IP地址可以,但ping主机名不通的时候,需要在    
            
                winnt\system32\drivers\etc\hosts   (WIN2000)
                windows\system32\drivers\etc\hosts (WIN2003)
                
                   文件里写入数据库服务器IP地址和主机名的对应关系。
                   
               例如:    
                   
               127.0.0.1       localhost
               192.168.0.35    oracledb    oracledb
               192.168.0.65    fengyu02    fengyu02
               202.84.10.193   bj_db       bj_db    
                   
                   或者在SQL Server客户端网络实用工具里建立别名.
                                  
          5、系统需要的扩展存储过程是否存在(如果不存在,需要恢复):
          
             sp_addextendedproc 'xp_regenumvalues',@dllname ='xpstar.dll'
             go
             sp_addextendedproc 'xp_regdeletevalue',@dllname ='xpstar.dll'
             go
             sp_addextendedproc 'xp_regdeletekey',@dllname ='xpstar.dll' 
             go              
             sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll'  
    接下来就可以用SQL Server企业管理器里[复制]-> 右键选择 
            ->[配置发布、订阅服务器和分发]的图形界面来配置数据库复制了。
      

  4.   

    我用的SQL 2005,找不到在哪里设置别名
      

  5.   

    --不同服务器数据库之间的数据操作
    --************************************************************************************
    1、--创建链接服务器 
    exec sp_addlinkedserver   'ITSV', ' ', 'SQLOLEDB', '远程服务器名或ip地址 ' 
    exec sp_addlinkedsrvlogin  'ITSV', 'false ',null, '用户名', '密码' 
    2、启动两台服务器的MSDTC服务 
    MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。3、打开双方的135端口
    MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。
    使用“telnet IP 135”命令测试对方端口是否对外开放。也可用端口扫描软件(比如Advanced Port Scanner)扫描端口以判断端口是否开放
    4、--如要创建触发器   
    create   trigger   t_test   on   test   
    for   insert,update,delete   
    as 
    --加上下面两句,否则会提示新事务不能登记到指定事务处理器
    set    xact_abort   on  
    begin  distributed   tran 
        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--查询示例 
    select * from ITSV.数据库名.dbo.表名 --导入示例 
    select * into 表 from ITSV.数据库名.dbo.表名 --以后不再使用时删除链接服务器 
    exec sp_dropserver  'ITSV ', 'droplogins '