CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

问一下分布式的问题?

楼主zhoulianghua926(周良华)2003-12-02 15:48:32 在 MS-SQL Server / 应用实例 提问

服务器:SQLSERVER2000  
  客户端:ACESS  
  软件:VB  
  实现:  
  数据库服务器放在INTER网上.想用分布式实现数据库异类复制到各个客户端.客户端数据更新后服务器数据也马上更新.能否实现.  
  主要问题:  
  如何通过程序把服务器的数据复制到客户端.  
  谢谢 问题点数:50、回复次数:2Top

1 楼lvltt(未完成)回复于 2003-12-02 15:58:28 得分 50

利用数据库复制技术   实现数据同步更新  
  复制的概念  
  复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。  
  SQL复制的基本元素包括  
  出版服务器、订阅服务器、分发服务器、出版物、文章  
  SQL复制的工作原理  
  SQL   SERVER   主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器  
  SQL   SERVER复制技术类型  
  SQL   SERVER提供了三种复制技术,分别是:  
  1、快照复制(呆会我们就使用这个)  
  2、事务复制  
  3、合并复制  
  只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。  
  第一先来配置出版服务器  
  (1)选中指定[服务器]节点  
  (2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令  
  (3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。  
  (4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution)  
  第二创建出版物  
  (1)选中指定的服务器  
  (2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框  
  (3)选择要创建出版物的数据库,然后单击[创建发布]  
  (4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)    
  (5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如   ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQL   SERVER   2000"的数据库服务器  
  (6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表  
  (7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。  
  第三设计订阅  
  (1)选中指定的订阅服务器  
  (2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]  
  (3)按照单击[下一步]操作直到系统会提示检查SQL   SERVER代理服务的运行状态,执行复制操作的前提条件是SQL   SERVER代理服务必须已经启动。  
  (4)单击[完成]。完成订阅操作。  
  完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制--发布内容--右键发布内容--属性--击活--状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:\ProgramFiles\Microsoft   SQL   Server\MSSQL\REPLDATA\unc\XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表..  
   
  1.作发出版,分发服务器,必须要启动   SQLServerAgent服务  
  订阅服务器可以不用启动   SQLServerAgent服务.  
   
  2.在进行操作之前,必须在出版分发服务器这边注册订阅服务器,两边最好建有相同结构的数据库  
  3.从菜单中选Tools>>Republication>>Configure   Publishing   And   SubScripter   ,接着进行配置,Configure   Publishing   ,Subscirpter   And   Distribution...配置要分发的数据库及其表,视图等  
   
  4.创建分发管理   Create   And   Manager   Publication,选择要分发的数据库  
   
  5.接上在此基础上或Push   Subscriptions   to   other,选取分发数据库下的出版物,再按右边的按钮:Push   New   Subscription,逐步按向导完成  
   
   
   
  /*****************   常见问题:权限问题      
   
  启动代理的域用户账号必须具有读取发布-分发服务器目录的权限  
  你用的账号没有读取\\ServerA\D$\Program   Files\Microsoft   SQL         Server\MSSQL\repldata\unc\这个目录下的文件的权限。  
   
   
            启动代理的域用户账号必须具有读取发布-分发服务器目录的权限  
  ----^^^^^^^^^^^^^^^在控制面板-->管理-->服务-->sqlagent-->属性里的那个启动用户  
  Top

2 楼lvltt(未完成)回复于 2003-12-02 15:59:49 得分 0

/*--数据库数据复制  
   
  将一个数据库中的数据复制到另一个数据库  
  如果某列在目标数据库中为标识列,将不会被复制  
   
  适用范围:数据库结构发生了变化,想将旧数据库进行升级  
  这样就可以根据新的数据库结构创建一个空库,然后  
  将旧数据库的所有数据复制到新库中  
  --邹建   203.10--*/  
   
  /*--调用示例  
   
  exec   p_copydb   '源数据库','目标数据库'  
  exec   p_copydb   'acc_五医','acc_演示数据8'  
  --*/  
   
  if   exists   (select   *   from   dbo.sysobjects   where   id   =   object_id(N'[dbo].[p_copydb]')   and   OBJECTPROPERTY(id,   N'IsProcedure')   =   1)  
  drop   procedure   [dbo].[p_copydb]  
  GO  
   
  create   proc   p_copydb  
  @o_dbname   sysname, --要复制数据的数据库--源数据库  
  @n_dbname   sysname, --接收数据的数据库--目标数据库  
  @cleardb   bit=0 --清空目标数据库  
  as  
  declare   @sql   nvarchar(4000)  
   
  --禁用约束,防止复制时的数据冲突  
  set   @sql='declare   #tbc   cursor   for   select   name,tbname=object_name(parent_obj)  
  from   '+@n_dbname+'..sysobjects   where   xtype   in(''C'',''F'')'  
  exec(@sql)  
  declare   @name   sysname,@tbname   sysname  
  open   #tbc  
  fetch   next   from   #tbc   into   @name,@tbname  
  while   @@fetch_status=0  
  begin  
  set   @sql='alter   table   '+@n_dbname+'..['+@tbname+']   NOCHECK   CONSTRAINT   ['+@name+']'  
  exec(@sql)  
  fetch   next   from   #tbc   into   @name,@tbname  
  end  
  close   #tbc  
   
  --复制数据  
  declare   @sql1   varchar(8000)  
  set   @sql='declare   #tb   cursor   for   select   a.name   from   '  
  +@o_dbname+'..sysobjects   a   inner   join   '  
  +@n_dbname+'..sysobjects   b   on   a.name=b.name  
  where   a.xtype=''U''   and   b.xtype=''U'''  
  exec(@sql)  
  open   #tb  
  fetch   next   from   #tb   into   @tbname  
  while   @@fetch_status=0  
  begin  
  select   @sql1=''  
  ,@sql='select   @sql1=@sql1+'',[''+a.name+'']''   from(  
  select   name   from   '+@o_dbname+'..syscolumns   where   id   in    
  (select   id   from   '+@o_dbname+'..sysobjects   where   name='''+@tbname+''')  
  )   a inner   join   (  
  select   name   from   '+@n_dbname+'..syscolumns   where   status<>0x80   and   id   in    
  (select   id   from   '+@n_dbname+'..sysobjects   where   name='''+@tbname+''')  
  )   b   on   a.name=b.name'  
  exec   sp_executesql   @sql,N'@sql1   nvarchar(4000)   out',@sql1   out  
   
  select   @sql1=substring(@sql1,2,8000)  
  exec('insert   into   '+@n_dbname+'..['+@tbname+']('+@sql1  
  +')   select   '+@sql1+'   from   '+@o_dbname+'..['+@tbname+']')  
  if   @@error<>0  
  print('insert   into   '+@n_dbname+'..['+@tbname+']('+@sql1  
  +')   select   '+@sql1+'   from   '+@o_dbname+'..['+@tbname+']')  
  fetch   next   from   #tb   into   @tbname  
  end  
  close   #tb  
  deallocate   #tb  
   
  --数据复制完成后启用约束  
  open   #tbc  
  fetch   next   from   #tbc   into   @name,@tbname  
  while   @@fetch_status=0  
  begin  
  set   @sql='alter   table   '+@n_dbname+'..['+@tbname+']   CHECK   CONSTRAINT   ['+@name+']'  
  exec(@sql)  
  fetch   next   from   #tbc   into   @name,@tbname  
  end  
  close   #tbc  
  deallocate   #tbc  
  go  
   
   
  Top

相关问题

  • 分布式报表问题
  • 分布式事务问题
  • 分布式事务问题
  • 分布式查询问题
  • 请问:分布式事务问题
  • pb6.5分布式应用中dddw问题
  • 分布式程序设计问题
  • 一个分布式开发的问题
  • pb8.0下的分布式开发问题
  • pb8.0下的分布式开发问题

关键词

  • 数据库
  • 服务器
  • 数据
  • 账号
  • 属性
  • 系统
  • 复制
  • 分发
  • copydb
  • 订阅

得分解答快速导航

  • 帖主:zhoulianghua926
  • lvltt

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo