如何从一个服务器定时更新另一个服务器的数据?

zsanhong 2006-06-09 08:26:42
在局域网中有一台数据库服务器,用的是syBase数据库,另外一台是sql2000,
在sybase数据库A中有一个表plan,
其中数据如下:
id Name Etime Atime
1 a1010 0030 0030
2 b1122 0200 0230
3 c3456 0310

sql2000中数据库B中另外一个表Aplan
planid Name Atime
3 a1010 0030
4 b1122 0230
5 c3456

其中syBase数据库A的表plan是经常更新的,比如过了一段时间,
表变成了这样
id Name Etime Atime
1 a1010 0030 0030
2 b1122 0200 0230
3 c3456 0310 0320

想达到这样的目的,sql2000每五分钟自动读取syBase数据库A的中表Plan,并更新相应的数据,
更新数据后,sql2000中Aplan 的数据应变成以下数据:
planid Name Atime
3 a1010 0030
4 b1122 0230
5 c3456 0320

请问就如何做?
...全文
616 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
zsanhong 2006-07-04
  • 打赏
  • 举报
回复
怎样用DTS实现这样的任务啊?
zsanhong 2006-07-04
  • 打赏
  • 举报
回复
高手在哪?
zsanhong 2006-07-04
  • 打赏
  • 举报
回复
我配制了链接服务器Sysbase1,可以看到Sybase数据库上的表名,但我用楼上的方法写一个
测试语句:
select * from Sybase1.test.dbo.alert 提示:
服务器: 消息 7312,级别 16,状态 1,行 1
对 OLE DB 提供程序 'MSDASQL' 的架构和/或目录的使用无效。提供了由四部分构成的名称,但提供程序并未表现必要的接口来使用目录和/或架构。
OLE DB 错误跟踪[Non-interface error]
hglhyy 2006-07-04
  • 打赏
  • 举报
回复
用订阅复制和DTS导入导出也可以的!

用订阅功能上楼已讲得很清楚了!

导入导出就按提示来:选择数据源和目的地,要导入导出什么表之类的!
hglhyy 2006-07-04
  • 打赏
  • 举报
回复
用链接服务器用作法:
企业管理器—》安全性—》连接服务器—》右键新建连接服务器—》定义连接名称; 选其他数据源; 指定程序名称为:SYBASE ADAPTIVE SERVER ANYWHERE PROVIDER8.0; 产品名称可不填; 数据源指定刚才ODBC中定义好的数据源名称; 提供程序字符串按以下格式填写:User ID=username;Password=userpasswd(或者按如下格式:UID=username;PWD=userpasswd),这里的用户名和密码对应所要连接的SYBASE数据库中的用户名和密码 —》 安全性标签页里:设置用此安全上下文进行,并录入SYBASE的数据库用户名和密码—》服务器选项标签页可默认—》确定。
5.准备工作全部完成!在sqlserver企业管理器—》安全性—》连接服务器打开刚建好的连接服务器—》点击表,即可在右边窗口看到该SYBASE数据库用户拥有的的所有表名,但在这里还并不能查看表的记录,这个需要在sqserver的查询分析器中用具体sql实现!访问表时,使用格式为: [连接服务器名]..[SYBASE用户].[表名]。
lanyigoo 2006-06-09
  • 打赏
  • 举报
回复
用事务复制
ActionLi 2006-06-09
  • 打赏
  • 举报
回复
可以自己写一个程序,用作业进行调度.
触发器,可以做么???
huailairen 2006-06-09
  • 打赏
  • 举报
回复
做一个作业,
定期的把数据更新过去。
zsanhong 2006-06-09
  • 打赏
  • 举报
回复
有没有例子啊?
filix 2006-06-09
  • 打赏
  • 举报
回复
可以试试在sql2000里面用openrowset()来读sybase里面的数据生成临时表,然后再更新
zsanhong 2006-06-09
  • 打赏
  • 举报
回复
能不能具体一点?
jasonren 2006-06-09
  • 打赏
  • 举报
回复
触发器
zsanhong 2006-06-09
  • 打赏
  • 举报
回复
顶!
guanjm 2006-06-09
  • 打赏
  • 举报
回复
你们怎么都忘了 最简单的 DTS啊
$扫地僧$ 2006-06-09
  • 打赏
  • 举报
回复
或者也可以用复制

复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。
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,逐步按向导完成

$扫地僧$ 2006-06-09
  • 打赏
  • 举报
回复
--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--属性--启动类型--选择"自动启动"--确定.
$扫地僧$ 2006-06-09
  • 打赏
  • 举报
回复
引用皱建

/*--同步两个数据库的示例

测试环境及同步要求:

有数据库服务器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



zsanhong 2006-06-09
  • 打赏
  • 举报
回复
还是不是很明白.
zsanhong 2006-06-09
  • 打赏
  • 举报
回复
有语句吗?

34,592

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧