

我们对同一个批处理的Cobol 程序运行了5个并发作业,向同一个DB2表中插入数据行。表的主键是当前时间标记(Current Time Stamp)。但是这些作业都出现异常了,错误代码是?803(SQL错误代码803)。我们对为什么发生这种情况一无所知。如果您能给我们提出些建议,我们会非常感激。
此问题提交于2004年12月3日
哦,也许您不会想要这个答案,但是实际情况确实如此。一个(或者更多个)批处理作业都是和其他的任何一个批处理作业使用同一个确切的时间标记值。而此时,你正在试图插入一个重复的键,独特(unique)的索引会阻止这种情况的发生。
如果-803并不是经常出现,你可以考虑一下重新对你的程序进行编码,以便于在出现-803的时候再次执行INSERT语句。这样会使得DB2生成一个新的时间标记,这样就不会与先前的时间标记值产生冲突。然而,它仍然有可能与其他的作业产生冲突。当你更改你的代码的时候,确保还要包含一个计数器,用于在5个或者10个失败的尝试之后再次进行重试和异常终止。
当然,你也可以通过不在同一时间运行这么多个作业来避免-803的问题。那样的话 ,你可以考虑一下缩减并发作业的数量(例如少于5个),或者重新设计你的数据库中的表,令其使用不同的主键。