最近一直在帮忙客户找程序方面的问题。当确定不是程序上的问题后,痛苦的过程就开始了:帮助客户修复计算错误的数据,也叫Data Fix。我们的ERP系统有1000多个表,有100个基础数据表,比如物料表,物料清单,工作单,销售单,采购单,这里包含表头(Header)和表明细(Detail),再加上100多个数据关联表,比如工作单与销售单的关联,工作单与物料进出,物料进出与仓库日记帐,仓库日记帐进而产生传票(voucher),成本(cost),这样加起来,又有100个多表。当发现程序有计算错误后,通常会修复程序,再帮助用户修复计算错误的数据。有时候程序修改好后,由于没有合并到客户的版本中,导致客户的数据计算错误,日记帐与总帐对不上,这时,只好一行一行的来修复数据了,修复错误的数据。
为了追踪到是哪一行的程序计算出了问题,通常是在测试系统中做一笔新的业务,让它产生一连串的数据,这肯定是对的,然后把它与客户的有问题的系统对比,看看是哪几个field出了问题,修复这几个field的关联问题。
一开始依靠自己对系统的熟悉程度来对做,虽然也能解决问题,但非常耗费时间,写大量的SQL语句。折腾过几次之后,想到这一类问题经常会碰到,于是搜索了一下,找到下面的几个工具,以帮助解决这类问题。
dbForge Data Compare
Data Compare 是比较两个数据库的数据是否相同。在有问题的客户系统中做一笔业务,同时在没有问题的系统中也做一笔同样的业务,再用这个工具比较一下,两者数据的不同之处,问题很快就可以定位到field,修复它即可。
SQL Data Compare
这一款工具由Red Gate公司出品,我们熟悉的.NET Reflector就是这个公司推出的,它的SQLToolbet也是非常有名,SQL Data Compare是SQLToolbet系列工具中的一种。Red Gate公司出品的这款Data Compare 工具稳定,好用。它还有一个很有用的feature是,可以比较备份集中的数据。也就是我们把客户数据备份之后,拷贝回来,可以直接在这里比较,而不用还原到SQL Server中。另外,如上图所示,它有一个Synchronization Wizard,可以根据两个正在比较的数据库的差别,产生同步的脚本,把这个脚本放到另一个数据库中运行一下,这两个数据库就是一模一样的了。这个特性,我常常用于分析Kingdee,Microsoft Dynamic AX的业务操作。举例说明,我要知道金蝶ERP的采购单过帐到底做了那些工具,除了打开SQL Server Profiler跟踪它的SQL之外,再打开这个工具,比较一下采购单过帐前与过帐后数据库中数据的差异,就可以知道它做了哪些数据操作,依据它的表名的含义(表的含义与用途是公开的),进而推论到它的程序实现。依照这个工具,更新和晚上ERP业务系统。
SQL Delta 4
这一款工具也好用,方便。也提供了Sync同步工具。此外,它还可以产生报表,以显示两个数据库的差异。如上图所示,在下方,它以Tab的方式显示了所有的差异,很直观。
Visual Studio Database Edition
微软的Visual Studio 2010也触及到了这个领域,它推出了两款工具Schema Compare和Data Compare。
在微软的上一个版本Visual Studio 2008中,它Database Edition提供了SQL脚本解析API,有了SQL语法的解析能力,我以此做成了代码生成工具。代码生成不仅仅依赖于数据库,我用反射技术解析程序集接口也可以做代码生成,用SQL语句解析生成ORM接口及其实现也做成了代码生成,这两个功能都和数据库没有关系。
在这里,也提供了同步工具。工具栏中的Write Updates,生成同步脚本。微软是这类工具的后来者,肯定会吸收市场上现有工具的优点,该有的功能,它都提供了。而且就集成在我们每天要用的Visual Studio中,既然是Visual Studio的一部分,微软的目标应该是我们程序员了,而不是ERP管理员,数据库管理员。如果怕麻烦,ERP程序管理员,应该不会考虑用微软的这款数据比较同布工具。