SSIS数据同步系统
缘起:
若干年前,刚到一家3C类的电商公司做DBA,到公司没几天,公司的CEO和研发总监,说现在要做个事情:
把IDC的数据库的数据,要同步一份到仓库,因单量大,仓库经常爆仓,仓库网络不好时,可以直接用同步的数据
记得当时CEO还特意,弄个讲座讲了公司如何处理单量爆仓
第一次做DBA,第一个月只是有这个说法,没想到研发总监又说了几次,但是线上就一台数据库实例,领导连线上数据库权限都没开给我,只是定时就把线上的慢SQL发给我来优化,因事情比较少,自己就查线上有没有同步数据的工具和方法。
自己尝试看看能否做一个数据同步工具。
方法:
在查询资料过程中,发现一篇携程的BI部门的技术文档,介绍携程有用增加时间(row_createtime),修改时间(row_lastupdatetime),写入加默认时间,修改更新最后一次时间,实现增量抽取数据,自己也加了这个携程技术同事QQ,问了一些关于增量抽取的问题,发现他们用的是SSIS来做增量抽取的。
最后得到信息: 增加2个时间字段,使用SSIS做同步数据
过程:
因为当时对SSIS不熟,花费了一些时间适应,特别是在SSIS写C#脚本,特别麻烦,自己边查资料边用,自己用visio还画图,要实现功能:
1,同步的两边数据库IP,账号,密码等配置到数据表里(方便后面调整)
2,出错重抽
3,实现增量抽取
4,抽取日志记录,下次执行工具上次结果来执行
5,多个SSIS包,共用一个配置数据库和表
对接:
自己经过一个月的研究摸索,终于实现了以上的功能,但是如何在表里加这2个字段,几百张表,默认都没加。研发总监召集大家开会,决定批量增加这2个字段, 默认创建,修改时间都加getdate()时间,研发人员在程序里,有update的批量加上row_lastupdatetime=getdate(),我批量在数据库里加上这2个字段。
删除数据问题:
处理完增加和修改时间问题,发现同步的表,有删除数据的情况,如何处理,源表已删除,同步系统,无法把目的库的删除数据删除,后面又让研发新加表时,加上is_deleted字段,但已有表,如果加这个字段区分,程序逻辑,查询逻辑会大改,对业务影响太大,肯定不行。研发总监又召集大家开会,我在会上说,每个同步的表,对应建一个删除表,删除的主键id和时间记录到对应的删除表里(每个表对应一个删除表)。
我同步时候,通过这个对应的删除表里的创建时间,把这个删除id同步到目标库,通过id删除掉仓库表里的数据。
这个建议结果通过了,结论是领导说分给我一个同事,让我来主导这个事情, 提的建议变成自己的活。
但经过研发努力,涉及的同步表也不多,删除记录表也处理好了,最终这个从IDC同步到仓库的同步系统上线了。因同步到仓库的表不是很多,一开始就10多个表。每个表一个SSIS包,包部署到仓库服务器上。
运行故障:
同步包运行了一段出现以下故障:
1,同步包同步资源报错故障
记得出故障,晚上回家的路上,回家后立即处理,当时的确没找到原因,没办法先解决问题,把同步包从仓库部署的,改成部署到线上库。结果不报错了,后来花了一周时间找到原因:
原来线上数据库限制运行最长时间,后来和领导沟通去掉后,再把包部署到仓库,实现拉模式抽取数据
2,事务太长,有些数据没同步过来
研发发现,有些数据漏抽,研究发现,有些事务运行时间比较长,没办法,把同步时间,从上次结束时间,开始往前提前30秒以上,多抽取一些,避免漏抽。
3,程序checksum检查
因同步到仓库作业,有订单主表,和明细表等,研发有时发现有偶尔数据不对,最后没办法,在订单明细表,把商品数量,金额等checksum后,和线上的数据做对比,对比正确用线下的数据,不对的用线上数据,减少因同步数据导致订单出库异常
4,2台服务器时间不一致
因服务器的时间同步有时报错,导致时间有时不对,程序取服务器当前时间就有问题,这时getdate()时间都从源服务器时间为准,不用目的服务器时间。
额外带来效益:
1, 该同步系统用起来,开出15个本地仓库在使用。
2,在开城市分站(北京,深圳等),用该同步系统从主库同步数据到新分站库(写了很多表同步包)
因开分站,为方便快速开出来,直接拷贝上海站的数据库弄个空库,再部署程序方式
3,当时某大厂电商收购公司搞融合,某大厂的研发用php程序从主库同步数据到前端MySQL库,一开始他们坚持用同步字段:同步一次加1减1方式,在我的大力建议下,他们也改成通过行修改时间来同步。
总结:
现在看来这个同步系统,很简陋,第一次做,没想到会有这么多问题需要解决,是对自己考验,但这个同步系统的确解决了公司快速开分仓,开分站的问题。
很有用的系统,觉得是一个比较有意义的创新。至今我还回忆深刻,也在我工作中给很大的激励和鼓舞,遇到难题想办法,也必定有解决办法。
SSIS数据同步系统的更多相关文章
- 第二篇 Integration Services:SSIS数据泵
本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...
- 【译】第二篇 Integration Services:SSIS数据泵
本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...
- SSIS数据同步实践
SSIS数据同步实践 背景 在已初步验证不同实例下同构表数据同步方案之后,为了实现数据持续同步,需使用SSIS把之前的生成脚本和执行脚本的两个步骤组合在一起部署成包之后,通过JOB定时去执行: 测 ...
- DataX Web可视化分布式调度数据同步系统
因项目需要,结合目前参与的项目,以及个人技术能力范围,组合研发一套web可视化数据同步系统,正式名称:DataXP. 项目背景:接触过阿里云这类大数据平台,对于中大型项目以及需要与外部系统对接数据的情 ...
- SSIS 数据输出列因为字符截断而失败
在数据源组件中,如果存在字符串类型的数据列,那么可能会存在,因为字符类型的长度不匹配,导致字符数据被截断的问题. SSIS报错信息:“Text was truncated or one or more ...
- SSIS 数据类型和类型转换
在进行ETL开发时,数据类型(Data Type)是最基础的,但也容易被忽略,楼主使用的SQL Server 版本是2012,用此博文记录,常用的SSIS数据类型和TSQL数据类型的映射.SSIS的数 ...
- 增量数据同步中间件DataLink分享(已开源)
项目介绍 名称: DataLink['deitə liŋk]译意: 数据链路,数据(自动)传输器语言: 纯java开发(JDK1.8+)定位: 满足各种异构数据源之间的实时增量同步,一个分布式.可扩展 ...
- Go 大数据生态迎来重要产品 CDS
项目地址:https://github.com/tal-tech/cds ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS).它有着优异的性能,可以快速部署和运行. 不 ...
- 【Android】一种提高Android应用进程存活率新方法
[Android]一种提高Android应用进程存活率新方法 SkySeraph Jun. 19st 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph ...
- SQL Server翻译目录
从SQLServerCentral翻译部分Stairways文章,设置目录方便阅读(2015-12更新)SQL Server代理系列第一篇 SQL Server代理概述第二篇 SQL Server代理 ...
随机推荐
- JAVA - 文件切分存储 - FileInputStream 流形式
package stream; import java.io.*; /** * @author*/ public class TestStream { public static void main( ...
- SV 并发线程
内容 assign d = a & b; assign e = b | c; begin...end之间的语句是串行执行的 fork....join语句是并行执行的 逻辑仿真工具中的并发性 仿 ...
- [转帖]JVM中年轻代里的对象什么情况下进入老年代?以及老年代垃圾回收算法-标记整理算法
1.躲过15次GC之后进入老年代 系统刚启动时,创建的各种各样的对象,都是分配在年轻代里. 随着慢慢系统跑着跑着,年轻代满了,就会出发Minor GC ,可能1%的少量存活对像转移到空着的Surviv ...
- [转帖]OJDBC版本区别 [ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别]
classes12.jar,ojdbc14.jar,ojdbc5.jar和ojdbc6.jar的区别,之间的差异 在使用Oracle JDBC驱动时,有些问题你是不是通过替换不同版本的Oracle ...
- [转帖]k8s对接ceph,ceph-csi方式
1.上传ceph-csi-yaml和ceph-csi-image 两个文件夹到服务器 2.加载 ceph-csi-image里面的镜像 3.将加载好的镜像上传到本地harbor上. 4.修改ceph- ...
- [转帖]Prometheus监控系统存储容量优化攻略,让你的数据安心保存!
云原生监控领域不可撼动,Prometheus 是不是就没缺点?显然不是. 一个软件如果什么问题都想解决,就会导致什么问题都解决不好.所以Prometheus 也存在不足,广受诟病的问题就是 单机存储不 ...
- 【转帖】高性能异步io机制:io_uring
文章目录 1.性能测试 1.1.FIO 1.2.rust_echo_benc 2.io_uring 2.1.io_uring_setup 2.2.io_uring_enter 2.3.io_uring ...
- [转帖]技术派-汇编语言指令集(intel X86系列)
针对汇编语言指令集(intel X86系列8086/80186/80286/80386/80486) AAA - Ascii Adjust for Addition AAD - Asci ...
- MySQL in Windows安装以及异名恢复的简单过程
下载相关 建议获取最新版本的Mysql数据库 可以获取 zip 格式的安装文件 https://dev.mysql.com/downloads/mysql/ 或者获取 msi 格式的安装文件 http ...
- Linux挂载新磁盘到根目录
1.添加磁盘到需要挂载的机器上2.lsblk查看硬盘挂载情况,sdb,sdc为我新挂载的磁盘 3.fdisk -l查看挂载之前的分区情况, 4.为新硬盘创建分区 fdisk /dev/sdb,终端会提 ...