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
查看全文
相关阅读:
属性包装
生成器
迭代器
深拷贝-浅拷贝
装饰器-wrapper
类别不均衡
参数优化-学习曲线
参数优化-验证曲线
参数优化-API
D. Number Of Permutations 符合条件的排列种类
原文地址:https://www.cnblogs.com/ghd258/p/260784.html
最新文章
python贡献度分析20/80定律
python数据统计量分析
python箱型图
pandas文件写入读取操作
pandas绘图
pandas创建一个日期
pandas获取当前时间
pandas 级联 concat append
pandas分组group
Apache 浏览器访问限制配置
热门文章
Apache 工作模式配置优化
Apache 工作模式详解
Apahce 加载模块说明
Apache 配置参数
Apache 优化
Apache 服务常用命令
Apache 部署HTTPS
Linux 内存释放
Linux TCP并发请求溺出 调优
类的构造器-init和new
Copyright © 2011-2022 走看看