交易SERIALIZABLE,奇怪的行为?

时间:2016-05-16 13:39:45

标签: sql database oracle serialization

我正在玩交易,但我有一种奇怪的行为,我无法解释。也许你可以帮助我?

考虑2个事务,T1和T2都在隔离级别SERIALIZABLE下运行。 T1开始执行插入而不提交。 当T1执行其插入操作时,T2开始。但是,T2插入10k行。但是在插入147之后,错误ORA-08177:无法对此事务进行序列化访问。

然而,这不应该发生,因为T1在这一行上没有锁(它不是重复的键或类似的东西)那么为什么会发生呢?

T1
INSERT INTO A 
VALUES(520089, 1, 'START', '198903111695', 'YEAR', 2017, '675013219393', 'I8', 'CREATED', '2016-08-09 18:26:49','2017-03-15 06:39:27');




T2
INSERT INTO A VALUES(520100,2, 'ACHIEVED', '196107246620', 'YEAR', 2018, '660564690379', 'I0', 'FULL', '2018-07-09 07:54:35', '2010-10-20 17:42:04');
INSERT A VALUES(520101,2, 'ACHIEVED', '196107246620', 'YEAR', 2018, '660564690379', 'I0', 'FULL', '2018-07-09 07:54:35', '2010-10-20 17:42:04');
.....for loop
INSERT INTO A VALUES(520147, 2, 'STARTED', '196503264535', 'MONTH', 201105, '305355347867', 'I8', 'TESTED', '2012-11-14 00:31:58', '2015-08-16 09:36:41')
here it crash, and gives me the error.

我唯一拥有的主键是A中的第一个值,第二个值是外键。

那么,有人可以解释发生了什么吗?

1 个答案:

答案 0 :(得分:0)

由于您正在使用可序列化的事务,它将等待其他事务锁定同一个表。真的需要吗?只需尝试删除关卡。