版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、9.1 數(shù)據(jù)庫的事務(wù)管理數(shù)據(jù)庫的事務(wù)管理 事務(wù)是數(shù)據(jù)庫系統(tǒng)的重要概念,也是數(shù)據(jù)庫事務(wù)是數(shù)據(jù)庫系統(tǒng)的重要概念,也是數(shù)據(jù)庫 操作不可分割的基本單位。數(shù)據(jù)庫恢復(fù)或數(shù)操作不可分割的基本單位。數(shù)據(jù)庫恢復(fù)或數(shù) 據(jù)并發(fā)控制都是以事務(wù)為單位進(jìn)行的。事務(wù)據(jù)并發(fā)控制都是以事務(wù)為單位進(jìn)行的。事務(wù) 控制的主要操作是事務(wù)提交和事務(wù)回滾??刂频闹饕僮魇鞘聞?wù)提交和事務(wù)回滾。 9.1.1 事務(wù)的概念事務(wù)的概念 在數(shù)據(jù)庫中通過事務(wù)(在數(shù)據(jù)庫中通過事務(wù)(Transaction)來保證)來保證 數(shù)據(jù)操作的整體性,事務(wù)是數(shù)據(jù)庫中系統(tǒng)中數(shù)據(jù)操作的整體性,事務(wù)是數(shù)據(jù)庫中系統(tǒng)中 執(zhí)行的一個(gè)工作單位,他是由一條或多條執(zhí)行的一個(gè)工作單位,他
2、是由一條或多條 SQL語句組成的一個(gè)邏輯單元,事務(wù)中的語句組成的一個(gè)邏輯單元,事務(wù)中的 SQL語句要么全部執(zhí)行,要么全部都不執(zhí)行語句要么全部執(zhí)行,要么全部都不執(zhí)行 ,是一個(gè)不可分割的邏輯單元。這些,是一個(gè)不可分割的邏輯單元。這些SQL語語 句只能是的句只能是的DML語句,而其他的語句,而其他的SQL語句,語句, 如如DDL語句和語句和DCL語句等,一旦執(zhí)行就立即語句等,一旦執(zhí)行就立即 提交給數(shù)據(jù)庫,不能回滾。提交給數(shù)據(jù)庫,不能回滾。 9.1.2 事務(wù)處理控制語句事務(wù)處理控制語句 Commit語句語句 Commit語句表示提交事務(wù),將事務(wù)中所語句表示提交事務(wù),將事務(wù)中所 有對(duì)數(shù)據(jù)庫的更新寫回到磁
3、盤上的物理數(shù)據(jù)庫有對(duì)數(shù)據(jù)庫的更新寫回到磁盤上的物理數(shù)據(jù)庫 中去,事務(wù)正常結(jié)束。中去,事務(wù)正常結(jié)束。 Rollback語句語句 Rollback語句表示事務(wù)回滾,當(dāng)事務(wù)在運(yùn)語句表示事務(wù)回滾,當(dāng)事務(wù)在運(yùn) 行過程中遇到某種故障,不能繼續(xù)執(zhí)行,事務(wù)行過程中遇到某種故障,不能繼續(xù)執(zhí)行,事務(wù) 不能正常結(jié)束,則需要通過事務(wù)回滾撤銷未提不能正常結(jié)束,則需要通過事務(wù)回滾撤銷未提 交事務(wù)中的交事務(wù)中的SQL語句對(duì)數(shù)據(jù)庫的修改,回滾到語句對(duì)數(shù)據(jù)庫的修改,回滾到 事務(wù)開始時(shí)的狀態(tài)。事務(wù)開始時(shí)的狀態(tài)。 9.1.2 事務(wù)處理控制語句事務(wù)處理控制語句 Savepoint語句語句 Savepoint語句表示在事務(wù)中建立一個(gè)存
4、儲(chǔ)點(diǎn),語句表示在事務(wù)中建立一個(gè)存儲(chǔ)點(diǎn), 存儲(chǔ)點(diǎn)可以將一個(gè)長的事務(wù)劃分為小的部分,存儲(chǔ)點(diǎn)可以將一個(gè)長的事務(wù)劃分為小的部分, 當(dāng)事務(wù)處理發(fā)生異常時(shí),可指定事務(wù)回滾到某當(dāng)事務(wù)處理發(fā)生異常時(shí),可指定事務(wù)回滾到某 存儲(chǔ)點(diǎn),然后在從該存儲(chǔ)點(diǎn)重新執(zhí)行。存儲(chǔ)點(diǎn),然后在從該存儲(chǔ)點(diǎn)重新執(zhí)行。 Set Transaction語句語句 使用使用Set Transaction語句可以設(shè)置當(dāng)前事務(wù)的語句可以設(shè)置當(dāng)前事務(wù)的 各種屬性,該語句必須是事務(wù)處理中使用的第各種屬性,該語句必須是事務(wù)處理中使用的第 一個(gè)語句。一個(gè)語句。Set Transaction語句只對(duì)當(dāng)前要處語句只對(duì)當(dāng)前要處 理的事務(wù)進(jìn)行設(shè)置,當(dāng)事務(wù)終止后,對(duì)事
5、務(wù)的理的事務(wù)進(jìn)行設(shè)置,當(dāng)事務(wù)終止后,對(duì)事務(wù)的 屬性設(shè)置也將失效。屬性設(shè)置也將失效。 9.1.2 事務(wù)的事務(wù)的ACID特性特性 一組一組SQL語句操作要成為事務(wù),數(shù)據(jù)庫管理語句操作要成為事務(wù),數(shù)據(jù)庫管理 系統(tǒng)必須保證這組操作的原子性(系統(tǒng)必須保證這組操作的原子性(Atomictiy )、一致性()、一致性(Consistency)、隔離性()、隔離性( Isolation)和持續(xù)性()和持續(xù)性(Durability),即事務(wù)),即事務(wù) 的的ACID特性,以保證事務(wù)在并發(fā)訪問時(shí)對(duì)數(shù)特性,以保證事務(wù)在并發(fā)訪問時(shí)對(duì)數(shù) 據(jù)庫的保護(hù),任何事務(wù)都具有這四個(gè)基本特?fù)?jù)庫的保護(hù),任何事務(wù)都具有這四個(gè)基本特 性性
6、9.1.2 事務(wù)的事務(wù)的ACID特性特性 原子性原子性 事務(wù)的原子性是指事務(wù)中包含的操作,要事務(wù)的原子性是指事務(wù)中包含的操作,要 么全部完成,要么全部不完成,不可能停滯在么全部完成,要么全部不完成,不可能停滯在 中間某個(gè)環(huán)節(jié)。中間某個(gè)環(huán)節(jié)。 一致性一致性 事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個(gè)一事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫從一個(gè)一 致性狀態(tài)轉(zhuǎn)移到另一個(gè)一致性狀態(tài)。致性狀態(tài)轉(zhuǎn)移到另一個(gè)一致性狀態(tài)。 9.1.2 事務(wù)的事務(wù)的ACID特性特性 隔離性隔離性 對(duì)并發(fā)執(zhí)行而言,一個(gè)事務(wù)的執(zhí)行不能被其他對(duì)并發(fā)執(zhí)行而言,一個(gè)事務(wù)的執(zhí)行不能被其他 事務(wù)干擾,即一個(gè)事務(wù)內(nèi)部的操作及使用的數(shù)事務(wù)干擾,即一個(gè)事務(wù)內(nèi)部的
7、操作及使用的數(shù) 據(jù)對(duì)其他并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè)據(jù)對(duì)其他并發(fā)事務(wù)是隔離的,并發(fā)執(zhí)行的各個(gè) 事務(wù)之間不能互相干擾。事務(wù)之間不能互相干擾。 持續(xù)性持續(xù)性 事務(wù)的持續(xù)性是當(dāng)事務(wù)處理結(jié)束并成功提交后事務(wù)的持續(xù)性是當(dāng)事務(wù)處理結(jié)束并成功提交后 ,它對(duì)數(shù)據(jù)庫數(shù)據(jù)的修改應(yīng)該是永久的,即便,它對(duì)數(shù)據(jù)庫數(shù)據(jù)的修改應(yīng)該是永久的,即便 是系統(tǒng)遇到故障也不會(huì)丟失,接下來的操作也是系統(tǒng)遇到故障也不會(huì)丟失,接下來的操作也 不應(yīng)該對(duì)其執(zhí)行結(jié)果有任何影響。不應(yīng)該對(duì)其執(zhí)行結(jié)果有任何影響。 9.2 Oracle數(shù)據(jù)庫的事務(wù)管理數(shù)據(jù)庫的事務(wù)管理 Oracle中事務(wù)的開始中事務(wù)的開始 連接到數(shù)據(jù)庫上,并執(zhí)行一條連接到數(shù)據(jù)庫上,
8、并執(zhí)行一條DML語句(語句( insert、update或或delete) 前一個(gè)事務(wù)結(jié)束后,又輸入另外一條前一個(gè)事務(wù)結(jié)束后,又輸入另外一條DML 語句。語句。 9.2 Oracle數(shù)據(jù)庫的事務(wù)管理數(shù)據(jù)庫的事務(wù)管理 Oracle結(jié)束一個(gè)事務(wù)結(jié)束一個(gè)事務(wù) 執(zhí)行執(zhí)行Commit或或Rollback語句。語句。 執(zhí)行一條執(zhí)行一條DDL語句,如語句,如create、drop、 rename或或alter語句,在這種情況下會(huì)自動(dòng)語句,在這種情況下會(huì)自動(dòng) 執(zhí)行執(zhí)行commit語句。語句。 斷開與數(shù)據(jù)庫的連接。斷開與數(shù)據(jù)庫的連接。 執(zhí)行了一條執(zhí)行了一條DML語句,改語句卻失敗了,語句,改語句卻失敗了, 在這
9、種情況下,會(huì)為這個(gè)無效的在這種情況下,會(huì)為這個(gè)無效的DML語句語句 執(zhí)行執(zhí)行rollback語句,事務(wù)結(jié)束。語句,事務(wù)結(jié)束。 9.2 Oracle數(shù)據(jù)庫的事務(wù)管理數(shù)據(jù)庫的事務(wù)管理 提交事務(wù)提交事務(wù) 要永久性的記錄事務(wù)中要永久性的記錄事務(wù)中SQL語句的執(zhí)行結(jié)果,語句的執(zhí)行結(jié)果, 需要執(zhí)行需要執(zhí)行Commit語句提交事務(wù)。語句提交事務(wù)。 【例例9-1】在藥庫的在藥庫的Provider表添加一行數(shù)據(jù),表添加一行數(shù)據(jù), 然后對(duì)數(shù)據(jù)進(jìn)行永久性保存。然后對(duì)數(shù)據(jù)進(jìn)行永久性保存。 9.2 Oracle數(shù)據(jù)庫的事務(wù)管理數(shù)據(jù)庫的事務(wù)管理 2.回滾事務(wù)回滾事務(wù) 1)回滾整個(gè)事務(wù))回滾整個(gè)事務(wù) Oracle中使用中使
10、用Rollback命令來回滾事務(wù)內(nèi)的所命令來回滾事務(wù)內(nèi)的所 有數(shù)據(jù)的修改,并結(jié)束事務(wù)。有數(shù)據(jù)的修改,并結(jié)束事務(wù)。Oracle利用撤銷利用撤銷 表空間(或回滾段)來存儲(chǔ)數(shù)據(jù)修改前的原值表空間(或回滾段)來存儲(chǔ)數(shù)據(jù)修改前的原值 ,提供事務(wù)回滾時(shí)所需的信息。,提供事務(wù)回滾時(shí)所需的信息。 【例例9-2】在藥庫的在藥庫的Provider表添加兩行數(shù)據(jù),表添加兩行數(shù)據(jù), 查看表中記錄情況,然后使用查看表中記錄情況,然后使用Rollback語句回語句回 滾,將表進(jìn)行恢復(fù),再查看表中記錄情況。滾,將表進(jìn)行恢復(fù),再查看表中記錄情況。 (1)向)向Provider表中添加兩條記錄,并顯示表中添加兩條記錄,并顯示
11、表中記錄。表中記錄。 9.2 Oracle數(shù)據(jù)庫的事務(wù)管理數(shù)據(jù)庫的事務(wù)管理 9.2 Oracle數(shù)據(jù)庫的事務(wù)管理數(shù)據(jù)庫的事務(wù)管理 (2)將事務(wù)進(jìn)行回滾,再查看表中記錄情況)將事務(wù)進(jìn)行回滾,再查看表中記錄情況 從運(yùn)行結(jié)果可以看出,在從運(yùn)行結(jié)果可以看出,在Provider表添加兩行表添加兩行 數(shù)據(jù)后查看表中記錄,表中添加了數(shù)據(jù)后查看表中記錄,表中添加了 ProviderCode為為S006和和S007的兩行數(shù)據(jù),使的兩行數(shù)據(jù),使 用用Rollback語句回滾事務(wù)后再查看表中記錄,語句回滾事務(wù)后再查看表中記錄, 沒有了添加的兩行記錄,數(shù)據(jù)恢復(fù)原狀,如同沒有了添加的兩行記錄,數(shù)據(jù)恢復(fù)原狀,如同 沒有進(jìn)
12、行過任何數(shù)據(jù)操作一樣沒有進(jìn)行過任何數(shù)據(jù)操作一樣 9.2 Oracle數(shù)據(jù)庫的事務(wù)管理數(shù)據(jù)庫的事務(wù)管理 2)回滾到某個(gè)存儲(chǔ)點(diǎn))回滾到某個(gè)存儲(chǔ)點(diǎn) 在在Oracle中,通過中,通過Provider命令在事務(wù)中設(shè)置一命令在事務(wù)中設(shè)置一 個(gè)或多個(gè)存儲(chǔ)點(diǎn),將一個(gè)長的事務(wù)劃分為多個(gè)小的部個(gè)或多個(gè)存儲(chǔ)點(diǎn),將一個(gè)長的事務(wù)劃分為多個(gè)小的部 分,這樣在執(zhí)行事務(wù)回滾的時(shí)候,不必回滾整個(gè)事務(wù)分,這樣在執(zhí)行事務(wù)回滾的時(shí)候,不必回滾整個(gè)事務(wù) ,可根據(jù)需要只回滾到某個(gè)指點(diǎn)存儲(chǔ)點(diǎn)的位置,而不,可根據(jù)需要只回滾到某個(gè)指點(diǎn)存儲(chǔ)點(diǎn)的位置,而不 是對(duì)整個(gè)事務(wù)執(zhí)行回滾操作,且該事物仍可繼續(xù)。若是對(duì)整個(gè)事務(wù)執(zhí)行回滾操作,且該事物仍可繼續(xù)。
13、若 將事務(wù)回滾到某個(gè)存儲(chǔ)點(diǎn),則該存儲(chǔ)點(diǎn)之后執(zhí)行的語將事務(wù)回滾到某個(gè)存儲(chǔ)點(diǎn),則該存儲(chǔ)點(diǎn)之后執(zhí)行的語 句將被撤銷。句將被撤銷。 在事務(wù)中設(shè)置存儲(chǔ)點(diǎn)的語法格式為:在事務(wù)中設(shè)置存儲(chǔ)點(diǎn)的語法格式為: Savepoint 存儲(chǔ)點(diǎn)名存儲(chǔ)點(diǎn)名 ; 將事務(wù)回滾到存儲(chǔ)點(diǎn)的語法格式為:將事務(wù)回滾到存儲(chǔ)點(diǎn)的語法格式為: rollback to savepoint p1; 9.2 Oracle數(shù)據(jù)庫的事務(wù)管理數(shù)據(jù)庫的事務(wù)管理 【例【例9-3】在藥庫的】在藥庫的Provider表添加三行數(shù)據(jù),每添加表添加三行數(shù)據(jù),每添加 1行數(shù)據(jù),設(shè)置一個(gè)存儲(chǔ),查看表中記錄情況,然后使行數(shù)據(jù),設(shè)置一個(gè)存儲(chǔ),查看表中記錄情況,然后使 用用
14、Rollback語句回滾到第語句回滾到第1個(gè)存儲(chǔ)點(diǎn)個(gè)存儲(chǔ)點(diǎn)p1,將表進(jìn)行恢,將表進(jìn)行恢 復(fù),再查看表中記錄情況。復(fù),再查看表中記錄情況。 (1)向)向Provider表中添加三條記錄,每添加一條記錄表中添加三條記錄,每添加一條記錄 設(shè)置一個(gè)存儲(chǔ)點(diǎn),并顯示表中記錄。設(shè)置一個(gè)存儲(chǔ)點(diǎn),并顯示表中記錄。 9.2 Oracle數(shù)據(jù)庫的事務(wù)管理數(shù)據(jù)庫的事務(wù)管理 9.2 Oracle數(shù)據(jù)庫的事務(wù)管理數(shù)據(jù)庫的事務(wù)管理 (2)將事務(wù)回滾到第一個(gè)存儲(chǔ)點(diǎn))將事務(wù)回滾到第一個(gè)存儲(chǔ)點(diǎn)p1,再顯示,再顯示 表中記錄。表中記錄。 從運(yùn)行結(jié)果可以看出,在從運(yùn)行結(jié)果可以看出,在Provider表中添加三行數(shù)表中添加三行數(shù) 據(jù)并
15、設(shè)置保存點(diǎn)后查看表中記錄,表中添加了據(jù)并設(shè)置保存點(diǎn)后查看表中記錄,表中添加了 item_sn為為S006、S007和和S008的三行行數(shù)據(jù),使用的三行行數(shù)據(jù),使用 rollback to savepoint p1語句回滾事務(wù)到語句回滾事務(wù)到p1存儲(chǔ)點(diǎn)存儲(chǔ)點(diǎn) 后再查看表中記錄,沒有了添加的后再查看表中記錄,沒有了添加的S007和和S008的兩的兩 行記錄,數(shù)據(jù)恢復(fù)到行記錄,數(shù)據(jù)恢復(fù)到p1存儲(chǔ)點(diǎn),而存儲(chǔ)點(diǎn),而p1存儲(chǔ)點(diǎn)之前的存儲(chǔ)點(diǎn)之前的 數(shù)據(jù)操作則保留下來了。數(shù)據(jù)操作則保留下來了。 9.3 Oracle數(shù)據(jù)庫的恢復(fù)數(shù)據(jù)庫的恢復(fù) 數(shù)據(jù)庫系統(tǒng)所采用的恢復(fù)技術(shù)是否行之有效數(shù)據(jù)庫系統(tǒng)所采用的恢復(fù)技術(shù)是否行
16、之有效 ,不僅對(duì)系統(tǒng)的可靠性程度起著決定性作用,不僅對(duì)系統(tǒng)的可靠性程度起著決定性作用 ,而且對(duì)系統(tǒng)的運(yùn)行效率也有很大影響,是,而且對(duì)系統(tǒng)的運(yùn)行效率也有很大影響,是 衡量系統(tǒng)性能的重要指標(biāo)。衡量系統(tǒng)性能的重要指標(biāo)。Oracle提供了完提供了完 善的備份和恢復(fù)機(jī)制,只要管理員采用科學(xué)善的備份和恢復(fù)機(jī)制,只要管理員采用科學(xué) 的備份和恢復(fù)策略,將會(huì)保證數(shù)據(jù)庫的安全的備份和恢復(fù)策略,將會(huì)保證數(shù)據(jù)庫的安全 性和完整性。性和完整性。 9.3.1 故障分類及恢復(fù)策略故障分類及恢復(fù)策略 數(shù)據(jù)庫系統(tǒng)中可能發(fā)生各種各樣的故障,常數(shù)據(jù)庫系統(tǒng)中可能發(fā)生各種各樣的故障,常 見的故障有三類:事務(wù)故障、系統(tǒng)故障和介見的故障有
17、三類:事務(wù)故障、系統(tǒng)故障和介 質(zhì)故障。質(zhì)故障。 1.事務(wù)故障及其恢復(fù)策略事務(wù)故障及其恢復(fù)策略 1)可預(yù)期的事務(wù)故障。)可預(yù)期的事務(wù)故障。 這種故障可以通過事務(wù)程序本身發(fā)現(xiàn)。例如這種故障可以通過事務(wù)程序本身發(fā)現(xiàn)。例如 存款余額透支,這種類型的事務(wù)故障,可以存款余額透支,這種類型的事務(wù)故障,可以 在事務(wù)代碼中加入判斷,如果不滿足條件,在事務(wù)代碼中加入判斷,如果不滿足條件, 程序可以發(fā)現(xiàn)并讓事務(wù)滾回,撤銷已做的修程序可以發(fā)現(xiàn)并讓事務(wù)滾回,撤銷已做的修 改,讓數(shù)據(jù)恢復(fù)到正確狀態(tài)。改,讓數(shù)據(jù)恢復(fù)到正確狀態(tài)。 9.3.1 故障分類及恢復(fù)策略故障分類及恢復(fù)策略 2)非預(yù)期的事務(wù)故障。)非預(yù)期的事務(wù)故障。 這
18、種故障是非預(yù)期的,不能由應(yīng)用程序自動(dòng)這種故障是非預(yù)期的,不能由應(yīng)用程序自動(dòng) 處理。如輸入數(shù)據(jù)錯(cuò)誤、運(yùn)算溢出、并發(fā)事處理。如輸入數(shù)據(jù)錯(cuò)誤、運(yùn)算溢出、并發(fā)事 務(wù)發(fā)生死鎖而被選中撤銷的事務(wù)、違反了存務(wù)發(fā)生死鎖而被選中撤銷的事務(wù)、違反了存 儲(chǔ)保護(hù)等。事務(wù)發(fā)生故障時(shí),被迫中斷的事儲(chǔ)保護(hù)等。事務(wù)發(fā)生故障時(shí),被迫中斷的事 務(wù)可能對(duì)數(shù)據(jù)進(jìn)行了修改,但事務(wù)沒有達(dá)到務(wù)可能對(duì)數(shù)據(jù)進(jìn)行了修改,但事務(wù)沒有達(dá)到 預(yù)期的終點(diǎn),致使數(shù)據(jù)可能處于不正確狀態(tài)預(yù)期的終點(diǎn),致使數(shù)據(jù)可能處于不正確狀態(tài) 。 9.3.1 故障分類及恢復(fù)策略故障分類及恢復(fù)策略 事務(wù)故障恢復(fù)事務(wù)故障恢復(fù) 事務(wù)撤銷(事務(wù)撤銷(UNDO):恢復(fù)過程要在不影響其恢
19、復(fù)過程要在不影響其 他事務(wù)運(yùn)行的情況下,利用日志文件中記錄的他事務(wù)運(yùn)行的情況下,利用日志文件中記錄的 信息,強(qiáng)行回滾(信息,強(qiáng)行回滾(Rollback)該事務(wù),撤銷該)該事務(wù),撤銷該 事務(wù)已經(jīng)做出的任何對(duì)數(shù)據(jù)庫的修改,使得該事務(wù)已經(jīng)做出的任何對(duì)數(shù)據(jù)庫的修改,使得該 事務(wù)好像根本沒有啟動(dòng)一樣事務(wù)好像根本沒有啟動(dòng)一樣 9.3.1 故障分類及恢復(fù)策略故障分類及恢復(fù)策略 事務(wù)故障恢復(fù)事務(wù)故障恢復(fù)操作過程如下:操作過程如下: 1. 反向掃描日志文件,由后向前逐個(gè)查找該事反向掃描日志文件,由后向前逐個(gè)查找該事 物的更新操作,物的更新操作, 2. 對(duì)該事務(wù)的更新操作執(zhí)行反操作,也就是對(duì)對(duì)該事務(wù)的更新操作執(zhí)行
20、反操作,也就是對(duì) 插入的新記錄進(jìn)行刪除操作,對(duì)刪除的記錄插入的新記錄進(jìn)行刪除操作,對(duì)刪除的記錄 進(jìn)行插入操作,對(duì)修改的數(shù)據(jù)用舊值代替新進(jìn)行插入操作,對(duì)修改的數(shù)據(jù)用舊值代替新 值,直到事務(wù)的開始。值,直到事務(wù)的開始。 3. 從運(yùn)行的事務(wù)列表中刪除該事物,釋放該事從運(yùn)行的事務(wù)列表中刪除該事物,釋放該事 物所占的資源。物所占的資源。 9.3.1 故障分類及恢復(fù)策略故障分類及恢復(fù)策略 2.系統(tǒng)故障及其恢復(fù)策略系統(tǒng)故障及其恢復(fù)策略 系統(tǒng)故障是指在系統(tǒng)運(yùn)行過程中,由于某種系統(tǒng)故障是指在系統(tǒng)運(yùn)行過程中,由于某種 原因,造成系統(tǒng)停止運(yùn)行,使得系統(tǒng)需要重原因,造成系統(tǒng)停止運(yùn)行,使得系統(tǒng)需要重 新啟動(dòng),這類型的故
21、障如硬件故障、軟件故新啟動(dòng),這類型的故障如硬件故障、軟件故 障(障(DBMS、操作系統(tǒng)或應(yīng)用程序)或系統(tǒng)斷、操作系統(tǒng)或應(yīng)用程序)或系統(tǒng)斷 電等。電等。 9.3.1 故障分類及恢復(fù)策略故障分類及恢復(fù)策略 系統(tǒng)故障系統(tǒng)故障對(duì)數(shù)據(jù)庫的影響有以下兩種情況:對(duì)數(shù)據(jù)庫的影響有以下兩種情況: (1)一些未完成的事務(wù)對(duì)數(shù)據(jù)庫的更新已寫入)一些未完成的事務(wù)對(duì)數(shù)據(jù)庫的更新已寫入 數(shù)據(jù)庫,這樣系統(tǒng)重啟后,要強(qiáng)行撤銷(數(shù)據(jù)庫,這樣系統(tǒng)重啟后,要強(qiáng)行撤銷( UNDO)未完成的事務(wù)。)未完成的事務(wù)。 (2)一些已提交的事務(wù)對(duì)數(shù)據(jù)庫的更新結(jié)果還)一些已提交的事務(wù)對(duì)數(shù)據(jù)庫的更新結(jié)果還 保留在緩沖區(qū)尚未寫到磁盤上的物理數(shù)據(jù)庫中
22、保留在緩沖區(qū)尚未寫到磁盤上的物理數(shù)據(jù)庫中 ,這樣系統(tǒng)重啟后,要通過事務(wù)重做(,這樣系統(tǒng)重啟后,要通過事務(wù)重做(REDO )將這些已提交事務(wù)的結(jié)果重新寫入數(shù)據(jù)庫。)將這些已提交事務(wù)的結(jié)果重新寫入數(shù)據(jù)庫。 9.3.1 故障分類及恢復(fù)策略故障分類及恢復(fù)策略 系統(tǒng)故障的恢復(fù)策略步驟如下:系統(tǒng)故障的恢復(fù)策略步驟如下: 重新啟動(dòng)操作系統(tǒng)和重新啟動(dòng)操作系統(tǒng)和DBMS。 正向掃描日志文件,由前向后逐個(gè)查找已提交的事務(wù),將正向掃描日志文件,由前向后逐個(gè)查找已提交的事務(wù),將 事務(wù)的唯一標(biāo)識(shí)號(hào)添加到事務(wù)重做(事務(wù)的唯一標(biāo)識(shí)號(hào)添加到事務(wù)重做(REDO)隊(duì)列,同時(shí))隊(duì)列,同時(shí) ,對(duì)未提交的事務(wù),將事務(wù)的唯一標(biāo)識(shí)號(hào)添加到
23、撤銷(,對(duì)未提交的事務(wù),將事務(wù)的唯一標(biāo)識(shí)號(hào)添加到撤銷( UDDO)隊(duì)列。)隊(duì)列。 對(duì)撤銷隊(duì)列中的事務(wù)進(jìn)行撤銷處理。通過反向掃描日志文對(duì)撤銷隊(duì)列中的事務(wù)進(jìn)行撤銷處理。通過反向掃描日志文 件,對(duì)隊(duì)列要撤銷的事務(wù)進(jìn)行回滾操作。件,對(duì)隊(duì)列要撤銷的事務(wù)進(jìn)行回滾操作。 對(duì)重做隊(duì)列中的事務(wù)進(jìn)行重做處理。通過正向掃描日志文對(duì)重做隊(duì)列中的事務(wù)進(jìn)行重做處理。通過正向掃描日志文 件,對(duì)隊(duì)列中要重做的事務(wù)重新執(zhí)行日志文件登記的操作件,對(duì)隊(duì)列中要重做的事務(wù)重新執(zhí)行日志文件登記的操作 系統(tǒng)故障的恢復(fù)由系統(tǒng)重新啟動(dòng)后自動(dòng)完成,無需用戶干系統(tǒng)故障的恢復(fù)由系統(tǒng)重新啟動(dòng)后自動(dòng)完成,無需用戶干 預(yù)。預(yù)。 9.3.1 故障分類及恢復(fù)
24、策略故障分類及恢復(fù)策略 3.介質(zhì)故障及其恢復(fù)策略介質(zhì)故障及其恢復(fù)策略 介質(zhì)故障是指系統(tǒng)在運(yùn)行過程中,由于存儲(chǔ)介質(zhì)故障是指系統(tǒng)在運(yùn)行過程中,由于存儲(chǔ) 器介質(zhì)受到破壞,如磁盤損壞、磁頭碰撞、器介質(zhì)受到破壞,如磁盤損壞、磁頭碰撞、 瞬時(shí)強(qiáng)磁場(chǎng)干擾等,導(dǎo)致存儲(chǔ)在存儲(chǔ)器上的瞬時(shí)強(qiáng)磁場(chǎng)干擾等,導(dǎo)致存儲(chǔ)在存儲(chǔ)器上的 數(shù)據(jù)部分或全部丟失,數(shù)據(jù)庫遭到毀滅性的數(shù)據(jù)部分或全部丟失,數(shù)據(jù)庫遭到毀滅性的 破壞。破壞。 9.3.1 故障分類及恢復(fù)策略故障分類及恢復(fù)策略 介質(zhì)故障恢復(fù)的策略或步驟如下介質(zhì)故障恢復(fù)的策略或步驟如下: 裝入最新的后備數(shù)據(jù)庫副本,使數(shù)據(jù)庫恢復(fù)到最近一次轉(zhuǎn)裝入最新的后備數(shù)據(jù)庫副本,使數(shù)據(jù)庫恢復(fù)到最近
25、一次轉(zhuǎn) 儲(chǔ)備份時(shí)的一致性狀態(tài)。儲(chǔ)備份時(shí)的一致性狀態(tài)。 如果有最近轉(zhuǎn)儲(chǔ)備份后的日志備份可用,則裝入有關(guān)的日如果有最近轉(zhuǎn)儲(chǔ)備份后的日志備份可用,則裝入有關(guān)的日 志副本,在日志中找出轉(zhuǎn)儲(chǔ)后所有已提交的事務(wù),對(duì)這些志副本,在日志中找出轉(zhuǎn)儲(chǔ)后所有已提交的事務(wù),對(duì)這些 已提交的事務(wù)進(jìn)行重做處理,將數(shù)據(jù)庫恢復(fù)到故障前某一已提交的事務(wù)進(jìn)行重做處理,將數(shù)據(jù)庫恢復(fù)到故障前某一 時(shí)刻的一致狀態(tài)。時(shí)刻的一致狀態(tài)。 介質(zhì)故障的恢復(fù)需要數(shù)據(jù)庫管理員(介質(zhì)故障的恢復(fù)需要數(shù)據(jù)庫管理員(DBA) 的干預(yù),的干預(yù),DBA重裝最近轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫副本和重裝最近轉(zhuǎn)儲(chǔ)的數(shù)據(jù)庫副本和 有關(guān)的日志文件副本,發(fā)出有關(guān)的日志文件副本,發(fā)出DBMS
26、提供的恢復(fù)提供的恢復(fù) 命令即可,具體的恢復(fù)操作仍由命令即可,具體的恢復(fù)操作仍由DBMS來完成來完成 9.3.2 備份與介質(zhì)故障恢復(fù)備份與介質(zhì)故障恢復(fù) 數(shù)據(jù)庫恢復(fù)的基本原則是數(shù)據(jù)的冗余。建立數(shù)據(jù)庫恢復(fù)的基本原則是數(shù)據(jù)的冗余。建立 冗余數(shù)據(jù)最常用的技術(shù)是數(shù)據(jù)備份和登記日冗余數(shù)據(jù)最常用的技術(shù)是數(shù)據(jù)備份和登記日 志文件,通常在一個(gè)數(shù)據(jù)庫系統(tǒng)中,這兩種志文件,通常在一個(gè)數(shù)據(jù)庫系統(tǒng)中,這兩種 方法一起使用。方法一起使用。 1.物理備份與邏輯備份物理備份與邏輯備份 從數(shù)據(jù)庫備份的對(duì)象來分,可將備份分為物從數(shù)據(jù)庫備份的對(duì)象來分,可將備份分為物 理備份與邏輯備份。理備份與邏輯備份。 9.3.2 備份與介質(zhì)故障恢
27、復(fù)備份與介質(zhì)故障恢復(fù) (1)物理備份)物理備份 物理備份就是轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫物理文件物理備份就是轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫物理文件(如數(shù)據(jù)文如數(shù)據(jù)文 件、控制文件、歸檔日志文件等件、控制文件、歸檔日志文件等),一旦數(shù)據(jù),一旦數(shù)據(jù) 庫發(fā)生故障,可以利用這些文件進(jìn)行還原。庫發(fā)生故障,可以利用這些文件進(jìn)行還原。 該方法實(shí)現(xiàn)數(shù)據(jù)庫的完整恢復(fù),但數(shù)據(jù)庫必該方法實(shí)現(xiàn)數(shù)據(jù)庫的完整恢復(fù),但數(shù)據(jù)庫必 須運(yùn)行在歸檔模式下(業(yè)務(wù)數(shù)據(jù)庫在非歸擋須運(yùn)行在歸檔模式下(業(yè)務(wù)數(shù)據(jù)庫在非歸擋 模式下運(yùn)行),且需要極大的外部存儲(chǔ)設(shè)備模式下運(yùn)行),且需要極大的外部存儲(chǔ)設(shè)備 。在歸檔模式下,。在歸檔模式下,Oracle自動(dòng)對(duì)聯(lián)機(jī)重做日自動(dòng)對(duì)聯(lián)機(jī)重做日 志
28、文件進(jìn)行歸檔,志文件進(jìn)行歸檔, 9.3.2 備份與介質(zhì)故障恢復(fù)備份與介質(zhì)故障恢復(fù) (2)邏輯備份)邏輯備份 是指利用是指利用Oracle Export工具將數(shù)據(jù)從數(shù)據(jù)庫工具將數(shù)據(jù)從數(shù)據(jù)庫 中導(dǎo)出來,利用中導(dǎo)出來,利用Oracle Import工具將導(dǎo)出來工具將導(dǎo)出來 的數(shù)據(jù)送回的數(shù)據(jù)送回Oracle數(shù)據(jù)庫中。數(shù)據(jù)庫中。 9.3.2 備份與介質(zhì)故障恢復(fù)備份與介質(zhì)故障恢復(fù) 2.備份的方式備份的方式 Oracle數(shù)據(jù)庫有三種標(biāo)準(zhǔn)的備份方式:導(dǎo)出數(shù)據(jù)庫有三種標(biāo)準(zhǔn)的備份方式:導(dǎo)出/ 導(dǎo)入(導(dǎo)入(Export/Import)、冷備份、熱備份,)、冷備份、熱備份, 導(dǎo)出導(dǎo)出/導(dǎo)入是邏輯備份,冷備份和熱備份時(shí)
29、物導(dǎo)入是邏輯備份,冷備份和熱備份時(shí)物 理備份。理備份。 1)導(dǎo)出)導(dǎo)出/導(dǎo)入(導(dǎo)入(Export/Import) exp命令可以把數(shù)據(jù)從遠(yuǎn)程數(shù)據(jù)庫服務(wù)器導(dǎo)出命令可以把數(shù)據(jù)從遠(yuǎn)程數(shù)據(jù)庫服務(wù)器導(dǎo)出 到本地的到本地的dmp(dmp文件時(shí)文件時(shí)Oracle數(shù)據(jù)庫導(dǎo)數(shù)據(jù)庫導(dǎo) 出文件)文件,出文件)文件,imp命令可以把命令可以把dmp文件從本文件從本 地導(dǎo)入到遠(yuǎn)處的數(shù)據(jù)庫服務(wù)器中。地導(dǎo)入到遠(yuǎn)處的數(shù)據(jù)庫服務(wù)器中。 9.3.2 備份與介質(zhì)故障恢復(fù)備份與介質(zhì)故障恢復(fù) 2)冷備份)冷備份 冷備份是指在數(shù)據(jù)完全正常關(guān)閉的狀態(tài)下冷備份是指在數(shù)據(jù)完全正常關(guān)閉的狀態(tài)下 所進(jìn)行的備份,當(dāng)正常關(guān)閉時(shí)會(huì)提供給我們所進(jìn)行的備份
30、,當(dāng)正常關(guān)閉時(shí)會(huì)提供給我們 一個(gè)完整的數(shù)據(jù)庫。一個(gè)完整的數(shù)據(jù)庫。 冷備份的過程是:冷備份的過程是: 1.先關(guān)閉數(shù)據(jù)庫;先關(guān)閉數(shù)據(jù)庫; 2.然后用拷貝命令備份全部的時(shí)間文件、重做然后用拷貝命令備份全部的時(shí)間文件、重做 日志文件、控制文件、初始化參數(shù)文件;日志文件、控制文件、初始化參數(shù)文件; 3.最后重啟數(shù)據(jù)庫。最后重啟數(shù)據(jù)庫。 9.3.2 備份與介質(zhì)故障恢復(fù)備份與介質(zhì)故障恢復(fù) 3)熱備份)熱備份 熱備份是在數(shù)據(jù)庫運(yùn)行時(shí),采用日志歸檔模熱備份是在數(shù)據(jù)庫運(yùn)行時(shí),采用日志歸檔模 式(式(archivelog mode)備份數(shù)據(jù)庫的方法。)備份數(shù)據(jù)庫的方法。 數(shù)據(jù)庫運(yùn)行在日志歸檔模式下,就可以做備數(shù)據(jù)庫
31、運(yùn)行在日志歸檔模式下,就可以做備 份了。在備份期間允許對(duì)數(shù)據(jù)庫進(jìn)行存取或份了。在備份期間允許對(duì)數(shù)據(jù)庫進(jìn)行存取或 修改操作。修改操作。 9.3.2 備份與介質(zhì)故障恢復(fù)備份與介質(zhì)故障恢復(fù) 3.介質(zhì)故障恢復(fù)介質(zhì)故障恢復(fù) 進(jìn)行介質(zhì)故障恢復(fù)時(shí),如果數(shù)據(jù)庫可以運(yùn)行進(jìn)行介質(zhì)故障恢復(fù)時(shí),如果數(shù)據(jù)庫可以運(yùn)行 ,在線日志僅可重用但不能歸檔,此時(shí)介質(zhì),在線日志僅可重用但不能歸檔,此時(shí)介質(zhì) 故障恢復(fù)可以使用最新的完全備份的簡單恢故障恢復(fù)可以使用最新的完全備份的簡單恢 復(fù)。如果數(shù)據(jù)庫可以運(yùn)行,且其日志已經(jīng)被復(fù)。如果數(shù)據(jù)庫可以運(yùn)行,且其日志已經(jīng)被 歸檔,則只能恢復(fù)數(shù)據(jù)庫到介質(zhì)故障前的一歸檔,則只能恢復(fù)數(shù)據(jù)庫到介質(zhì)故障前的
32、一 個(gè)指定事務(wù)一致性狀態(tài)。個(gè)指定事務(wù)一致性狀態(tài)。 如果數(shù)據(jù)庫是在歸檔方式下運(yùn)行,可以實(shí)施如果數(shù)據(jù)庫是在歸檔方式下運(yùn)行,可以實(shí)施 完全介質(zhì)恢復(fù)和不完全介質(zhì)恢復(fù)。完全介質(zhì)恢復(fù)和不完全介質(zhì)恢復(fù)。 9.3.2 備份與介質(zhì)故障恢復(fù)備份與介質(zhì)故障恢復(fù) 1)完全介質(zhì)恢復(fù)完全介質(zhì)恢復(fù) 要實(shí)現(xiàn)完全介質(zhì)恢復(fù),需滿足以下條件:要實(shí)現(xiàn)完全介質(zhì)恢復(fù),需滿足以下條件: 1)必須保證備份是在數(shù)據(jù)庫進(jìn)入歸檔模式后)必須保證備份是在數(shù)據(jù)庫進(jìn)入歸檔模式后 建立的;建立的; 2)重做日志文件、備份數(shù)據(jù)文件和一個(gè)當(dāng)前)重做日志文件、備份數(shù)據(jù)文件和一個(gè)當(dāng)前 有效控制文件都可以正常使用。有效控制文件都可以正常使用。 完全介質(zhì)恢復(fù),可以只
33、對(duì)丟失或損壞的部分完全介質(zhì)恢復(fù),可以只對(duì)丟失或損壞的部分 數(shù)據(jù)文件進(jìn)行修復(fù),也可以對(duì)整個(gè)數(shù)據(jù)庫進(jìn)數(shù)據(jù)文件進(jìn)行修復(fù),也可以對(duì)整個(gè)數(shù)據(jù)庫進(jìn) 行恢復(fù);可以在數(shù)據(jù)庫打開的狀態(tài)下進(jìn)行恢行恢復(fù);可以在數(shù)據(jù)庫打開的狀態(tài)下進(jìn)行恢 復(fù),也可以在數(shù)據(jù)庫關(guān)閉的狀態(tài)下進(jìn)行恢復(fù)復(fù),也可以在數(shù)據(jù)庫關(guān)閉的狀態(tài)下進(jìn)行恢復(fù) 。 9.3.2 備份與介質(zhì)故障恢復(fù)備份與介質(zhì)故障恢復(fù) 2)不完全介質(zhì)恢復(fù))不完全介質(zhì)恢復(fù) 不完全介質(zhì)恢復(fù)是在完全介質(zhì)恢復(fù)不可能進(jìn)不完全介質(zhì)恢復(fù)是在完全介質(zhì)恢復(fù)不可能進(jìn) 行或有特殊要求時(shí)進(jìn)行的介質(zhì)恢復(fù)。如果歸行或有特殊要求時(shí)進(jìn)行的介質(zhì)恢復(fù)。如果歸 檔重做日志文件被損壞、控制文件全部丟失檔重做日志文件被損壞、控
34、制文件全部丟失 或者用戶錯(cuò)誤等原因,致使歸檔模式下的數(shù)或者用戶錯(cuò)誤等原因,致使歸檔模式下的數(shù) 據(jù)庫不能恢復(fù)到故障發(fā)生時(shí)刻,此時(shí)只能進(jìn)據(jù)庫不能恢復(fù)到故障發(fā)生時(shí)刻,此時(shí)只能進(jìn) 行不完全介質(zhì)恢復(fù)。進(jìn)行不完全介質(zhì)恢復(fù)必行不完全介質(zhì)恢復(fù)。進(jìn)行不完全介質(zhì)恢復(fù)必 須保證有指定時(shí)刻的數(shù)據(jù)文件備份和指定時(shí)須保證有指定時(shí)刻的數(shù)據(jù)文件備份和指定時(shí) 刻后生成的歸檔重做日志文件??毯笊傻臍w檔重做日志文件。 9.3.3 基于日志的故障恢復(fù)基于日志的故障恢復(fù) 1.事務(wù)日志及其用于數(shù)據(jù)恢復(fù)的核心機(jī)制事務(wù)日志及其用于數(shù)據(jù)恢復(fù)的核心機(jī)制 事務(wù)日志是以事務(wù)為單位進(jìn)行記錄的,存放事務(wù)日志是以事務(wù)為單位進(jìn)行記錄的,存放 恢復(fù)數(shù)據(jù)所需
35、的所恢復(fù)數(shù)據(jù)所需的所有信有信息,每一個(gè)日志項(xiàng)(息,每一個(gè)日志項(xiàng)( Log Item)詳細(xì)記錄了已發(fā)生的所有修改和)詳細(xì)記錄了已發(fā)生的所有修改和 執(zhí)行每次修改的事務(wù)處理的足夠信息,以確執(zhí)行每次修改的事務(wù)處理的足夠信息,以確 保系統(tǒng)在必要的時(shí)候能夠重做(保系統(tǒng)在必要的時(shí)候能夠重做(REDO)該事)該事 物,以達(dá)到恢復(fù)數(shù)據(jù)的目的。每一個(gè)數(shù)據(jù)庫物,以達(dá)到恢復(fù)數(shù)據(jù)的目的。每一個(gè)數(shù)據(jù)庫 必須至少擁有一個(gè)事務(wù)日志文件,允許擁有必須至少擁有一個(gè)事務(wù)日志文件,允許擁有 多個(gè)日志文件。多個(gè)日志文件。 9.3.3 基于日志的故障恢復(fù)基于日志的故障恢復(fù) 事務(wù)重做有兩個(gè)前提:事務(wù)重做有兩個(gè)前提: 1)數(shù)據(jù)庫必須處于某一
36、個(gè)時(shí)刻點(diǎn)的完整狀態(tài))數(shù)據(jù)庫必須處于某一個(gè)時(shí)刻點(diǎn)的完整狀態(tài) ,通常由完整數(shù)據(jù)庫備份來實(shí)現(xiàn);,通常由完整數(shù)據(jù)庫備份來實(shí)現(xiàn); 2)事務(wù)重做過程必須嚴(yán)格按照原來的時(shí)間順)事務(wù)重做過程必須嚴(yán)格按照原來的時(shí)間順 序進(jìn)行,因?yàn)閷?shí)際的數(shù)據(jù)操作中,后一步操序進(jìn)行,因?yàn)閷?shí)際的數(shù)據(jù)操作中,后一步操 作總是依賴于前一步操作的結(jié)果,也就是說作總是依賴于前一步操作的結(jié)果,也就是說 ,如果某個(gè)時(shí)間段的事務(wù)日志被損壞或丟失,如果某個(gè)時(shí)間段的事務(wù)日志被損壞或丟失 ,那么此時(shí)間段之后的日志也就無效了,那么此時(shí)間段之后的日志也就無效了 9.3.3 基于日志的故障恢復(fù)基于日志的故障恢復(fù) 使用事務(wù)日志進(jìn)行數(shù)據(jù)恢復(fù)過程使用事務(wù)日志進(jìn)行數(shù)
37、據(jù)恢復(fù)過程 9.3.3 基于日志的故障恢復(fù)基于日志的故障恢復(fù) 2.基于事務(wù)日志的數(shù)據(jù)庫恢復(fù)基于事務(wù)日志的數(shù)據(jù)庫恢復(fù) 1)恢復(fù)階段:多數(shù)據(jù)庫出現(xiàn)故障后,首先使用歷史備)恢復(fù)階段:多數(shù)據(jù)庫出現(xiàn)故障后,首先使用歷史備 份,將數(shù)據(jù)庫恢復(fù)至某一個(gè)備份時(shí)刻的完整狀態(tài),作份,將數(shù)據(jù)庫恢復(fù)至某一個(gè)備份時(shí)刻的完整狀態(tài),作 為恢復(fù)的起點(diǎn)。為恢復(fù)的起點(diǎn)。 2)前滾階段:利用歸檔日志和聯(lián)機(jī)日志依次重做自備)前滾階段:利用歸檔日志和聯(lián)機(jī)日志依次重做自備 份時(shí)刻以來的事務(wù)。份時(shí)刻以來的事務(wù)。 3)回滾階段:在故障發(fā)生的時(shí)刻點(diǎn)前附近的一些事務(wù))回滾階段:在故障發(fā)生的時(shí)刻點(diǎn)前附近的一些事務(wù) ,部分還沒有來得及提交,但是由于系
38、統(tǒng)內(nèi)部的,部分還沒有來得及提交,但是由于系統(tǒng)內(nèi)部的 Checkpoint事件的觸發(fā)導(dǎo)致事務(wù)處理已經(jīng)寫入聯(lián)機(jī)日事件的觸發(fā)導(dǎo)致事務(wù)處理已經(jīng)寫入聯(lián)機(jī)日 志,這部分事務(wù)需要利用數(shù)據(jù)映像進(jìn)行必要的回滾。志,這部分事務(wù)需要利用數(shù)據(jù)映像進(jìn)行必要的回滾。 9.3.3 基于日志的故障恢復(fù)基于日志的故障恢復(fù) 【例【例9-4】假設(shè)數(shù)據(jù)庫系統(tǒng)分別在】假設(shè)數(shù)據(jù)庫系統(tǒng)分別在T1、T3、 T5有有3次歷史備份,且次歷史備份,且T2-T5有歸檔事務(wù)日志有歸檔事務(wù)日志 ,T4-T7有聯(lián)機(jī)是事務(wù)日志,系統(tǒng)在有聯(lián)機(jī)是事務(wù)日志,系統(tǒng)在T7時(shí)刻出時(shí)刻出 現(xiàn)故障導(dǎo)致數(shù)據(jù)庫停止運(yùn)行,如圖現(xiàn)故障導(dǎo)致數(shù)據(jù)庫停止運(yùn)行,如圖9-2所示。所示。 請(qǐng)
39、根據(jù)已經(jīng)條件說明恢復(fù)過程。請(qǐng)根據(jù)已經(jīng)條件說明恢復(fù)過程。 9.3.4 檢查點(diǎn)檢查點(diǎn) 檢查點(diǎn)技術(shù)的基本思想是在日志文件中添加檢查點(diǎn)技術(shù)的基本思想是在日志文件中添加 檢查點(diǎn)標(biāo)識(shí),并在檢查點(diǎn)標(biāo)識(shí)寫到日志之前檢查點(diǎn)標(biāo)識(shí),并在檢查點(diǎn)標(biāo)識(shí)寫到日志之前 ,完成一些必要的,到現(xiàn)在為止的,完成一些必要的,到現(xiàn)在為止的“階段性階段性 ”歸總工作,歸總分析獲得的信息直接存儲(chǔ)歸總工作,歸總分析獲得的信息直接存儲(chǔ) 在檢查點(diǎn)標(biāo)識(shí)記錄中。在進(jìn)行恢復(fù)時(shí),就不在檢查點(diǎn)標(biāo)識(shí)記錄中。在進(jìn)行恢復(fù)時(shí),就不 在需要對(duì)所有日志進(jìn)行操作,可以通過分析在需要對(duì)所有日志進(jìn)行操作,可以通過分析 最近可用檢查點(diǎn)記錄中記錄的信息獲得重做最近可用檢查點(diǎn)記
40、錄中記錄的信息獲得重做 (REDO)開始點(diǎn)和撤銷()開始點(diǎn)和撤銷(UNDO)回溯點(diǎn)。)回溯點(diǎn)。 顯然通過周期性的創(chuàng)建檢查點(diǎn),可以大幅度顯然通過周期性的創(chuàng)建檢查點(diǎn),可以大幅度 的減小和降低恢復(fù)的時(shí)間和工作量。的減小和降低恢復(fù)的時(shí)間和工作量。 9.3.4 檢查點(diǎn)檢查點(diǎn) 一般數(shù)據(jù)庫系統(tǒng)產(chǎn)品自動(dòng)實(shí)行檢查點(diǎn)操作,一般數(shù)據(jù)庫系統(tǒng)產(chǎn)品自動(dòng)實(shí)行檢查點(diǎn)操作, 無需用戶干預(yù)。無需用戶干預(yù)。 檢查點(diǎn)恢復(fù)技術(shù)示意圖 9.4.1 鎖鎖 封鎖是一項(xiàng)用于多用戶同時(shí)訪問數(shù)據(jù)庫的技封鎖是一項(xiàng)用于多用戶同時(shí)訪問數(shù)據(jù)庫的技 術(shù),是實(shí)現(xiàn)并發(fā)控制的一項(xiàng)重要手段,能夠術(shù),是實(shí)現(xiàn)并發(fā)控制的一項(xiàng)重要手段,能夠 防止當(dāng)多用戶改寫數(shù)據(jù)庫時(shí)造成數(shù)
41、據(jù)丟失和防止當(dāng)多用戶改寫數(shù)據(jù)庫時(shí)造成數(shù)據(jù)丟失和 損壞。當(dāng)有一個(gè)事物對(duì)數(shù)據(jù)庫內(nèi)的數(shù)據(jù)進(jìn)行損壞。當(dāng)有一個(gè)事物對(duì)數(shù)據(jù)庫內(nèi)的數(shù)據(jù)進(jìn)行 操作時(shí),先對(duì)系統(tǒng)發(fā)出請(qǐng)求,對(duì)這部分?jǐn)?shù)據(jù)操作時(shí),先對(duì)系統(tǒng)發(fā)出請(qǐng)求,對(duì)這部分?jǐn)?shù)據(jù) 加鎖,這樣其他用戶就無法訪問和修改該數(shù)加鎖,這樣其他用戶就無法訪問和修改該數(shù) 據(jù),直到事務(wù)解除封鎖為止。據(jù),直到事務(wù)解除封鎖為止。 Oracle鎖的功能是鎖的功能是Oracle DBMS自動(dòng)完成的自動(dòng)完成的 ,不需要用戶干預(yù)。,不需要用戶干預(yù)。Oracle也提供了相關(guān)命也提供了相關(guān)命 令,供有經(jīng)驗(yàn)的用戶使用。令,供有經(jīng)驗(yàn)的用戶使用。 9.4.1 鎖鎖 1.基本鎖基本鎖:基本的封鎖類型有排他鎖和
42、共享鎖基本的封鎖類型有排他鎖和共享鎖 兩種。兩種。 1)排他鎖)排他鎖 排他鎖(排他鎖(Exclusive Locks)又稱寫鎖,簡稱)又稱寫鎖,簡稱 X鎖,若事務(wù)鎖,若事務(wù)T對(duì)數(shù)據(jù)對(duì)象對(duì)數(shù)據(jù)對(duì)象R加上加上X鎖,則只允鎖,則只允 許事務(wù)許事務(wù)T讀取和修改讀取和修改R,其他任何事務(wù)都要等,其他任何事務(wù)都要等T 釋放釋放R上的鎖后,才能對(duì)上的鎖后,才能對(duì)R加鎖。這就保證了加鎖。這就保證了 其他事務(wù)在其他事務(wù)在T釋放釋放R上的鎖之前不能讀取和修上的鎖之前不能讀取和修 改數(shù)據(jù)對(duì)象改數(shù)據(jù)對(duì)象R。 9.4.1 鎖鎖 2)共享鎖)共享鎖 共享鎖(共享鎖(Share Locks)又稱讀鎖,簡稱)又稱讀鎖,簡稱
43、S鎖鎖 ,若事務(wù),若事務(wù)T對(duì)數(shù)據(jù)對(duì)象對(duì)數(shù)據(jù)對(duì)象R加上加上S鎖,則只允許鎖,則只允許 事務(wù)事務(wù)T讀取讀取R,不允許修改,不允許修改R;其他事務(wù)可以;其他事務(wù)可以 對(duì)對(duì)A加加S鎖,但不能加鎖,但不能加X鎖,直到鎖,直到T釋放釋放R上的上的 S鎖。這就保證了其他事務(wù)在鎖。這就保證了其他事務(wù)在T釋放釋放R上的上的S鎖鎖 之前不能對(duì)之前不能對(duì)R做任何修改。做任何修改。 9.4.1 鎖鎖 2.鎖的粒度鎖的粒度 封鎖對(duì)象的大小稱為封鎖粒度(封鎖對(duì)象的大小稱為封鎖粒度(Granularity )。根據(jù)不同的事務(wù)所需的數(shù)據(jù)對(duì)象,封鎖)。根據(jù)不同的事務(wù)所需的數(shù)據(jù)對(duì)象,封鎖 的數(shù)據(jù)對(duì)象可以是數(shù)據(jù)庫、表、記錄和字段的
44、數(shù)據(jù)對(duì)象可以是數(shù)據(jù)庫、表、記錄和字段 等邏輯單元,也可以是數(shù)據(jù)頁、索引頁、塊等邏輯單元,也可以是數(shù)據(jù)頁、索引頁、塊 等物理單元。等物理單元。 封鎖的粒度越大,系統(tǒng)中能夠被封鎖的對(duì)象封鎖的粒度越大,系統(tǒng)中能夠被封鎖的對(duì)象 就越少,并發(fā)度也就越小,但系統(tǒng)開銷也越就越少,并發(fā)度也就越小,但系統(tǒng)開銷也越 ??;封鎖的粒度越小,并發(fā)度越高,但開銷?。环怄i的粒度越小,并發(fā)度越高,但開銷 也就越大。也就越大。所以所以選擇封鎖粒度時(shí)必須同時(shí)考選擇封鎖粒度時(shí)必須同時(shí)考 慮開銷和并發(fā)度兩個(gè)因素,進(jìn)行權(quán)衡,以求慮開銷和并發(fā)度兩個(gè)因素,進(jìn)行權(quán)衡,以求 得最優(yōu)的效果。得最優(yōu)的效果。 9.4.2 基于封鎖的協(xié)議基于封鎖的協(xié)
45、議 在使用排他鎖(在使用排他鎖(X)和共享鎖()和共享鎖(S)對(duì)數(shù)據(jù)對(duì))對(duì)數(shù)據(jù)對(duì) 象進(jìn)封鎖時(shí),還需要約定一些共同遵守的規(guī)象進(jìn)封鎖時(shí),還需要約定一些共同遵守的規(guī) 則,例如何時(shí)申請(qǐng)則,例如何時(shí)申請(qǐng)X鎖或鎖或S鎖、封鎖多長時(shí)間鎖、封鎖多長時(shí)間 、何時(shí)釋放等,稱這些封鎖規(guī)則為封鎖協(xié)議、何時(shí)釋放等,稱這些封鎖規(guī)則為封鎖協(xié)議 (Locking Protocol)。)。 9.4.2 基于封鎖的協(xié)議基于封鎖的協(xié)議 1一級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議 一級(jí)封鎖協(xié)議規(guī)定事務(wù)一級(jí)封鎖協(xié)議規(guī)定事務(wù)T在修改數(shù)據(jù)對(duì)象在修改數(shù)據(jù)對(duì)象R之之 前必須先對(duì)其加前必須先對(duì)其加X鎖,直到事務(wù)結(jié)束才釋放。鎖,直到事務(wù)結(jié)束才釋放。 事務(wù)結(jié)束包括
46、正常結(jié)束(事務(wù)結(jié)束包括正常結(jié)束(COMMIT)和非正)和非正 常結(jié)束(常結(jié)束(ROLLBACK)。如果未能獲得)。如果未能獲得X鎖鎖 ,那么這個(gè)事務(wù)將進(jìn)入等待狀態(tài),直到獲得,那么這個(gè)事務(wù)將進(jìn)入等待狀態(tài),直到獲得X 鎖以后,事務(wù)才能繼續(xù)進(jìn)行下去。鎖以后,事務(wù)才能繼續(xù)進(jìn)行下去。 9.4.2 基于封鎖的協(xié)議基于封鎖的協(xié)議 1一級(jí)封鎖協(xié)議一級(jí)封鎖協(xié)議 一級(jí)封鎖協(xié)議通過規(guī)定事務(wù)在更新數(shù)據(jù)時(shí)必一級(jí)封鎖協(xié)議通過規(guī)定事務(wù)在更新數(shù)據(jù)時(shí)必 須獲得須獲得X鎖,使得兩個(gè)同時(shí)要求更新相同數(shù)據(jù)鎖,使得兩個(gè)同時(shí)要求更新相同數(shù)據(jù) 的事務(wù),必須在一個(gè)事務(wù)更新操作完成并釋的事務(wù),必須在一個(gè)事務(wù)更新操作完成并釋 放放X鎖后,才能開
47、始另一個(gè)事務(wù),所以使用一鎖后,才能開始另一個(gè)事務(wù),所以使用一 級(jí)封鎖協(xié)議可以解決更新遺失問題。級(jí)封鎖協(xié)議可以解決更新遺失問題。 在一級(jí)封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對(duì)在一級(jí)封鎖協(xié)議中,如果僅僅是讀數(shù)據(jù)不對(duì) 其進(jìn)行修改,是不需要加鎖的,它不能保證其進(jìn)行修改,是不需要加鎖的,它不能保證 可重復(fù)讀和不讀可重復(fù)讀和不讀“臟臟”數(shù)據(jù)。數(shù)據(jù)。 9.4.2 基于封鎖的協(xié)議基于封鎖的協(xié)議 2二級(jí)封鎖協(xié)議二級(jí)封鎖協(xié)議 二級(jí)封鎖協(xié)議規(guī)定在一級(jí)封鎖協(xié)議的基礎(chǔ)上二級(jí)封鎖協(xié)議規(guī)定在一級(jí)封鎖協(xié)議的基礎(chǔ)上 ,再加上事務(wù),再加上事務(wù)T在讀取數(shù)據(jù)在讀取數(shù)據(jù)R之前必須先對(duì)其之前必須先對(duì)其 加加S鎖,讀完后方可釋放鎖,讀完后方可釋
48、放S鎖。鎖。 二級(jí)封鎖協(xié)議除防止了丟失修改,還可以進(jìn)二級(jí)封鎖協(xié)議除防止了丟失修改,還可以進(jìn) 一步防止讀一步防止讀“臟臟”數(shù)據(jù)。數(shù)據(jù)。 9.4.2 基于封鎖的協(xié)議基于封鎖的協(xié)議 3三級(jí)封鎖協(xié)議三級(jí)封鎖協(xié)議 三級(jí)封鎖協(xié)議規(guī)定在一級(jí)封鎖協(xié)議的基礎(chǔ)上三級(jí)封鎖協(xié)議規(guī)定在一級(jí)封鎖協(xié)議的基礎(chǔ)上 ,加上事務(wù),加上事務(wù)T在讀取數(shù)據(jù)在讀取數(shù)據(jù)R之前必須先對(duì)其加之前必須先對(duì)其加 S鎖,讀取數(shù)據(jù)鎖,讀取數(shù)據(jù)R之后并不立即釋放之后并不立即釋放S鎖,而鎖,而 是等到事務(wù)是等到事務(wù)T結(jié)束才釋放。結(jié)束才釋放。 三級(jí)封鎖協(xié)議除防止了丟失更新和不讀三級(jí)封鎖協(xié)議除防止了丟失更新和不讀“臟臟 ”數(shù)據(jù)外,還進(jìn)一步防止了不可重復(fù)讀。數(shù)據(jù)
49、外,還進(jìn)一步防止了不可重復(fù)讀。 9.4.3 兩段封鎖協(xié)議兩段封鎖協(xié)議 兩段鎖協(xié)議(兩段鎖協(xié)議(Two-Phase Locking Protocol ,2PL協(xié)議)指所有事務(wù)必須遵守分兩個(gè)階段協(xié)議)指所有事務(wù)必須遵守分兩個(gè)階段 對(duì)數(shù)據(jù)項(xiàng)加鎖和解鎖的規(guī)則,規(guī)則內(nèi)容如對(duì)數(shù)據(jù)項(xiàng)加鎖和解鎖的規(guī)則,規(guī)則內(nèi)容如下下 : n第一階段:在對(duì)任何數(shù)據(jù)進(jìn)行讀、 寫操作之前,需先申請(qǐng)并獲得對(duì)該 數(shù)據(jù)的封鎖。 n第二階段:當(dāng)一個(gè)事務(wù)釋放一個(gè)之 鎖后,就不能夠請(qǐng)求其他的鎖。 9.4.3 兩段封鎖協(xié)議兩段封鎖協(xié)議 “兩段鎖兩段鎖”的含義是,事務(wù)分為兩個(gè)階段:的含義是,事務(wù)分為兩個(gè)階段: 事務(wù)事務(wù)“增長階段增長階段”:這個(gè)階
50、段事務(wù)可以獲:這個(gè)階段事務(wù)可以獲 得鎖,但不能釋放鎖。得鎖,但不能釋放鎖。 事務(wù)事務(wù)“縮減階段縮減階段”:這個(gè)階段事務(wù)可以釋:這個(gè)階段事務(wù)可以釋 放鎖,但不能獲得鎖。放鎖,但不能獲得鎖。 可以證明,若并發(fā)執(zhí)行的所有事務(wù)均遵守兩段可以證明,若并發(fā)執(zhí)行的所有事務(wù)均遵守兩段 鎖協(xié)議,則對(duì)這些事務(wù)的任何并發(fā)調(diào)度策略都鎖協(xié)議,則對(duì)這些事務(wù)的任何并發(fā)調(diào)度策略都 是可串行化的。兩階段封鎖協(xié)議實(shí)現(xiàn)了事務(wù)集是可串行化的。兩階段封鎖協(xié)議實(shí)現(xiàn)了事務(wù)集 的串行化調(diào)度。的串行化調(diào)度。 9.5 Oracle數(shù)據(jù)庫的并發(fā)控制數(shù)據(jù)庫的并發(fā)控制 并發(fā)控制是指用正確的方式實(shí)現(xiàn)事務(wù)的并發(fā)并發(fā)控制是指用正確的方式實(shí)現(xiàn)事務(wù)的并發(fā) 操作
51、,避免造成數(shù)據(jù)的不一致性,也就是事操作,避免造成數(shù)據(jù)的不一致性,也就是事 務(wù)的一致性。務(wù)的一致性。DBMS必須提供并發(fā)控制機(jī)制。必須提供并發(fā)控制機(jī)制。 并發(fā)控制機(jī)制的好壞是衡量一個(gè)并發(fā)控制機(jī)制的好壞是衡量一個(gè)DBMS性能的性能的 重要標(biāo)志之一。重要標(biāo)志之一。 9.5 Oracle數(shù)據(jù)庫的并發(fā)控制數(shù)據(jù)庫的并發(fā)控制 1. 更新遺失更新遺失 更新遺失也稱為更新丟失,是指一個(gè)事務(wù)的更新遺失也稱為更新丟失,是指一個(gè)事務(wù)的 更新覆蓋了其它事務(wù)的更新結(jié)果,也就是說更新覆蓋了其它事務(wù)的更新結(jié)果,也就是說 一個(gè)事務(wù)更新的數(shù)據(jù)尚未提交,另一個(gè)事務(wù)一個(gè)事務(wù)更新的數(shù)據(jù)尚未提交,另一個(gè)事務(wù) 又將該未提交的更新數(shù)據(jù)再次更
52、新,使得前又將該未提交的更新數(shù)據(jù)再次更新,使得前 一事務(wù)更新數(shù)據(jù)丟失。一事務(wù)更新數(shù)據(jù)丟失。 更新遺失引起的原因是由于兩個(gè)事務(wù)對(duì)同一更新遺失引起的原因是由于兩個(gè)事務(wù)對(duì)同一 數(shù)據(jù)并發(fā)的寫入,導(dǎo)致結(jié)果與串行執(zhí)行的結(jié)數(shù)據(jù)并發(fā)的寫入,導(dǎo)致結(jié)果與串行執(zhí)行的結(jié) 果不一致。果不一致。 9.5 Oracle數(shù)據(jù)庫的并發(fā)控制數(shù)據(jù)庫的并發(fā)控制 【例【例9-8】假設(shè)在交易之前庫存】假設(shè)在交易之前庫存R為為200,有兩個(gè)交易,有兩個(gè)交易 事務(wù)甲和乙在同時(shí)購買同一商品,如甲購買事務(wù)甲和乙在同時(shí)購買同一商品,如甲購買20,乙,乙 購買購買30,如果執(zhí)行次序是先甲后乙,交易完成后庫,如果執(zhí)行次序是先甲后乙,交易完成后庫 存應(yīng)
53、該是存應(yīng)該是150,這才是正確的結(jié)果。但是按表,這才是正確的結(jié)果。但是按表9-5中中 并發(fā)執(zhí)行的結(jié)果并發(fā)執(zhí)行的結(jié)果170,這個(gè)值肯定是錯(cuò)誤的,因?yàn)樵?,這個(gè)值肯定是錯(cuò)誤的,因?yàn)樵?t5時(shí)刻丟失了事務(wù)甲對(duì)數(shù)據(jù)庫的更新操作。時(shí)刻丟失了事務(wù)甲對(duì)數(shù)據(jù)庫的更新操作。 9.5 Oracle數(shù)據(jù)庫的并發(fā)控制數(shù)據(jù)庫的并發(fā)控制 2.讀讀“臟臟”數(shù)據(jù)數(shù)據(jù) 讀讀“臟臟”數(shù)據(jù)也稱讀取未提交數(shù)據(jù),是指一數(shù)據(jù)也稱讀取未提交數(shù)據(jù),是指一 個(gè)事務(wù)甲更新了某個(gè)數(shù)據(jù)個(gè)事務(wù)甲更新了某個(gè)數(shù)據(jù)R,但事務(wù)尚未提交,但事務(wù)尚未提交 ,此時(shí)另一個(gè)事務(wù)乙讀取該了數(shù)據(jù),此時(shí)另一個(gè)事務(wù)乙讀取該了數(shù)據(jù)R,但事務(wù),但事務(wù) 甲因某種原因被撤銷(甲因某種原
54、因被撤銷(ROLLBACK),修改),修改 過的數(shù)據(jù)恢復(fù)原值,則事務(wù)乙讀取到的數(shù)據(jù)過的數(shù)據(jù)恢復(fù)原值,則事務(wù)乙讀取到的數(shù)據(jù) 與數(shù)據(jù)庫中的數(shù)據(jù)不一致,為無效的數(shù)據(jù),與數(shù)據(jù)庫中的數(shù)據(jù)不一致,為無效的數(shù)據(jù), 即為即為“臟臟”數(shù)據(jù)。數(shù)據(jù)。 讀讀“臟臟”數(shù)據(jù)引起的原因是一個(gè)事務(wù)讀取了數(shù)據(jù)引起的原因是一個(gè)事務(wù)讀取了 被另一個(gè)未提交事務(wù)修改該過的數(shù)據(jù),導(dǎo)致被另一個(gè)未提交事務(wù)修改該過的數(shù)據(jù),導(dǎo)致 結(jié)果與串行執(zhí)行的結(jié)果不一致。結(jié)果與串行執(zhí)行的結(jié)果不一致。 9.5 Oracle數(shù)據(jù)庫的并發(fā)控制數(shù)據(jù)庫的并發(fā)控制 【例【例9-9】假設(shè)在交易之前】假設(shè)在交易之前t0庫存庫存R為為200,事務(wù)甲在,事務(wù)甲在 t3將庫存將庫
55、存R更新為更新為250,但是尚未提交,事務(wù)乙在,但是尚未提交,事務(wù)乙在t4讀讀 取未提交的庫存取未提交的庫存R的數(shù)據(jù)的數(shù)據(jù)250,之后由于某種原因,之后由于某種原因, 事務(wù)甲執(zhí)行事務(wù)甲執(zhí)行ROLLBACK操作,操作,R的值恢復(fù)為的值恢復(fù)為200, 而此時(shí),事務(wù)乙仍然在使用已被撤銷了的而此時(shí),事務(wù)乙仍然在使用已被撤銷了的R值值250, 這樣就讀取到了這樣就讀取到了“臟臟”數(shù)據(jù)。數(shù)據(jù)。 9.5 Oracle數(shù)據(jù)庫的并發(fā)控制數(shù)據(jù)庫的并發(fā)控制 3.不可重復(fù)讀不可重復(fù)讀 不可重復(fù)讀也稱為讀值不可復(fù)現(xiàn),是指一個(gè)不可重復(fù)讀也稱為讀值不可復(fù)現(xiàn),是指一個(gè) 事務(wù)甲讀取數(shù)據(jù)事務(wù)甲讀取數(shù)據(jù)R后,另一個(gè)事務(wù)乙執(zhí)行更新后
56、,另一個(gè)事務(wù)乙執(zhí)行更新 數(shù)據(jù)數(shù)據(jù)R的操作,事務(wù)甲再次讀取該數(shù)據(jù)的操作,事務(wù)甲再次讀取該數(shù)據(jù)R,則,則 得到的值不一樣,無法再現(xiàn)前一次讀取的結(jié)得到的值不一樣,無法再現(xiàn)前一次讀取的結(jié) 果。果。 不可重復(fù)讀引起的原因是一個(gè)事務(wù)讀取了另不可重復(fù)讀引起的原因是一個(gè)事務(wù)讀取了另 一個(gè)事務(wù)修改前后的數(shù)據(jù),使得該事務(wù)第二一個(gè)事務(wù)修改前后的數(shù)據(jù),使得該事務(wù)第二 次讀取的數(shù)據(jù)與前一次讀取的值不相同。次讀取的數(shù)據(jù)與前一次讀取的值不相同。 9.5 Oracle數(shù)據(jù)庫的并發(fā)控制數(shù)據(jù)庫的并發(fā)控制 【例【例9-10】假設(shè)在交易之前】假設(shè)在交易之前t0庫存庫存R為為200,事務(wù)甲,事務(wù)甲 在在t1讀取庫存讀取庫存R為為200
57、,事務(wù)乙在,事務(wù)乙在t2時(shí)刻讀取庫存時(shí)刻讀取庫存R并并 更新為更新為250,事務(wù)甲在,事務(wù)甲在t5時(shí)刻讀取庫存時(shí)刻讀取庫存R為為250,所以,所以 事務(wù)甲兩次讀取到的庫存事務(wù)甲兩次讀取到的庫存R不一致,出現(xiàn)了不可重復(fù)不一致,出現(xiàn)了不可重復(fù) 讀的問題。下面利用三級(jí)封鎖解決不可重復(fù)讀的問讀的問題。下面利用三級(jí)封鎖解決不可重復(fù)讀的問 題,如表題,如表9-3。 9.5.2 Oracle的鎖定的鎖定 死鎖是指同時(shí)處于等待狀態(tài)的兩個(gè)或多個(gè)事死鎖是指同時(shí)處于等待狀態(tài)的兩個(gè)或多個(gè)事 務(wù)中,每個(gè)事務(wù)都在等待其中一個(gè)事務(wù)解除務(wù)中,每個(gè)事務(wù)都在等待其中一個(gè)事務(wù)解除 封鎖他才能繼續(xù)執(zhí)行下去,從而導(dǎo)致相互等封鎖他才能繼
58、續(xù)執(zhí)行下去,從而導(dǎo)致相互等 待,結(jié)果造成任何一個(gè)事務(wù)都不能繼續(xù)執(zhí)行待,結(jié)果造成任何一個(gè)事務(wù)都不能繼續(xù)執(zhí)行 ,如果沒有相應(yīng)的處理措施,事務(wù)等待將一,如果沒有相應(yīng)的處理措施,事務(wù)等待將一 直持續(xù)下去,這種狀態(tài)稱為死鎖(直持續(xù)下去,這種狀態(tài)稱為死鎖(Dead Lock)。)。 9.5.2 Oracle的鎖定的鎖定 Oracle自動(dòng)檢測(cè)死鎖,并強(qiáng)制其中一個(gè)放棄自動(dòng)檢測(cè)死鎖,并強(qiáng)制其中一個(gè)放棄 原任務(wù),這樣就只能保證其中一個(gè)事務(wù)能夠原任務(wù),這樣就只能保證其中一個(gè)事務(wù)能夠 正常完成。正常完成。 一般來講,死鎖是不可避免的。一般來講,死鎖是不可避免的。DBMS的并發(fā)的并發(fā) 控制子系統(tǒng)一旦檢測(cè)到系統(tǒng)中存在死鎖
59、,就控制子系統(tǒng)一旦檢測(cè)到系統(tǒng)中存在死鎖,就 要設(shè)法解除。通常采用的方法是選擇一個(gè)處要設(shè)法解除。通常采用的方法是選擇一個(gè)處 理死鎖代價(jià)最小的事務(wù),將其撤消,釋放此理死鎖代價(jià)最小的事務(wù),將其撤消,釋放此 事務(wù)持有的所有的鎖,使其他事務(wù)得以繼續(xù)事務(wù)持有的所有的鎖,使其他事務(wù)得以繼續(xù) 運(yùn)行下去。當(dāng)然,對(duì)撤消的事務(wù)所執(zhí)行的數(shù)運(yùn)行下去。當(dāng)然,對(duì)撤消的事務(wù)所執(zhí)行的數(shù) 據(jù)修改操作必須加以恢復(fù)。據(jù)修改操作必須加以恢復(fù)。 9.5.2 Oracle的鎖定的鎖定 2. 鎖定轉(zhuǎn)換鎖定轉(zhuǎn)換 1)一般數(shù)據(jù)庫中的鎖定升級(jí))一般數(shù)據(jù)庫中的鎖定升級(jí) 鎖定升級(jí)是將眾多細(xì)粒度鎖轉(zhuǎn)換為較少的粗鎖定升級(jí)是將眾多細(xì)粒度鎖轉(zhuǎn)換為較少的粗 粒度的鎖的過程,以削減系統(tǒng)開銷。粒度的鎖的過程,以削減系統(tǒng)開銷。 鎖定升級(jí)的好處是將眾多細(xì)粒度鎖轉(zhuǎn)換為較鎖定升級(jí)的好處是將眾多細(xì)粒度鎖轉(zhuǎn)換為較 少的粗粒度的鎖以削減系統(tǒng)開銷的進(jìn)程,同少的粗粒度的鎖以削減系統(tǒng)開銷的進(jìn)程,同 時(shí)控制鎖的數(shù)量。但是由于一個(gè)獨(dú)占鎖在同時(shí)控制鎖的數(shù)量。但是由于一個(gè)獨(dú)占鎖在同 一時(shí)刻只能為一個(gè)事務(wù)擁有,因此鎖定升級(jí)一時(shí)刻只能為一個(gè)事務(wù)擁有,因此鎖定升級(jí) 往往以損失事務(wù)并發(fā)為代價(jià)。往往以損失事務(wù)并發(fā)為代價(jià)。 9.5.2 Oracle的鎖定的鎖定 2)Oracle中的鎖定轉(zhuǎn)換中的鎖定轉(zhuǎn)換 Oracle數(shù)據(jù)塊中不需要鎖定升級(jí)。在數(shù)據(jù)塊中不需要鎖定升級(jí)。在SQL Server
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- Syringaresinol-diglucoside-Standard-生命科學(xué)試劑-MCE
- Sulfaethoxypyridazine-Standard-生命科學(xué)試劑-MCE
- 七年級(jí)生物下冊(cè)第六章第四節(jié)激素調(diào)節(jié)課時(shí)練新版新人教版
- 2025屆新教材高考地理一輪復(fù)習(xí)第十二單元區(qū)域聯(lián)系與區(qū)域發(fā)展第二節(jié)資源跨區(qū)域調(diào)配對(duì)區(qū)域發(fā)展的影響-以我國南水北調(diào)為例學(xué)案魯教版
- 2024年二元酸二甲酯項(xiàng)目合作計(jì)劃書
- 玉溪師范學(xué)院《教師職業(yè)道德與教育政策法規(guī)》2023-2024學(xué)年第一學(xué)期期末試卷
- 玉溪師范學(xué)院《國際貨運(yùn)與保險(xiǎn)》2022-2023學(xué)年第一學(xué)期期末試卷
- 玉溪師范學(xué)院《程序設(shè)計(jì)》2023-2024學(xué)年期末試卷
- 玉溪師范學(xué)院《教育社會(huì)學(xué)》2022-2023學(xué)年第一學(xué)期期末試卷
- 2024年喹吖啶酮類合作協(xié)議書
- 學(xué)生會(huì)考核表(共3頁)
- 小蛋殼歷險(xiǎn)記.ppt
- 汽車常用英文術(shù)語
- 六年級(jí)家長會(huì)家長代表演講稿-PPT
- 學(xué)校校報(bào)校刊卷首語(創(chuàng)刊詞)
- 《電容的連接》ppt課件
- 采集運(yùn)維專業(yè)問答題(修訂)20140627
- 畢業(yè)生就業(yè)推薦表填寫說明-北京化工大學(xué)理學(xué)院.doc
- 一例重癥肺炎的個(gè)案護(hù)理.doc
- 玻璃幕墻計(jì)算書
- 《醫(yī)院重點(diǎn)病種分析》.doc
評(píng)論
0/150
提交評(píng)論