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
查看全文
相关阅读:
Python之字典
Python之模块
Python之字符串格式化
结束循环
循环
C语言static和局部变量
C static extern和全局变量
extern static和函数
C语言typedef
C语言之文件包含
原文地址:https://www.cnblogs.com/ghd258/p/260784.html
最新文章
Python6_模块、包、import、from import的解释
Vagrant入门
Python5_学习方法论
Python4_数据库相关操作
Python3_函数参数传递、可变与不可变对象、变量作用域、函数返回值
word2016_添加标题和目录
rsa加解密密钥生成命令
加密小史
SQL中GROUP BY语句与HAVING语句的使用
yii2的定时任务
热门文章
常见匹配
grep命令
yii2 的ActiveRecord
linux命令生成公私钥
ngnix配置自解
Python之json使用
函数
Python之字符串操作
Python之切片操作
Python之列表
Copyright © 2011-2022 走看看