oracle死鎖模擬

2022-08-03 08:18:09 字數 1557 閱讀 9572

環境介紹:

使用者test01 建立表tab01,使用者test02建立表tab02。test01 更新tab01不提交,test02 更新表tab02不提交。然後test01 更新test02下的表tab02,此時有鎖阻塞、鎖等待情況發生。接著test02 更新test01下的tab01,那麼此時就會有 test01、test02 都在等待對方的資源,但是資源無法釋放,滿足死鎖條件死鎖產生!

實施步驟

sql> create user test01 identified by test01;

user created.

sql> create user test02 identified by test02;

user created.

sql> grant create session to test01, test02

grant succeeded.

sql> grant resource to test01,test02;

grant succeeded.

sql> grant all on test02.tab02 to test01;

grant succeeded.

sql> grant all on test01.tab01 to test02;

grant succeeded.

sql> conn test01/test01

connected.

sql> create table tab01 (id number);

table created.

sql> insert into tab01 values(01);

1 row created.

sql> commit;

commit complete.

sql> select * from tab01;

idsql> conn test02/test02

connected.

sql> create table tab02 (id number);

table created.

sql> insert into tab02 values(02);

1 row created.

sql> select * from tab02;

id會話1

sql> update tab01 set id=id*1;

1 row updated.

會話2sql> conn test02/test02

connected.

sql> update tab02 set id=id*1 ;

1 row updated.

會話2sql> update test01.tab01 set id=id*1;

此時該事務被hang住

會話1sql> update test02.tab02 set id=id*1;

update test02.tab02 set id=id*1

error at line 1:

ora-00060: deadlock detected while waiting for resource

oracle死鎖模擬

用plsql developer新建乙個command window視窗,執行 update a g set g.status 9 where seq id in 3407144 休眠8秒 exec dbms lock.sleep 8 update a g set g.status 9 where ...

模擬 SQLSERVER 死鎖

環境 sqlserver 2008 事務 程序 id n 與另乙個程序被死鎖在鎖資源上,並且已被選作死鎖犧牲品。請重新執行 死鎖原理 如兩個任務 任務1,已經鎖定r1,再進行請求r2任務2,已經鎖定r2,再進行請求r1導致兩個任務都進入了阻塞。sqlserver會選擇乙個進行犧牲。了解了原理後,來段...

mysql 死鎖模擬 mysql死鎖示例

mysql有三種鎖的級別 頁級 表級 行級。myisam和memory儲存引擎採用的是表級鎖 table level locking bdb儲存引擎採用的是頁面鎖 page level locking 但也支援表級鎖 innodb儲存引擎既支援行級鎖 row level locking 也支援表級鎖...