【www.shanpow.com--上海】
数据同步解决方案篇一:多系统之间大数据量增量同步解决方案
一、背景介绍
上海立邦TU报销系统,是上海立邦集团针对内部的报销的业务,编写的一套系统,此系统主要特点是和Web、SAP和Notes等系统实现无缝对接,从而完成整体业务的流转,目前立邦已经存在SAP报销系统、Notes系统,情况如下:
n SAP报销系统:实现上海立邦主要业务的实现,例如:供应商、客户、员工、人员等信息的维护及控制
n Notes:主要通过邮件实现对业务流转中的具体单据进行审核以及日常的业务管理
n TU报销系统:主要通过同步SAP报销系统中的供应商、客户、员工、项目等主数据信息,编写报销单,递交到Notes系统进行数据流转,并且递交数据到SAP,从而完成整个业务处理
二、需求说明
在SAP报销系统中的主数据据达到百万级的数据,需要要将其中的供应商、客户、员工、项目等信息同步到本地数据库中:
1) SAP每天每种类型的主数据大约会增加2000条以上的数据量
2) 要求每天同步数据一次,在紧急状态下,可以实现手动同步
3) 5年只能不能因为数据量太大,导致同步业务失败,引起代码重构
三、概要设计
由于数据量太大,决定采用增量同步的方式进行数据同步;为了满足用户需求,同时设计手动同步的模块,实现手动及时同步。
四、详细设计
1. SAP的数据获取
采用PI方式获取SAP数据,通过WebService方式发布数据,由于是采用增量同步,因此有2个必备参数为:开始时间、中止时间,数据获取逻辑如下
n 在返回数据列表中存在DataStatesMark字段
n 新增的数据在DataStatesMark中为“I”
n 编辑的数据在DataStatesMark中为“U”
n 删除的数据在DataStatesMark中为“D”
2. 数据定时同步的设计
采用WindowsService的方式进行处理,增加定时器,通过设置启动时间,判断当前时间和启动时间的小时一致的话,直接运行程序;程序调用逻辑:
n Window Service调用Web Service获取SAP中的增量数据
n Windows Service调用本地同步方法,以获取到的增量数据为参数,同步增量数据到数据库中。
3. 同步增量数据逻辑的设计
n 在数据库中设置同步数据的临时表,增加DataStatusMark字段,将通过WebService中获取到的数据全部插入到临时表中
n 编写同步的存储过程,实现临时表到正式表的同步。
4. WindowsService数据同步步骤
1) 调用WebService获取增量的SAP端数据
2) 调用方法,将获取到的增量的SAP端数据插入到临时表中
3) 调用存储过程,实现将临时表中的数据,同步到正式表中。
五、同步存储过程技术说明
1. 传入参数 outmsg输出参数、Error 错误输出参数
2. 循环临时表中的数据判断DataStatusMark字段
3. 如果DataStatusMark为“D”直接实现将Enable字段修改为“D”,代表已经将数据删除
4. 如果DataStatusMark为“I”或者为“U”,根据业务主键字段,在正式表中判断数据是否存在,存在的话,直接插入,否则更新。
5. 增加错误判断机制,如果出错,直接抛出异常给Error参数
6. 执行的每一步,必须实现数据数据,通过OutMsg参数接收。
需要同步存储过程示例代码的朋友们,可以到我的资源中去下载相关代码。
张晓斌
2013年6月29日14:20:31 于 上海龙阳路
数据同步解决方案篇二:两台SQL Server数据同步解决方案
两台SQL Server数据同步解决方案
复制的概念 复制是将一组数据从一个数据源拷贝到多个数据源的技术,是将一份数据发布到多个存储站点上的有效方式。 SQL复制的基本元素包括 出版服务器、订阅服务器、分发服务器、出版物、文章 SQL复制的工作原理 SQL SERVER 主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器 SQL SERVER复制技术类型 SQL SERVER提供了三种复制技术,分别是: 1、快照复制(呆会我们就使用这个) 2、事务复制 3、合并复制 只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。 第一先来配置出版服务器 (1)选中指定[服务器]节点 (2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令 (3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。 (4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution) 第二创建出版物 (1)选中指定的服务器 (2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框 (3)选择要创建出版物的数据库,然后单击[创建发布] (4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助) (5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如 ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行"SQL SERVER 2000"的数据库服务器 (6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表 (7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。 第三设计订阅 (1)选中指定的订阅服务器 (2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅] (3)按照单击[下一步]操作直到系统会提示检查SQL SERVER代理服务的运行状态,执行复制操作的前提条件是SQL SERVER代理服务必须已经启动。 (4)单击[完成]。完成订阅操作。 完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:\Program Files\Microsoft SQL Server\MSSQL\REPLDATA\unc\XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表— 一个手工同步的方案 --定时同步服务器上的数据 --例子: --测试环境,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
数据同步解决方案篇三:数据库同步热备解决方案(某区政府)
本文从政府OA数据库应用中的热备需求进行分析,提供了满足冷备+热备的混合备份方式,并详细阐明两种方式在备份系统中的作用和应该满足的技术指标