Oracle 死锁测试

举报
snowofsummer 发表于 2022/07/01 15:53:36 2022/07/01
【摘要】 1,建立测试表create table l (id int);insert into l values(1);insert into l values(2);2,执行锁测试需要打开2个会话.会话1会话2select * from l where id=1 for update;  select * from l where id=2 for update;select * from l wh...

1,建立测试表

create table l (id int);
insert into l values(1);
insert into l values(2);

2,执行锁测试

需要打开2个会话.

会话1 会话2
select * from l where id=1 for update;  
  select * from l where id=2 for update;

select * from l where id=2 for update;

----等待会话2提交。

 
 

select * from l where id=1 for update;

----等待会话1提交。

SQL> select * from l where id=2 for update;
select * from l where id=2 for update
*
ERROR at line 1:
ORA-00060: deadlock detected while waiting for resource


//需要执行commit,rollback.会话2才能正常执行。  

3,PG锁测试

会话1 会话2
begin; begin;
select * from l where id=1 for update;  
  select * from l where id=2 for update;

select * from l where id=2 for update;

#会话等待2

 
 

select * from l where id=1 for update; 

#会话2报错,会话rollback;

postgres=*# select * from l where id=1 for update;
ERROR:  deadlock detected
DETAIL:  Process 26109 waits for ShareLock on transaction 585; blocked by process 26104.
Process 26104 waits for ShareLock on transaction 586; blocked by process 26109.
HINT:  See server log for query details.
CONTEXT:  while locking tuple (0,1) in relation "l"
postgres=!# select * from l where id=2 for update;
ERROR:  current transaction is aborted, commands ignored until end of transaction block

postgres=!# select * from l where id=2 for update;
ERROR:  current transaction is aborted, commands ignored until end of transaction block
postgres=!# commit;
ROLLBACK

 #会话1正常执行。可以正常commit

 
   
 
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。