A数据库(ms sql server)、PowerBuilder 6.5开发的客户端,B数据库(ms sql server)、PowerBuilder 6.5开发的客户端,A数据库的插入更新操作能尽快的同步到B数据库。通过什么样的通信机制让B数据库知道A数据库有更新呢?有什么好的解决方案? 谢谢大家的回答

解决方案 »

  1.   

    http://topic.csdn.net/u/20081221/23/a3c0a8ed-5fe2-43b2-b403-df1420fb7959.html
      

  2.   


    SQL Server 2000订阅与发布的具体操作
    同步过程
      一、准备工作,如果完成则可跳过。
      1、内网DB服务器作为发布服务器,外网DB服务器作为订阅服务器。
      发布服务器和订阅服务器上分别创建Windows用户jl,密码jl,隶属于administrators,注意要保持一致。
      2、发布服务器上创建一个共享目录,作为发布快照文件的存放目录。例如:在D盘根目录下建文件夹名为SqlCopy,设置用户jl,权限为完全控制。
      3、确定发布服务器和订阅服务器的数据库autoweb保持一致。
      4、在发布服务器和订阅服务器的SQL Server中创建用户登陆名jl,作为发布数据库autoweb的拥有者(设置为dbo_owner和public)。用户名和密码都一致。
      5、打开服务(控制面板---管理工具---服务)
      ---右击SQLSERVER AGENT---属性---登录---选择“此帐户”
      ---输入或选择第一步中创建的WINDOWS 用户jl,
      ---“密码“中输入该用户密码jl
      6、开启SQL Server 2000的网络协议TCP/IP和管道命名协议并重启网络服务。
      7、设置SQL SERVER 身份验证,解决连接时的权限问题(发布、订阅服务器均设置)
      步骤为:对象资源管理器----右击SQL实例-----属性----安全性----服务器身份验证------选“SQL Server和WINDOWS“,然后点确定。
      8、发布服务器和订阅服务器互相注册
      步骤如下:视图----单击以注册服务器----右键数据库引擎----新建服务器注册-----填写要注册的远程服务器名称------身份验证选“SQL Server验证“-----用户名(sa) 密码------创建组(也可不建)-----完成。对于只能用IP,不能用计算机名的,为其注册服务器别名
      二、发布和订阅
      如下工作都在发布服务器上配置,包括发布和订阅。
      快照发布和订阅
      1、 选择 复制 节点,右键本地发布 ----下一步---------系统弹出对话框看提示----直到“指定快照文件夹”----在“快照文件夹“中输入准备工作中创建的目录(指向步骤3所建的共享文件夹)------选择发布数据库-------选择发布类型
      下一步―――选择要发布的数据库autoweb中的表,将b(B)开头的表去掉,V开头的表去掉,c_开头的表去掉,t_开头的表去掉,剩下的表作为快照发布到订阅服务器上(单向传输)
      根据情况决定执行发布的间隔时间,如图每天每20分钟执行一次。
      下一步快照代理安全性,设置如图,连接到发布服务器用户jl,密码jl.
      -------填写发布名称。
      2、 选择 复制 节点,右键本地订阅,选择发布服务器-------选择订阅方式(选择推送订阅))-------填加订阅服务器--------选择代理计划(一般选择连续运行)---------其余选择默认项。
      至此完成快照发布和订阅。
      合并发布和订阅
      1、选择如下三个表作为合并发布的对象,用于双向通讯
      根据情况决定执行发布的间隔时间,如图每天每20分钟执行一次。
      2、 选择 复制 节点,右键本地订阅,选择发布服务器-------选择订阅方式(选择推送订阅))-------填加订阅服务器--------选择代理计划(一般选择连续运行)---------其余选择默认项。
      至此完成合并发布和订阅
      -------------------------------------------------------------------
      主要是要注意权限的问题,一般做发布/订阅,建议你做如下准备工作:
      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的端口,取消选择"动态决定端口",并输入对应的端口号
      

  3.   

    >>>>>>soft_wsx>>>>>>
    --数据备份与还原>>同步备用服务器
    --1、完全备份主数据库
    --2、使用带SANDBY子句的RESTORE DATABASE语句从主数据库的完全备份中还原生成备用数据库
    --3、创建作业,使用BACKUP LOG定时对主数据库时行日志备份
    --4、创建作业,使用带STANDBY子句的RESTORE LOG语句定时从主数据库的日志备份中恢复数据到备用数据库
    --5、主数据库不可用时,使用带RECOVERY子句的RESTORE LOG语句使备用数据库升级为主数据库
    ----具体代码及说明如下
    ---->>首先、创建一个淙用的数据库(主数据库)
    create database db_test_primary
    on
    (
       name=db_test_primary_data,
       filename='d:\db_test_primary_data.mdf')
    log on
    (
        name='db_test_primary_log',
        filename='d:\db_test_primary_log.ldf'
    )
    go--在主数据库上创建表
    create TABLE db_test_primary.dbo.db_test_primary1(id int)
    insert db_test_primary.dbo.db_test_primary1 select top 1000 ID from dbo.sysobjects
    go
    --对主数据库进行备份
    backup database db_test_primary
      to disk='d:\db_test_primary_data.bak'
      with format
    go--通过主数据库备份文件创建备用数据库(演示主数据库与这个备用数据库之间的同步)
    restore database db_test_second
      from disk='d:\db_test_primary_data.bak'
      with replace,
      standby='d:\db_test_primary_bak.ldf',
      move 'db_test_primary_data' to 'd:\db_test_second_data.mdf',
      move 'db_test_primary_log' to 'd:\db_test_second_log.ldf'
      
    --启动SQL AGENT服务(需要通过作业定时将主数据库同步到备用数据库)
    exec master.dbo.xp_cmdshell 'net start sqlserveragent',no_output
    go--创建主服务数据库与备用服务器数据库之间同步的作业
    declare @jobid uniqueidentifier
    exec msdb.dbo.sp_add_job
          @job_id=@jobid output,
          @job_name=N'数据同步'
          
    --创建同步处理步骤
    exec msdb.dbo.sp_add_jobstep
         @job_id=@jobid,
         @step_name=N'数据同步',
         @subsystem='TSQL',
         @command=N'
              --主数据库中进行日志备份
              backup log db_test_primary
                to disk=''d:\test_log_primary.bak''
                with format
                
                --备用数据中还原主数据库的日志备份(应用主数据库中的最新变化)
                --注:实际应该对主数据库备份与备用数据库的还原作业应该分别在主服务器和备用服务器上建立,
                    --并且备份文件应该放在主服务器和备用服务器都能访问的共享目录中
               restore log db_test_second
                from disk=''d:\test_log_primary.bak''
                with standby=''d:\test_log.ldf''',
          @retry_attempts=5,
          @retry_interval=5
    --创建调度
    exec msdb.dbo.sp_add_jobschedule
      @job_id=@jobid,
      @name='时间安排',
      @freq_TYPE=4,
      @freq_interval=1,
      @freq_subday_type=0x4,
      @freq_subday_interval=1
          
    --添加目录服务器
    exec msdb.dbo.sp_add_jobserver
      @job_ID=@jobid,
      @server_name=N'(local)'
    go
    --通过上述处理,主数据库与备用数据库之间的同步关系已经设置完成
    --下面开始测试是否能实现同步
    create table db_test_primary.dbo.db_test_primary3(id int)
    go
    insert db_test_primary.dbo.db_test_primary3 select top 5000 id from dbo.sysobjects
    waitfor delay '00:01:30'
    go--查询一下备用数据库,看看同步是否成功select * from db_test_second.dbo.db_test_primary3
    drop table db_test_primary.dbo.db_test_primary3
    --最后删除测试环境
    drop database msdb.dbo.sp_delete_job
      @job_name=N'数据同步'这种也可以的!作业+日志,注前提是把设置数据库的恢复模式为完全