定時同步服務器上的數據的例子:
測試環境
SQL Server
遠程服務器名:xz
用戶名為:sa
無密碼
測試數據庫:test
服務器上的表(查詢分析器連接到服務器上創建)
create table [user](id int primary key
number varchar(
)
name varchar(
))
go
以下在局域網(本機操作)
本機的表
state說明:null 表示新增記錄
表示修改過的記錄
表示無變化的記錄
if exists (select * from dbo
sysobjects where id = object_id(N
[user]
) and OBJECTPROPERTY(id
N
IsUserTable
) =
)
drop table [user]
GO
create table [user](id int identity(
)
number varchar(
)
name varchar(
)
state bit)
go
創建觸發器
維護state字段的值
create trigger t_state on [user]
after update
as
update [user] set state=
from [user] a join inserted b on a
id=b
id
where a
state is not null
go
為了方便同步處理
創建鏈接服務器到要同步的服務器
這裡的遠程服務器名為:xz
用戶名為:sa
無密碼
if exists(select
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
) =
)
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=
同步後更新本機的標志
update [user] set state=
where isnull(state
)=
COMMIT TRAN
go
創建作業
定時執行數據同步的存儲過程
if exists(SELECT
from msdb
sysjobs where name=
數據處理
)
EXECUTE msdb
dbo
sp_delete_job @job_name=
數據處理
exec msdb
sp_add_job @job_name=
數據處理
創建作業步驟
declare @sql varchar(
)
@dbname varchar(
)
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 =
重試次數
@retry_interval =
重試間隔
創建調度
EXEC msdb
sp_add_jobschedule @job_name =
數據處理
@name =
時間安排
@freq_type =
每天
@freq_interval =
每天執行一次
@active_start_time =
點執行
From:http://tw.wingwit.com/Article/Common/201311/5104.html