`
逆风的香1314
  • 浏览: 1432032 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

通过作业,定时同步两个数据库

阅读更多


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

--例子:
--测试环境,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


 

分享到:
评论

相关推荐

    同步两个数据库的数据

    这里的“同步两个数据库的数据”指的是确保两个数据库中的特定表——在这个例子中是“staff”表——保持一致。以下是对这个主题的详细解释: 首先,同步的目的是确保数据的一致性,避免数据丢失或冲突。在这种情况...

    java实现两个mysql同步主库的数据

    在IT行业中,数据库同步是一个常见的需求,特别是在分布式系统或者高可用架构中,为了保证数据的一致性和完整性,通常需要将一个数据库(主库)的数据实时或定时地复制到另一个数据库(从库)。在这个场景中,Java...

    java多个数据库实现数据同步

    数据同步是指在两个或多个数据库之间,当某个数据库中的数据发生改变时,这些变化能够被实时或者近实时地反映到其他数据库中。这有助于防止数据丢失和减少数据冲突,保证各个节点的数据一致性。 在Java中,实现多...

    JAVA将一个数据中数据定时自动复制(抽取)到另一个数据库

    本文将深入探讨如何使用Java编程语言实现从一个数据库中定时自动抽取数据并复制到另一个数据库,以达到数据库间的实时或近实时同步。 首先,我们需要了解基础概念。Java是一种广泛使用的面向对象的编程语言,具有...

    如何将数据从 SQL Server 实时或定时同步到 MySQL 数据库.pdf

    本文将详细介绍如何使用 SyncNavigator 软件将数据从 SQL Server 实时或定时同步到 MySQL 数据库。 SyncNavigator 是一款强大的数据库同步工具,它能有效地解决不同数据库之间的兼容性问题,支持多种数据库版本,...

    如何在两个SQLSERVER之间数据同步

    数据同步是在两个或多个数据库之间保持数据一致性的过程。对于SQL Server而言,其提供了多种数据同步的方法,其中最常用的就是复制技术。复制技术不仅可以用于SQL Server实例之间,还可以用于跨不同类型的数据库管理...

    同步两台mysql数据库

    标题"同步两台mysql数据库"指的是在两个或多个MySQL服务器之间进行数据复制和同步,确保数据的一致性。传统的MySQL同步通常涉及主从复制,即一个主数据库负责写操作,多个从库进行读操作并接收主库的更新。然而,这...

    使用kettle同步数据库表至其他库

    使用kettle同步数据库表。网上找教程找了一天。终于弄好了。将两个数据库连接改成你自己的。sql也要改,然后把后面步骤的字段重新获取一下。然后就可以同步数据了。数据来源表增删改都可以同步。参考一下吧

    JAVA Spring boot JDBC同步不同服务器oracle数据库

    在业务代码中,你需要实现一个定时任务或者监听数据库事件,来定期检查两个数据库之间的数据差异,并进行同步。可以使用Spring的`@Scheduled`注解来创建定时任务,或者使用Oracle的触发器和存储过程来监听变化。 ``...

    springboot+mysql+oracle+druid 双数据库进行数据同步

    本项目主要探讨了如何使用SpringBoot框架结合MySQL和Oracle两个不同的数据库系统,实现数据的实时或定时同步,尤其是在数据量庞大的情况下(数十万条记录)避免内存溢出(OOM)问题。以下是对这个主题的详细阐述: ...

    Mysql两个数据库表之间双向数据同步方案.docx

    ### MySQL两个数据库表之间的双向数据同步方案 #### 概述 本文档主要介绍了一种针对MySQL环境下两个数据库表之间的双向数据同步方案。该方案适用于需要保持两个不同位置或不同环境中数据库表数据一致性的场景,...

    定时任务加数据库操作demo

    在IT领域,定时任务和数据库操作是两个非常关键的概念,特别是在构建高效、自动化的系统时。下面我们将深入探讨这两个主题,并结合"checkaccount"这个文件名来解析可能的应用场景。 首先,定时任务(Scheduled ...

    从sqlserver同步数据到Mysql数据库

    5. **数据转换**:根据两个数据库的不同数据类型和结构,可能需要进行数据类型的转换,确保数据能正确导入MySQL。 6. **调度和执行**:设置迁移任务的执行计划,如定时同步,然后运行任务,监控数据迁移进度和结果...

    JAVA 线程实现数据库的主从同步更新

    在主从同步的场景下,我们可以创建两个线程:一个是主数据库的更新线程,负责处理写操作;另一个是从数据库的同步线程,用于定期检查主数据库的变更,并将这些变更应用到从数据库上。 1. **主数据库更新线程**: ...

    两台电脑之间oracle数据库表同步.zip

    1、该压缩包包含,创建link的过程,同步库表的sql语句,自动执行的bat脚本。 2、通过link进行连接两台带有oracle11g的数据库之间表同步,包含添加和更新表数据。...3、通过任务计划自动执行bat脚本,定时同步库表。

    数据库同步操作手册

    2. 同步方式设置包含立即同步、定时同步、固定时间间隔同步。 3. 同步内容设置是指定义同步任务中数据的具体内容,如同步哪些字段、哪些记录等。 4. 数据源设置是配置任务执行过程中所涉及的源数据库和目的数据库...

    Delphi XE7 Android平台与PC端同步SQLite 数据库

    在IT行业中,数据库同步是跨平台应用开发中的一个重要环节,特别是在多设备协同工作的场景下。本文将详细讨论如何使用Delphi XE7在Android平台上与PC端同步SQLite数据库,以便实现数据的一致性和实时更新。 Delphi ...

    如何支持数据库双向同步

    双向同步意味着两个数据库不仅能够从一个到另一个推送更改,也能接收对方的更改。这样,无论在哪个数据库中进行的更新都会反映到另一方,确保了数据的一致性。 要实现双向同步,我们需要解决几个关键问题: 1. **...

    互联网数据库同步程序 delphi7

    标题“互联网数据库同步程序 Delphi7”涉及到的是一个利用Delphi7编程环境开发的数据库同步解决方案,主要用于在互联网上的两台计算机之间实现SQL Server 2000数据库的数据同步。这个程序的重要性和价值在于它能确保...

Global site tag (gtag.js) - Google Analytics