作为刚接触Kettle的菜鸟级选手,在使用Kettle抽取数据的时候碰到如下异常:
org.pentaho.di.core.exception.KettleDatabaseException:
Couldn't get row from result set
事务(进程 ID 56)与另一个进程被死锁在 锁 资源上,并且已被选作死锁牺牲品。请重新运行该事务。

查了一下,这个异常的原因是不同组件同时操作一个表造成的,但是想了想好像我的流程里面没有同时更新或者插入同一张表。。。。等等,插入更新组件上面的2是什么意思,又查了一下,原来所谓的复制2份等于是开了2个线程在同步数据,那就的确是因为同时操作同一个表造成的了。
解决方法:
第一种:将插入更新复制份数设置为1份;
第二种:将插入更新中的 提交记录数量 设置为1,可以解决问题,但是这样的话等于没有批量提交,肯定会很慢;
补充:我用的是sqlserver,同事用的oracle设置为2份没遇到这个问题
本文探讨了在使用Kettle进行数据抽取时遇到的死锁异常,详细分析了异常原因,即不同组件同时操作同一表导致的问题。通过调整插入更新组件的设置,如减少复制份数或更改提交记录数量,有效解决了死锁问题。
1003

被折叠的 条评论
为什么被折叠?



