最近一段时间数据库上的一个Job频繁报错,刚开始我们没有抽时间进行彻底的调查。只是处理了下不规范的数据
就没有管了,但是后面我们发现过了几天它又报错了。
今天我进行了彻底的调查,发现是由于2个表的列的长度不一致引起的。由于产品和产品品类表中都有产品品类代码这一列,由于前段时间系统因为需求变更更改了产品品类表中的品类代码这一列的长度,由原来的nvchar(10)改到了
nvarchar(50),更新后系统也进行了更新,所以产品品类表中存在了字符长度大于10的数据。
但是由于我们有一个Job每天晚上都会将产品表中品类ID和品类表中ID一致,但是品名或者代码不一致的数据进行
更新,以保证数据能够及时同步。所以很显然这次错误的原因也调查出来了。
由于我们更改基础数据表的字段类型时没有检查其他相关的表中是否有引用了同样的字段,所以导致了今天的错误。因为我们在设计数据库的时候,由于系统业务和性能方面的考虑,我们往往会考虑冗余的设计。比如产品表中加入
品类ID即可通过Join就可以关联出代码和名称,但是为了方便查询和操作及性能方面的考虑,那么就会考虑将代码和名称也放入产品中。因而我们在有时候修改基础表的结构时一定要确认下改变带来的影响,特别是刚才所说的这种情况。