實(shí)驗(yàn)4事務(wù)處理與并發(fā)控制__第1頁(yè)
實(shí)驗(yàn)4事務(wù)處理與并發(fā)控制__第2頁(yè)
實(shí)驗(yàn)4事務(wù)處理與并發(fā)控制__第3頁(yè)
實(shí)驗(yàn)4事務(wù)處理與并發(fā)控制__第4頁(yè)
實(shí)驗(yàn)4事務(wù)處理與并發(fā)控制__第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、實(shí)驗(yàn)4 事務(wù)處理與并發(fā)控制【實(shí)驗(yàn)?zāi)康呐c要求】n 提交事務(wù)、回滾事務(wù)n 發(fā)出保存點(diǎn)n 事務(wù)鎖機(jī)制的理解【實(shí)驗(yàn)內(nèi)容與步驟】4.1. 事務(wù)處理初步無(wú)論何時(shí)發(fā)出命令,都不會(huì)對(duì)數(shù)據(jù)庫(kù)作直接更改。對(duì)于DML語(yǔ)句來(lái)講必須明確地發(fā)出提交語(yǔ)句來(lái)保存更改;對(duì)于DDL,系統(tǒng)會(huì)自動(dòng)提交。實(shí)驗(yàn)4-1:事務(wù)提交的實(shí)現(xiàn)。請(qǐng)按照下列給出的步驟完成實(shí)驗(yàn),理解事務(wù)處理過(guò)程。(1) 打開一個(gè)以上的 SQL plus 的實(shí)例,即啟動(dòng) SQL plus 多個(gè)會(huì)話,并連接到上次使用的相同用戶模式(即以相同用戶名和口令登錄)。如:開啟兩個(gè)同時(shí)處于活動(dòng)狀態(tài)的 SQL plus 會(huì)話,如圖 4-1 所示。會(huì)話 1會(huì)話 2圖 4-1開啟多個(gè)會(huì)話

2、(2) 如圖 4-1 中所示,在“dept”表中插入一條新記錄。圖 4-2插入與查詢數(shù)據(jù)(2) 在第一個(gè)會(huì)話窗口中發(fā)出一個(gè)選擇語(yǔ)句,檢驗(yàn)記錄的插入。請(qǐng)給出查詢結(jié)果:(4)另一個(gè)會(huì)話窗口對(duì)同一 dept 表發(fā)出同一查詢語(yǔ)句。請(qǐng)給出查詢結(jié)果:思考:比較兩個(gè)查詢語(yǔ)句運(yùn)行結(jié)果,思考為什么會(huì)有這樣的結(jié)果。(5)在第一個(gè)會(huì)話窗口提交修改。(6)完成提交后再在兩個(gè)窗口各自對(duì)dept執(zhí)行查詢操作,比較查詢結(jié)果,看是否相同?實(shí)驗(yàn)4-2:執(zhí)行下面的步驟理解提交的概念。(1)單擊第一個(gè) SQL 實(shí)例,如圖 所示,插入一項(xiàng)新記錄。(2)單擊第二個(gè)會(huì)話,在此插入同一項(xiàng)記錄。觀察并比較運(yùn)行結(jié)果,特別關(guān)注第二個(gè)會(huì)話的運(yùn)行結(jié)

3、果。(3)在第一個(gè)會(huì)話中提交數(shù)據(jù)(Commit),觀察第二個(gè)會(huì)話中的反應(yīng)狀態(tài)。請(qǐng)給出運(yùn)行結(jié)果:結(jié)論:由于記錄是插入到第一個(gè)會(huì)話中的,又試圖把相同的記錄插入第二個(gè)會(huì)話中,并且由于 deptno 是主鍵,因此第二個(gè)會(huì)話不允許用戶插入記錄;而且在第一個(gè)會(huì)話發(fā)出提交語(yǔ)句或回滾語(yǔ)句(以后討論)之前,掛起第二個(gè)會(huì)話。實(shí)驗(yàn)4-3:遵循下面給出的步驟,我們將理解如何保存記錄整個(gè)過(guò)程背后的邏輯。(1)單擊任務(wù)欄上 SQL 的第一個(gè)會(huì)話。將某雇員的薪水更新為4000。請(qǐng)給出運(yùn)行結(jié)果:(2)單擊任務(wù)欄上的第二個(gè) SQL 會(huì)話,試著更新相同記錄的值。請(qǐng)給出運(yùn)行結(jié)果:結(jié)論:第二個(gè)會(huì)話處于掛起狀態(tài),因?yàn)闊o(wú)論何時(shí)更新一個(gè)記

4、錄,在用戶提交或回滾它之前,該記錄是鎖定的。因此,如果不發(fā)出提交或回滾語(yǔ)句,第二個(gè)會(huì)話一直是鎖定的,直到解鎖。注意:DDL 語(yǔ)句是自動(dòng)提交的,所以沒有必要使用任何提交語(yǔ)句來(lái)保存 DDL 語(yǔ)句所作的更改。4.2. 撤消更改我們已用提交語(yǔ)句保存更改,下面看看如何使用回滾語(yǔ)句來(lái)達(dá)到我們的目的?;貪L語(yǔ)句用于撤消未提交的更改。實(shí)驗(yàn)4-4:執(zhí)行下面給出的步驟,用回滾語(yǔ)句進(jìn)行操作。(1)如圖中所示,在“dept”表中插入一條新記錄。(2)發(fā)出一個(gè)選擇語(yǔ)句查看如圖 4 中所示的新記錄,可以看到新記錄。請(qǐng)給出查詢結(jié)果:(3)發(fā)出一個(gè)如下圖所示的回滾語(yǔ)句。(4)給出一個(gè)選擇語(yǔ)句查看記錄。請(qǐng)給出運(yùn)行結(jié)果:思考:比較

5、兩次查詢語(yǔ)句執(zhí)行的結(jié)果,理解回滾操作。注意:提交更改之后,就不能執(zhí)行回滾語(yǔ)句。4.3. 插入保存點(diǎn)保存點(diǎn)只是在事務(wù)中插入的書簽。這些書簽用于標(biāo)注事務(wù),并配合回滾語(yǔ)句工作。由于回滾撤消整個(gè)任務(wù),與保存點(diǎn)一起使用的回滾可用來(lái)撤消事務(wù)的某個(gè)部分。實(shí)驗(yàn)4-5:通過(guò)下面的操作步驟了解如何使用保存點(diǎn):(1)刪除 deptno 70 和 80 的記錄,發(fā)出一個(gè)如下圖所示的保存點(diǎn)。(2)把 deptno為 40 的位置(Loc)更新為“SAN DIEGO”。(3)給出一個(gè)如下所示的命令來(lái)只撤消更新的記錄。(4)查詢dept表中數(shù)據(jù),給出查詢結(jié)果,注意觀查表中是否還有deptno=70 和 80的記得和dept

6、no=40的記錄是否被更新。請(qǐng)給出運(yùn)行結(jié)果:4.4. 事務(wù)處理的ACID屬性4.4.1事務(wù)原子性實(shí)驗(yàn)4-6:語(yǔ)句級(jí)原子性(1)完成以下語(yǔ)句的執(zhí)行(2)依次執(zhí)行以下語(yǔ)句:set serveroutput on;insert into tp values(1);insert into tp values(-1);觀查運(yùn)行結(jié)果:(3)查詢t2表中cnt字段的值請(qǐng)給出執(zhí)行結(jié)果:思考:為什么會(huì)有這樣的結(jié)果?4.4.2事務(wù)一致性實(shí)驗(yàn)4-7:按以過(guò)程完成程序,理解事務(wù)的一致性。(1)完成以下語(yǔ)句的執(zhí)行(2)依次執(zhí)行以下語(yǔ)句:請(qǐng)給出執(zhí)行結(jié)果:4.5. 事務(wù)的并發(fā)控制實(shí)驗(yàn)4-8:引發(fā)死鎖鎖定是用來(lái)控制共享資源并

7、發(fā)訪問的機(jī)制死鎖就是兩個(gè)會(huì)話都進(jìn)入了彼此等待對(duì)方的狀態(tài)。請(qǐng)按下列步聚完成實(shí)驗(yàn)操作,理解Oracel鎖機(jī)制。(1)在會(huì)話1中,執(zhí)行如下的操作:SQL> create table a 2 as 3 select 1 x from dual;表已創(chuàng)建。SQL> create table b 2 as 3 select 1 x from dual;表已創(chuàng)建。SQL> update a set x=x+1;已更新 1 行。(2)在會(huì)話2中,執(zhí)行如下的操作:SQL> update b set x=x+1;已更新 1 行。現(xiàn)在在會(huì)話2中執(zhí)行語(yǔ)句:SQL> update a se

8、t x=x+1;請(qǐng)給出執(zhí)行結(jié)果:因?yàn)榈谝粋€(gè)會(huì)話已經(jīng)將這個(gè)行鎖定,所以將會(huì)立即阻塞(SQL提示符不能返回)。然而,這并不是死鎖,這只是阻塞。現(xiàn)在還沒有死鎖,因?yàn)榈谝粋€(gè)會(huì)話還有機(jī)會(huì)進(jìn)行提交或者回滾,這是第二個(gè)會(huì)話將繼續(xù)執(zhí)行。只是處于等待狀態(tài)。(3)在會(huì)話1中,更新B表,這將導(dǎo)致死鎖。SQL> update b set x=x+1;會(huì)話1處于執(zhí)行狀態(tài),但是沒有SQL提示符的返回,也沒有處理結(jié)果(4)在會(huì)話2中,可以看到Oracle檢測(cè)到了死鎖。SQL> update a set x=x+1;請(qǐng)給出執(zhí)行結(jié)果:(5)查找Oracle的追蹤文件:c:oracleproduct10.1.0adm

9、intestdbudumptestdb_ora_XXXX.trc,其中XXXX為一編號(hào),實(shí)驗(yàn)時(shí)請(qǐng)根據(jù)文件創(chuàng)建和修改時(shí)間選擇最新的。會(huì)發(fā)現(xiàn)類似如下記錄信息:該文件中記錄了發(fā)生死鎖的系統(tǒng)的一系列的信息。4.6. 事務(wù)處理綜合練習(xí)(1)實(shí)驗(yàn)準(zhǔn)備:根據(jù)現(xiàn)有表emp生成測(cè)試用表(2)按下表所示步驟完成實(shí)驗(yàn),根據(jù)運(yùn)行結(jié)果完成表格最后一欄,理解事務(wù)處理。打開三個(gè)SQL Plus窗口完成實(shí)驗(yàn)要點(diǎn):在第一個(gè)SQL Plus窗口中設(shè)置 SET TRANSACTION READ ONLY 時(shí)間會(huì)話1會(huì)話2會(huì)話3給出各會(huì)話結(jié)果T1set transaction read only;T 2select count(*) from emp_t;select count(*) from emp_t;會(huì)話1:會(huì)話2:T3delete from emp_t where rownum<=5;會(huì)話3:T4select count(*) from emp_t;select count(*) from emp_t;會(huì)話1:會(huì)話2:T5commit;T6select count(*) from emp_t;select count(*) from emp_t;會(huì)話1:會(huì)話2:T7insert into emp_tselect * fro

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論