两台电脑之间,如何同步数据

--定时同步服务器上的数据

--例子:
--
测试环境,SQL Server2000,远程服务器名:xz,用户名为:sa,无密码,测试数据库:test
--
服务器上的表(查询分析器连接到服务器上创建)
create table [user](id int primary key,number varchar(4),name varchar(10))
go
--以下在局域网(本机操作)
--
本机的表,state说明:null 表示新增记录,1 表示修改过的记录,0 表示无变化的记录
if exists (select * from dbo.sysobjects where id = object_id(N'[user]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
   
drop table [user]
GO
create table [user](id int identity(1,1),number varchar(4),name varchar(10),state bit)
go
--创建触发器,维护state字段的值
create trigger t_state on [user]
after
update
as
update [user] set state=1
from [user] a join inserted b on a.id=b.id
where a.state is not null
go

--为了方便同步处理,创建链接服务器到要同步的服务器
--
这里的远程服务器名为:xz,用户名为:sa,无密码
if exists(select 1 from master..sysservers where srvname='srv_lnk')
   
exec sp_dropserver 'srv_lnk','droplogins'
go
exec sp_addlinkedserver  'srv_lnk','','SQLOLEDB','xz'
exec sp_addlinkedsrvlogin 'srv_lnk','false',null,'sa'
go

--创建同步处理的存储过程
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_synchro]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
   
drop procedure [dbo].[p_synchro]
GO
create proc p_synchro
as
--set  XACT_ABORT on
--
启动远程服务器的MSDTC服务
--
exec master..xp_cmdshell 'isql /S"xz" /U"sa" /P"" /q"exec master..xp_cmdshell ''net start msdtc'',no_output"',no_output

--启动本机的MSDTC服务
--
exec master..xp_cmdshell 'net start msdtc',no_output

--进行分布事务处理,如果表用标识列做主键,用下面的方法
--
BEGIN DISTRIBUTED TRANSACTION
    --同步删除的数据
    delete from srv_lnk.test.dbo.[user]
       
where id not in(select id from [user])

   
--同步新增的数据
    insert into srv_lnk.test.dbo.[user]
   
select id,number,name from [user] where state is null
   
   
--同步修改的数据
    update srv_lnk.test.dbo.[user] set
       
number=b.number,name=b.name
   
from srv_lnk.test.dbo.[user] a
       
join [user] b on a.id=b.id
   
where b.state=1
   
   
--同步后更新本机的标志
    update [user] set state=0 where isnull(state,1)=1
--COMMIT TRAN
go

--创建作业,定时执行数据同步的存储过程
if exists(SELECT 1 from msdb..sysjobs where name='数据处理')
   
EXECUTE msdb.dbo.sp_delete_job @job_name='数据处理'
exec msdb..sp_add_job @job_name='数据处理'

--创建作业步骤
declare @sql varchar(800),@dbname varchar(250)
select @sql='exec p_synchro'      --数据处理的命令
    ,@dbname=db_name()            --执行数据处理的数据库名

exec msdb..sp_add_jobstep @job_name='数据处理',
   
@step_name = '数据同步',
   
@subsystem = 'TSQL',
   
@database_name=@dbname,
      
@command = @sql,
   
@retry_attempts = 5,         --重试次数
    @retry_interval = 5          --重试间隔

--创建调度
EXEC msdb..sp_add_jobschedule @job_name = '数据处理',
   
@name = '时间安排',
   
@freq_type = 4,                 --每天
    @freq_interval = 1,                --每天执行一次
    @active_start_time = 00000        --0点执行
go

-------------------------------------------------------------------------------
上面是手工同步的方法,优点是方便自己控制数据同步.
下面是SQL自身的同步:发布
/订阅

利用数据库复制技术 实现数据同步更新
复制的概念
复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。使用复制技术,用户可以将一份数据发布到多台服务器上,从而使不同的服务器用户都可以在权限的许可的范围内共享这份数据。复制技术可以确保分布在不同地点的数据自动同步更新,从而保证数据的一致性。
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:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA\unc\XIAOWANGZI_database_database下面
看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。
要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表


/***************** 常见问题:权限问题 

启动代理的域用户账号必须具有读取发布-分发服务器目录的权限
你用的账号没有读取\\ServerA\D$\Program Files\Microsoft SQL    Server\MSSQL\repldata\unc\这个目录下的文件的权限。


     启动代理的域用户账号必须具有读取发布-分发服务器目录的权限
----^^^^^^^^^^^^^^^在控制面板-->管理-->服务-->sqlagent-->属性里的那个启动用户

(1)建立发布分发服务器:
======================================
第一步
分发的数据库服务器的代理服务SQL Server Agent必须使用本地帐户启动而不能使用默认的LocalSystem启动.操作步骤:开始
->控制面板->管理工具->服务,在服务中找到SQLSERVERAGENT服务,右击->属性->登录,选择”此帐户”,并且输入本地用户名密码,或者点击浏览按钮选择本地帐户。

第二步
打开企业管理器:开始
->程序->Microsoft SQL Server->企业管理器
可以看到如下的SQLServer组

需要注意的关键问题SQLServer组中注册的SQLServer服务器必须使用数据库服务器的机器名,不可以使用IP地址或者local做为SQLServer组的注册名,不然会出现无法共享的问题.导致发布不成功.
如果已经存在的使用IP地址或者local做为SQLServer组的注册名,就删除该注册,然后按照以下步骤添加使用机器名作为注册的SQLServer.
步骤:
右击”SQLServer组”,选择”新建SQLServer注册”
再弹出的向导界面点下一步,进入选择服务器界面,在:可用的服务器”中选择服务器,如果列表没有列出服务器则在上面手工输入服务器的机器名,然后点击”添加”之后点击下一步.

在选择身份验证模式中选择SQLServer身份验证,如下图
提示输入输入用户名密码,输入正确的数据库管理员密码后点击下一步
一直下一步到完成就可以了.
就会看到服务器已经注册到SQLServer组中,现在可以对注册的服务器进行复制分发订阅操作.

选中服务器,选择工具
->复制->配置发布、订阅服务器和分发…
在弹出的向导界面一直点击下一步到”选择快照文件夹”界面,SQLServer会默认选择安装路径作为快照位置,这个不用管它,直接默认就可以
点击下一步会提示,不用管点”是”
如果是提示路径无效,就把地址直接换成“\\服务器机器名\”格式就可以了。到最后我们是使用FTP,这里的快照路径可以不使用,所以不重要,只要能配置成功就可以了。

一路下一步,在“自定义配置”界面选择“是,让我设置分发数据库属性、启用发布服务器或者发布设置”
继续下一步,一直到“启用发布服务器”设置,查看列表中需要启用的发布数据库服务器是否启用,没有的话就勾选上,并把多余的去掉。
下一步,“启用发布数据库”设置,选择需要发布的数据库,注意选择“事务”发布,不要选择“合并”
再下一步,“启用订阅服务器”不选择任何服务器订阅。直接下一步,点击完成,系统开始自动配置,知道提示完成。
注意:在这一步中出现错误大部分是因为SQLSERVERAGENT的服务没有用本地用户启动和SQL注册使用的不是机器名。
-------------------
提示错误18483:未能连接到服务器“DB1”,因为“distributor_admin”未在该服务器上定义为远程登录。 

--出现这种问题,应该是你曾经更改过计算机名
--
执行下面的语句进行修复,完成后重新启动SQL服务,然后重做配置 

if  serverproperty('servername'<>  @@servername 
begin 
          
declare  @server  sysname 
          
set  @server  =  @@servername 
          
exec  sp_dropserver  @server  =  @server 
          
set  @server  =  cast(serverproperty('servername'as  sysname)             
          
exec  sp_addserver  @server  =  @server  ,  @local  =  'LOCAL' 
end 

----------------------------------

====================
(
2)建立发布内容
====================
展开数据库Server注册节点的复制下面右击“发布内容”选择“新建发布”,进入向导界面,下一步选择数据库。
下一步选择“事物发布”

下一步选择如图
下一步指定项目
在左边的的项目中选择要发布的项目,右边选择项目子项,比如选择了表项目,右边需要选择要发布的表。

下一步选择发布名称和描述
下一步自定义发布属性,选择如图

下一步筛选数据,选择如图
下一步筛选行,不作改动,直接下一步

为了数据安全性,需要署名订阅
下一步设置调度

点击“更改”按钮更改调度时间
下一步点击完成开始自动配置。
成功之后会在数据库服务器节点下的复制
->发布内容中看到刚才新建的发布。
==================
(
3)FTP服务器建立:
==================
右击新建的发布
->属性->快照位置.开始配置通过FTP广域网传输数据。
在使用FTP的时候我们必须在本地架设一个FTP服务器以便中心数据库服务器(订阅服务器)通过FTP来接受发布服务器的发布的数据.
FTP的服务器可以使用任何一种FTPServer软件,推荐Server
-U,IIS.关于如何假设FTP请参看ZC另一部经典巨作《三步搞定FTP服务器架设》。

取消“在常用快照文件夹中生成快照”选项
勾选“在下列位置中生成快照”
在数据库发布服务器的磁盘中创建一个文件夹用来存放临时快照,如下图
按照图示设置
FTP服务器名填写架设好的LAN内的FTP服务器IP地址,端口21,指定“从FTP根到该文件夹的客户机路径”是前面我们新建的用来存放快照的文件夹。这个可以在FTP服务器中设置。这里填写用户的根目录(目录名是根据FTP服务器设置的虚拟文件夹填写的)
==================
(
4)订阅服务器配置:
==================
按照注册本地SQLServer服务器的方法注册中心数据库服务器,这里需要使用IP地址,因为要通过WAN,所以使用机器名是无效的,只有通过IP来注册和订阅本地发布数据库的数据,还有就是要在中心数据库服务器上新建一个与发布数据库相同名称的空数据库。否则会导致订阅不成功。由于中心数据库服务器在远程,不能直接访问本地文件夹,所以需要通过FTP传输。
在本地需要强制中心服务器来订阅发布的数据库,这样就不用中心数据库服务器通过WAN来查找发布数据库了。
操作步骤如下:

选择已经建好的发布,右击,选择“强制新订阅”

出现强制订阅向导,点击下一步选择订阅服务器

点击下一步选择目的数据库
填写在订阅服务器上存在的数据库,就是前面我们需要在中心数据库上创建的同名空库,如果没有创建,可以点击右边的“浏览或者创建”来创建同名空库。
点击新建

输入数据库名称点击确定就可以了

下一步设置分发代理程序调度
点击“更改”按钮来更改调度

点击下一步初始化订阅,如图选择
一路下一步到完成就可以。

在完成成功之后选择我们创建的发布,会在右边的窗口中出现刚才的强制订阅
至此通过FTP广域网数据库复制分发订阅就全部完成了。

 

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的端口,取消选择"动态决定端口",并输入对应的端口号

 

 

 

 

SQLServer2000同步复制技术实现步骤
作者:gaojier 日期:
2007-06-25
字体大小: 小 中 大
一、 预备工作
1.发布服务器,订阅服务器都创建一个同名的windows用户,并设置相同的密码,做为发布快照文件夹的有效访问用户
--管理工具
--
计算机管理
--
用户和组
--
右键用户
--
新建用户
--
建立一个隶属于administrator组的登陆windows的用户(SynUser)
2.在发布服务器上,新建一个共享目录,做为发布的快照文件的存放目录,操作:
我的电脑
--D:\ 新建一个目录,名为: PUB
--
右键这个新建的目录
--
属性--共享
--
选择"共享该文件夹"
--
通过"权限"按纽来设置具体的用户权限,保证第一步中创建的用户(SynUser) 具有对该文件夹的所有权限
--
确定
3.设置SQL代理(SQLSERVERAGENT)服务的启动用户(发布/订阅服务器均做此设置)
开始
--程序--管理工具--服务
--
右键SQLSERVERAGENT
--
属性--登陆--选择"此账户"
--
输入或者选择第一步中创建的windows登录用户名(SynUser)
--
"密码"中输入该用户的密码
4.设置SQL Server身份验证模式,解决连接时的权限问题(发布/订阅服务器均做此设置)
企业管理器
--右键SQL实例--属性
--
安全性--身份验证
--
选择"SQL Server 和 Windows"
--
确定
5.在发布服务器和订阅服务器上互相注册
企业管理器
--右键SQL Server组
--
新建SQL Server注册...
--
下一步--可用的服务器中,输入你要注册的远程服务器名 --添加
--
下一步--连接使用,选择第二个"SQL Server身份验证"
--
下一步--输入用户名和密码(SynUser)
--
下一步--选择SQL Server组,也可以创建一个新组
--
下一步--完成
6.对于只能用IP,不能用计算机名的,为其注册服务器别名(此步在实施中没用到)
  (在连接端配置,比如,在订阅服务器上配置的话,服务器名称中输入的是发布服务器的IP)
开始
--程序--Microsoft SQL Server--客户端网络实用工具
--
别名--添加
--
网络库选择"tcp/ip"--服务器别名输入SQL服务器名
--
连接参数--服务器名称中输入SQL服务器ip地址
--
如果你修改了SQL的端口,取消选择"动态决定端口",并输入对应的端口号
二、 正式配置
1、配置发布服务器
打开企业管理器,在发布服务器(B、C、D)上执行以下步骤:
(
1) 从[工具]下拉菜单的[复制]子菜单中选择[配置发布、订阅服务器和分发]出现配置发布和分发向导
(
2) [下一步] 选择分发服务器 可以选择把发布服务器自己作为分发服务器或者其他sql的服务器(选择自己)
(
3) [下一步] 设置快照文件夹
采用默认\\servername\Pub
(
4) [下一步] 自定义配置
可以选择:是,让我设置分发数据库属性启用发布服务器或设置发布设置
否,使用下列默认设置(推荐)
(
5) [下一步] 设置分发数据库名称和位置 采用默认值
(
6) [下一步] 启用发布服务器 选择作为发布的服务器
(
7) [下一步] 选择需要发布的数据库和发布类型
(
8) [下一步] 选择注册订阅服务器
(
9) [下一步] 完成配置
2、创建出版物
发布服务器B、C、D上
(
1)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令
(
2)选择要创建出版物的数据库,然后单击[创建发布]
(
3)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)
(
4)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,
SQLSERVER允许在不同的数据库如 orACLE或ACCESS之间进行数据复制。
但是在这里我们选择运行"SQL SERVER
2000"的数据库服务器
(
5)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表
注意: 如果前面选择了事务发布 则再这一步中只能选择带有主键的表
(
6)选择发布名称和描述
(
7)自定义发布属性 向导提供的选择:
是 我将自定义数据筛选,启用匿名订阅和或其他自定义属性
否 根据指定方式创建发布 (建议采用自定义的方式)
(
8)[下一步] 选择筛选发布的方式
(
9)[下一步] 可以选择是否允许匿名订阅
1)如果选择署名订阅,则需要在发布服务器上添加订阅服务器
方法:
[工具]->[复制]->[配置发布、订阅服务器和分发的属性]->[订阅服务器] 中添加
否则在订阅服务器上请求订阅时会出现的提示:改发布不允许匿名订阅
如果仍然需要匿名订阅则用以下解决办法
[企业管理器]->[复制]->[发布内容]->[属性]->[订阅选项] 选择允许匿名请求订阅
2)如果选择匿名订阅,则配置订阅服务器时不会出现以上提示
(
10)[下一步] 设置快照 代理程序调度
(
11)[下一步] 完成配置
当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。



----------------------------


--参考:
/*

作者:邹建
*/

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

有数据
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


--然后创建一个作业定时调用上面的同步处理存储过程就行了

企业管理器
--管理
--
SQL   Server代理
--
右键作业
--
新建作业
--
"常规"项中输入作业名称
--
"步骤"项
--
新建
--
"步骤名"中输入步骤名
--
"类型"中选择"Transact-SQL   脚本(TSQL)"
--
"数据库"选择执行命令的数据库
--
"命令"中输入要执行的语句:   exec   p_process  
--
确定
--
"调度"项
--
新建调度
--
"名称"中输入调度名称
--
"调度类型"中选择你的作业执行安排
--
如果选择"反复出现"
--
点"更改"来设置你的时间安排


然后将SQL   Agent服务启动,并设置为自动启动,否则你的作业不会被执行

设置方法:
我的电脑
--控制面板--管理工具--服务--右键   SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.


--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

 

 

 

 

 

 

自己写个存储过程,全部解决了.
DROP PROC AutoDaoRuData
GO
CREATE PROC AutoDaoRuData(@byvServer varchar(100),@byvUser varchar(100),@byvPassWord varchar(100))
AS
--获取所有表,插入到临时表中
DECLARE @strTableName varchar(100)
DECLARE @strSql varchar(1000)
IF object_id('tempdb..#') IS NOT NULL  
  DROP TABLE #  
SELECT Name INTO # FROM sysobjects 
WHERE xtype='u' and status>=0
sign2:
SET @strTableName=NULL
SELECT TOP 1 @strTableName=Name FROM #
select @strtablename
IF @strTableName IS NULL
GOTO Sign1
--清除表
SET @strSql='TRUNCATE TABLE Gas2006.dbo.'+@strTableName
EXEC (@strSql)
--插入表数据
SET @strSql='INSERT INTO OPENROWSET(''SQLOLEDB'',''.'';''sa'';''riihplzhuxiaojun'',Gas2006.dbo.'+@strTableName+')'+
' SELECT *'+
' FROM OPENROWSET(''SQLOLEDB'', '''+
  @byvServer+''';'''+@byvUser+''';'''+@byvPassWord+''', Gas2006.dbo.'+@strTableName+')'
EXEC(@strSql)
DELETE FROM # WHERE Name=@strTableName
GOTO sign2
sign1:

 

http://topic.csdn.net/u/20100117/16/6efa9bba-491d-4f67-87b0-74dab8810a3d.html

posted @ 2010-11-25 22:29  小锋神  阅读(8354)  评论(0编辑  收藏  举报