我用VS2003 C#+ SQL SERVER2000 开发系统,客户要求在两个不同的相距2公里的校区地点放置两台安装SQL SERVER主机,并要求定时的将主机1的数据上传给主机2,实现数据库数据同步的目的,如何实现此功能呢!
大峡门给小弟指教一下。最好给个例子!
解决方案 »
- 关于datagridview 自定义单元格控件的问题
- 2个线程,一个接收,一个存数据库,前者速度快,感觉只有接收,没有存储
- 求助:C#如何实现背景音乐循环播放(有部分代码)
- bs中能像cs中的response窗口一样把窗口置前吗?
- js的execCommand如何是文本居中,居左,居右啊???
- C#连接oracle报java.lang.UnsatisfiedLinkError 异常我跟踪是在打开数据库连接时报的,我用的是Client.OracleConnection
- 100分求助:我的代码到底错在哪??急等(分不夠,馬上加)
- 关于后台自动生成Button样式的问题。
- C#当中如何才能判断用户是否处于全屏状态(例如游戏)
- sos!~~~
- 有没有网页美工啊,进来看看
- 邮件发送(MailMessage)使用过的,高手请进,问题解决倾囊相送(如方便请客感谢)
/*--同步两个数据库的示例测试环境及同步要求:有数据库服务器srv1和srv2,两台电脑能互相访问,有数据
srv1.库名..author有字段:id,name,phone,
srv2.库名..author有字段:id,name,telphone,adress要求:
srv1.库名..author增加记录则srv1.库名..author记录增加
srv1.库名..author的phone字段更新,则srv1.库名..author对应字段telphone更新--邹建 2004.12(引用请保留此信息)--*/--大致的处理步骤
--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
--3.实现同步处理
--在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--属性--启动类型--选择"自动启动"--确定.
常用的有两种方式:
一种是直接SqlServer对SqlServer进行数据传输。只要两台SqlServer服务器都连在互联网上(你的两个工作站相距2km,接专线是不可能的,最好是宽带,如果条件不允许,等要通信的时候都拨猫上网也行),
ConnectionString="server=XXX.XXX.XXX.XXX;database=a;uid=a;pwd=a" 。做一个存储过程把A服务器中的数据取出来送到B服务器就行了。优点:实现起来容易;缺点:容易发生异常,需要事务处理。 第二种是将A中的数据打包成XML文件再上传,接受端获取XML文件之后在解析,然后再放入SqlServer中。
优点:可靠性强。缺点:实现复杂,发送端和接受端都要有相应的打包和解析程序。PS:
如果你的两台机器都没有固定IP,如果有域名的话,则在传输前用“花生壳”之类软件进行域名解析,获取IP。如果没有域名,就比较麻烦了,可以试着用ISP动态分配的IP试试,但不一定管用。
如果数据很重要,涉及安全性,建议采用后一种方式,将xml文件加密后再传输。