2016-05-16 4 views
0

私は取引で遊んだが、私は説明できない奇妙な振る舞いを得ました。多分あなたは私を助けることができますか?トランザクションSERIALIZABLE、奇妙な動作?

両方SERIALIZABLE分離レベルで実行されている2つのトランザクション、T1とT2を考えます。 T1はコミットせずに挿入の実行を開始します。 T2は、T1は、その挿入操作を実行したときに開始します。ただし、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の最初の値で、2番目の値は外部キーです。

だから、誰かが何が起こっているか説明できますか?

+0

このトピックを見てくださいhttps://asktom.oracle.com/pls/asktom/f?p=100:11:0:::P11_QUESTION_ID:7636765105002 – Serg

答えて

0

あなたは同じテーブルをロックする他のトランザクションを待ちますシリアライザブルトランザクションを使用しているので。それは本当に必要ですか?レベルを削除してみてください。

+0

シリアライズ可能なテーブル全体をロックしません。あなたは間違っている。 – jblad