Oracle 死锁测试

举报
snowofsummer 发表于 2022/07/01 15:53:36 2022/07/01
6.7k+ 0 0
【摘要】 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

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

    全部回复

    上滑加载中

    设置昵称

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

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

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