这里写目录标题
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.1 | 2016.12.6 | Preview版 |
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表示采纳目标数据库的值,我们选择第一行采纳源数据库的值,执行成功后页面自动刷新。