環境介紹:
使用者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 也支援表級鎖...