缘起:

若干年前,刚到一家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数据同步系统的更多相关文章

  1. 第二篇 Integration Services:SSIS数据泵

    本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...

  2. 【译】第二篇 Integration Services:SSIS数据泵

    本篇文章是Integration Services系列的第二篇,详细内容请参考原文. 简介SSIS用于移动数据.数据流任务提供此功能.因为这个原因,当介绍SSIS时我喜欢从数据流任务开始.数据流任务的 ...

  3. SSIS数据同步实践

    SSIS数据同步实践   背景 在已初步验证不同实例下同构表数据同步方案之后,为了实现数据持续同步,需使用SSIS把之前的生成脚本和执行脚本的两个步骤组合在一起部署成包之后,通过JOB定时去执行: 测 ...

  4. DataX Web可视化分布式调度数据同步系统

    因项目需要,结合目前参与的项目,以及个人技术能力范围,组合研发一套web可视化数据同步系统,正式名称:DataXP. 项目背景:接触过阿里云这类大数据平台,对于中大型项目以及需要与外部系统对接数据的情 ...

  5. SSIS 数据输出列因为字符截断而失败

    在数据源组件中,如果存在字符串类型的数据列,那么可能会存在,因为字符类型的长度不匹配,导致字符数据被截断的问题. SSIS报错信息:“Text was truncated or one or more ...

  6. SSIS 数据类型和类型转换

    在进行ETL开发时,数据类型(Data Type)是最基础的,但也容易被忽略,楼主使用的SQL Server 版本是2012,用此博文记录,常用的SSIS数据类型和TSQL数据类型的映射.SSIS的数 ...

  7. 增量数据同步中间件DataLink分享(已开源)

    项目介绍 名称: DataLink['deitə liŋk]译意: 数据链路,数据(自动)传输器语言: 纯java开发(JDK1.8+)定位: 满足各种异构数据源之间的实时增量同步,一个分布式.可扩展 ...

  8. Go 大数据生态迎来重要产品 CDS

    项目地址:https://github.com/tal-tech/cds ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS).它有着优异的性能,可以快速部署和运行. 不 ...

  9. 【Android】一种提高Android应用进程存活率新方法

    [Android]一种提高Android应用进程存活率新方法 SkySeraph Jun. 19st 2016 Email:skyseraph00@163.com 更多精彩请直接访问SkySeraph ...

  10. SQL Server翻译目录

    从SQLServerCentral翻译部分Stairways文章,设置目录方便阅读(2015-12更新)SQL Server代理系列第一篇 SQL Server代理概述第二篇 SQL Server代理 ...

随机推荐

  1. 2023第十四届极客大挑战 — CRYPTO(WP全)

    浅谈: 本次大挑战我们队伍也是取得了第一名的成绩,首先要感谢同伴的陪伴和帮助.在共同的努力下终不负期望! 但遗憾的是我们没有在某个方向全通关的,呜呜呜~ 继续努力吧!要学的还很多.明年有机会再战!!加 ...

  2. 处理命令行main函数args参数

    引用 System.CommandLine 库(需要显示预览版才能看到) var fileOption = new Option<FileInfo?>( name: "--fil ...

  3. MyBatis04——使用注解开发

    使用注解开发 MyBatis3提供了新的基于注解的配置,但是MyBatis映射并不能用注解来构建. sql类型主要分成: @select @update @insert @delete 注意:利用注解 ...

  4. 微信小程序——如何获取url中的数据

    如何获取url中的数据 这里举个例子! 当我们需要编辑一个可以点击的图片超链接 这时候结构是这个样子的 首先最外层有一个视图层view 在view中添加超链接标签<navigator> & ...

  5. 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.12.2)

    一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...

  6. Oracle数据库统计信息_执行计划_sharedpool等的知识梳理

    Oracle数据库统计信息_执行计划_sharedpool等的知识梳理 背景 最近有项目出现了年底业务量增加时卡顿的情况. 同事多次发现执行SQL缓慢. 但是重新执行统计信息更新后问题就优化的现象. ...

  7. [转帖] 容器内的Linux诊断工具0x.tools

    https://www.cnblogs.com/codelogs/p/16242999.html 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# Linux上有 ...

  8. [转帖]Linux 监测服务心跳、服务重启策略

    文章目录 前言 背景 一.curl服务可用验证 二.服务探测脚本 三.配置系统定时任务 四.Linux特殊字符转义 总结 前言 请各大网友尊重本人原创知识分享,谨记本人博客:南国以南i. 提示:以下是 ...

  9. Nacos集群启动注意事项

    简介 Nacos是阿里巴巴开源的一套服务注册发现的应用 使用简单灵活, 是spring Cloud Alibaba的组成部分 现在拆分微服务的部署情况下,极大的需求nacos服务作为支撑 单点情况下存 ...

  10. 原生js拖拽元素(onmouseup不能够触发的原因)

    我们经常会遇见拖拽某一个元素的场景,拖拽也是很常用的: 这次拖拽遇见一个问题,有时在拖拽的时候吗,鼠标松开,元素仍然可以拖拽: 经过查阅资料,发现: 会触发H5原生的拖拽事件.并且不会监听到onmou ...