数据库同步工具

19 篇文章 1 订阅
4 篇文章 1 订阅

1 概述

1.1 项目背景

Sql Server数据库采用复制方式实现异地同步的时候会出现一个问题:同步报告成功,但是数据却不一致。按照宋老师的解决办法进行了尝试,又出现了一个新的问题,VS2015用Compare项目执行同步有时候会把表的主键删除(不是每次都删除,无规律),几经努力也没有找到原因,最后决定自己造轮子,于是DMO就诞生了(早期版本命名为SSDS,也就是Sql Server DataBase Synchronization 的缩写,SSDS是DMO的原型,DMO在此基础上进行了大量的功能扩充和优化)。

宋老师关于MSSQL数据库复制技术的文章请看
http://www.cnblogs.com/CareySon/archive/2012/06/20/IntroductToSQLServerReplicationPart1.html
宋老师关于MSSQL数据库复制数据不一致问题的文章请看
http://www.cnblogs.com/CareySon/p/3302369.html

1.2 软件介绍

现在软件正式命名为DMO,实际就是Data Migration and Ops for MSSQL的缩写,目前只能给MSSQL使用,正在评估是否开发Mysql版本。

DMO是一个数据库管理工具,帮助DBA对数据库进行维护管理,包括:数据迁移、数据一致性检查、表和视图结构一致性检查等功能,DMO既是我为了解决数据库同步问题而开发的工具,也是我的开源项目DBHub组件的应用示例。

我的开源项目DBHub
https://gitee.com/clementine/dbhub.git
DBHub是一个sqlserver数据库增删改查批处理工具。DBHub的作用是为了方便地将数据集(以下简称dt)批量写入数据表,使用者只需要把数据集按照要求组装起来,作为参数传递给DBHub的方法,剩下的事情由DBHub全部搞定。

1.3 适用范围

DMO适用于Sql Server数据库,目标数据库和源数据库在一个局域网内(或者能通过VPN方式访问)。

需要Framework4.5.2以上版本.

1.4 名词解释

名词解释
源数据库逻辑上离用户更近或者更靠近中心的数据库,作为参照系
目标数据库逻辑上离用户更远或者更远离中心的数据库,作为目标
键比对只比对所有记录的主键,数据不一致的评判标准是主键不一致
值比对比对所有记录的值,数据不一致的评判标准是任意一个字段的值不一致
推送(Push)将不一致的数据从源数据库写入目标数据库
拉取(Pull)将不一致的数据从目标数据库写入源数据库

1.5 版本发布

软件版本号发布日期备注
1.7.12016.12.6Preview版

1.6 传送门

DBHub的应用案例展示(数据库管理小工具DMO)
DBHub的前世今生
一个帮助MSSQL数据库实现数据批量插入、修改和删除的组件DBHub

2 界面

2.1 数据管理标签页

在这里插入图片描述

操作说明
键对比按主键比对,列出源数据库和目标数据库的差异数据
值对比按值比对,列出源数据库和目标数据库的差异数据和值有冲突的数据
推送推送,将差异数据从源数据库推送到目标数据库
拉取拉取,将差异数据从目标数据库拉取回源数据库
单表下行对于一张表将数据从目标数据库下载到源数据库
批量下行对于多张表将数据从目标数据库下载到源数据库

2.2 表管理标签页

在这里插入图片描述

操作说明
选择表范围选择参与同步操作的表
视图校验选择参与校验的视图
表空间查询表空间信息
表存储查询表存储位置和占用大小

2.3 设置标签页

在这里插入图片描述

操作说明
连接设置设置连接字符串
连接测试测试连接状态

3 操作示例

3.1 设置连接字符串

点击连接设置按钮,弹出设置连接字符串窗口,设置源数据库和目标数据库的连接字符串参数。

在这里插入图片描述

3.2 设置参与比对的表范围

点击Table Select按钮,弹出FormTableSelect窗口,点击校验按钮,对源数据库表和目标数据库表执行校验,STATUS是校验结果,只有校验结果为OK的表才能参与比对。
在这里插入图片描述

达到OK的标准是源和目标表都存在、都有主键、且主键相同,STATUS一共有5种状态。

状态代码状态描述
OK校验通过
OS表仅在源数据库中存在
OT表仅在目标数据库中存在
NKS源数据库中的表没有主键
NKT目标数据库中的表没有主键
DIFF表字段不一致

勾选表,点击Save按钮保存,回到主页面。

3.3 数据一致性检查

3.3.1 键比对

这里写图片描述

这里写图片描述

这里写图片描述

字段说明
CONFLICT冲突的记录数
ONLY_IN_SOURCE仅在源数据库表中存在的记录数
ONLY_IN_TARGET仅在目标数据库表中存在的记录数

3.3.2 Push推送

从示例中我们可以看到有两行数据在源数据表中存在而在目标数据库表中不存在,如果我们要使得数据库保持一致,应该将源数据库中的两行推送到目标数据库中,此时使用Push按钮,推送完毕显示执行成功,ONLY_IN_SOURCE内的数量以及不一致的数据记录明细列表会自动刷新。

这里写图片描述

3.3.3 Pull拉取

如果有数据在源数据表中不存在而在目标数据库表中存在,那么我们就选择Pull操作,目标数据库中的不一致数据拉取回源数据库中,此时使用Pull按钮,拉取完毕显示执行成功,ONLY_IN_TARGET内的数量以及不一致的数据记录明细列表会自动刷新。

3.4 数据冲突检查

3.4.1 值比对

这里写图片描述

Value比对与Key比对唯一的区别就是增加对数据字段的值的比对,这样就可以发现数据冲突,点击CONFLICT单元格就可以看到冲突的数据,后缀(S)的字段表示源数据库字段,后缀(T)的字段表示目标数据库字段,发生冲突的字段都红色高亮显示,未冲突的字段都做灰色处理。

这里写图片描述

3.4.2 冲突处理

冲突处理机制就是给出判决,源数据库数据有效还是目标数据库数据有效,通过菜单下达指令,使源数据库表和目标数据库表的数据统一为判决后的结果。目前冲突只能进行一行行的判决,没有设置批量处理,因为这个工具从实践来看是用作MSSQL同步策略的补充,需要处理的数据多是遗漏的数据,所以数据量很小,对于批量判决没有刚性需求,后期考虑增加批量判决的功能。

这里写图片描述

选择Use Source表示采纳源数据库的值,选择Use Target表示采纳目标数据库的值,我们选择第一行采纳源数据库的值,执行成功后页面自动刷新。

这里写图片描述

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiangcns

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值