資料庫系統之Deadlock專案練習

2021-10-14 12:14:32 字數 2617 閱讀 9234

關於deadlock死鎖的介紹可以看我的這篇文章:

使用pl/sql在sample資料庫上進行事務操作,讓它們併發處理導致死鎖情況發生。

要模擬資料庫事務的併發處理,請使用標準pl/sql包dbms_lock中的pl/sql procedure sleep。

使用sql*plus的命令來展示執行結果

set echo on

set feedback on

set linesize 100

set pagesize 100

set serveroutput on

t1的操作如下

--t1

set echo on

set feedback on

set linesize 100

set pagesize 100

set serveroutput on

create

orreplace

procedure delay_1

issysts varchar(60

);begin

select to_char(systimestamp)

into systs

from dual;

dbms_output.put_line(systs)

;update project set budget =

66666

where p# = 1001;

dbms_lock.sleep(10)

;/* 睡10秒鐘*/

update employee set salary =

88888

where e# = '00100';

select to_char(systimestamp)

into systs

from dual;

dbms_output.put_line(systs)

;end delay_1;

/execute delay_1;

/

t2的操作如下:

--t2

set echo on

set feedback on

set linesize 100

set pagesize 100

set serveroutput on

create

orreplace

procedure delay_2

issysts varchar(60

);begin

select to_char(systimestamp)

into systs

from dual;

dbms_output.put_line(systs)

;update employee set salary =

23333

where e# = '00100';

dbms_lock.sleep(10)

;/* 睡10秒鐘*/

update project set budget =

55555

where p# = 1001;

select to_char(systimestamp)

into systs

from dual;

dbms_output.put_line(systs)

;end delay_2;

/execute delay_2;

/

執行結果如下:

error starting at line : 27

in command -

begin delay_1;

end;

error report -

ora-

00060: deadlock detected while waiting for resource

ora-

06512: at "jfm.delay_1"

, line 11

ora-

06512: at line 1

00060.

00000

-"deadlock detected while waiting for resource"

*cause: transactions deadlocked one another while waiting for resources.

*action: look at the trace file

to see the transactions

and resources

involved. retry if necessary.

死鎖成功觸發。

可以看到在t1中,我們先鎖住project這個表中的budget並進行操作,之後我們讓t1程式休眠10s,在此期間,我們在t2中進行操作。在t2中我們鎖住employee 表中的salary並進行操作。之後讓t2程式也休眠10s,此時t1程式休眠結束要進行下一步操作,t1也想要對employee 表中的salary進行操作,然而此時salary正在被t2鎖住了。t2休眠結束後想要也想對project表中的budget進行操作,然而budget也被t1鎖住了。

因此成功引起死鎖報錯。

資料庫系統mysql MySQL資料庫系統

1 mysql的特點 1 多執行緒 多使用者 2 基於c s 客戶端 伺服器 架構 3 簡單易用 查詢速度快 4 安全可靠 2 mysql編譯安裝 代表鍵盤上tab鍵 1 準備工作 解除安裝使用rpm方式安裝的mysql rpm e mysql nodeps 安裝cmake包 cd media ta...

資料庫系統 資料庫 資料庫管理系統 資料庫系統

繼續寫資料庫系統的文章,第二篇 資料庫 資料庫管理系統 資料庫系統。本文主要談談這三者之間的關係。下方,摘自老師的ppt,非原創。資料庫管理系統 從系統角度看資料庫管理系統 資料庫系統 資料庫指的是長期儲存在計算機內有組織的,大量的,相關聯的,可共享的資料集合。資料應當是有組織的,不應該是雜亂無章的...

資料庫系統之MongoDB Validations

json bson資料模型的半結構化和無模式屬性允許對資料庫結構進行非常靈活的操作。與此同時,資料庫結構的靈活和不受控制的操作也很容易造成資料庫結構和資料庫內容的破壞,例如,由於隨機錯誤。mongodb提供了在更新和插入 不是刪除 期間驗證文件 validate documents 的能力。驗證規則...