zoukankan
html css js c++ java
通过作业,定时同步两个数据库
--
定时同步服务器上的数据
--
例子:
--
测试环境,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
查看全文
相关阅读:
nyoj 游戏高手的烦恼 (二分图最小点覆盖)
nyoj 三国志 (Dijkstra + 01背包)
《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅱ
《Algorithms 4th Edition》读书笔记——2.4 优先队列(priority queue)-Ⅰ
Java学习作业(14.4.21)
2014上年度学习计划
快速求幂(Quick Exponentiation)
B. Inna and Nine
B. Valera and Contest
Problem 2128 最长子串
原文地址:https://www.cnblogs.com/ghd258/p/260784.html
最新文章
Luogu3850 [TJOI2007]书架 (平衡树)
luogu1486 [NOI2004]郁闷的出纳员 (平衡树)
洛谷2019 3月月赛 2019.3.2
洛谷2019 3月月赛 T4
洛谷2019 3月月赛 T2
洛谷2019 3月月赛 T1
$CF55D [数位DP]$
P4451 [国家集训队]整数的lqp拆分
$CF241D Numbers$
O(1)的快速乘
热门文章
最长上升子序列
最大加权矩形 luogu1719
poj 1077 八数码
nyoj 校园网络 (Tarjan求强连通分量)
nyoj Cow Contest (传递闭包)
poj 1125 Stockbroker Grapevine(Folyd)
nyoj 有趣的问题(最短路径)
nyoj Sorting It All Out (拓扑排序)
nyoj 昂贵的聘礼(Dijkstra)
nyoj 月老的难题 (稳定婚姻问题)
Copyright © 2011-2022 走看看