我们在 Oracle 11.2g 中有死锁问题。发生死锁的一个潜在原因是从子表中删除锁定父表。我从oracle文档中搜索,并没有找到这种锁的任何规范。任何解释或参考文档将不胜感激。
这是代码。
CREATE TABLE table_parent (a NUMBER PRIMARY KEY);
CREATE TABLE table_child (b NUMBER, a NUMBER,PRIMARY KEY (b), CONSTRAINT fk_relation FOREIGN KEY (a) REFERENCES table_parent(a));
INSERT INTO table_parent VALUES (1);
INSERT INTO table_parent VALUES (2);
INSERT INTO table_child VALUES (1,1);
INSERT INTO table_child VALUES (2,1);
INSERT INTO table_child VALUES (3,1);
INSERT INTO table_child VALUES (4,1);
COMMIT;
然后从子表中删除 1 条记录。
DELETE FROM table_child WHERE b=4;
当我们在执行提交之前查看 V$LOCK 表时。'TM' 类型有两个新锁,'table_child' 和 'table_parent'。
这是查看 V$LOCK 表的查询。
SELECT O.OWNER, O.OBJECT_ID, O.OBJECT_NAME, O.OBJECT_TYPE, L.TYPE
FROM DBA_OBJECTS O, V$LOCK L
WHERE O.OBJECT_ID = L.ID1;
问题是为什么'table_parent'被锁定了?