系統(tǒng)實(shí)現(xiàn)技術(shù)_第1頁
系統(tǒng)實(shí)現(xiàn)技術(shù)_第2頁
系統(tǒng)實(shí)現(xiàn)技術(shù)_第3頁
系統(tǒng)實(shí)現(xiàn)技術(shù)_第4頁
系統(tǒng)實(shí)現(xiàn)技術(shù)_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、系統(tǒng)實(shí)現(xiàn)技術(shù)數(shù)據(jù)庫技術(shù)系統(tǒng)實(shí)現(xiàn)技術(shù)DBMS對DB的監(jiān)控,稱為數(shù)據(jù)庫的管理,有時(shí)也稱為數(shù)據(jù)庫的保護(hù)。對數(shù)據(jù)庫的管理主要通過四個(gè)方面實(shí)現(xiàn):數(shù)據(jù)庫的恢復(fù)、并發(fā)控制、完整性控制和安全性控制。每一方面構(gòu)成了DBMS的一個(gè)子系統(tǒng)。1.1.1 事務(wù)的定義定義6-1 事務(wù)(transaction)是構(gòu)成單一邏輯工作單元的操作集合。DBS的主要意圖是執(zhí)行“事務(wù)”。事務(wù)是數(shù)據(jù)庫環(huán)境中一個(gè)邏輯工作單元,相當(dāng)于操作系統(tǒng)環(huán)境中的“進(jìn)程”概念。一個(gè)事務(wù)由應(yīng)用程序中的一組操作序列組成,在程序中,事務(wù)BEGIN TRANSACTION語句開始,以COMMIT語句或ROLLBACK語句結(jié)束。COMMIT語句表示事務(wù)執(zhí)行成功地結(jié)

2、束(提交) ROLLBACK語句表示事務(wù)執(zhí)行不成功地結(jié)束(應(yīng)該“回退” 1.1.2 事務(wù)的ACID性質(zhì) 1原子性(Atomicity):一個(gè)事務(wù)對數(shù)據(jù)庫的所有操作,是一個(gè)不可分割的工作單元。這些操作要么全部執(zhí)行,要么什么也不做。2一致性(Consistency):一個(gè)事務(wù)獨(dú)立執(zhí)行的結(jié)果,應(yīng)保持?jǐn)?shù)據(jù)庫的一致性,即數(shù)據(jù)不會(huì)應(yīng)事務(wù)的執(zhí)行而遭受破壞。3隔離性(Isolation):在多個(gè)事務(wù)并發(fā)執(zhí)行時(shí),系統(tǒng)應(yīng)保證與這些事務(wù)先后單獨(dú)執(zhí)行時(shí)的結(jié)果一樣,此時(shí)稱事務(wù)達(dá)到了隔離性的要求。 4持久性(Durability):一個(gè)事務(wù)一旦完成全部操作后,它對數(shù)據(jù)庫的所有更新應(yīng)永久地反映在數(shù)據(jù)庫中。 例6-1: 設(shè)銀

3、行數(shù)據(jù)庫中有一轉(zhuǎn)賬事務(wù)T,從賬號A轉(zhuǎn)一筆款子($50)到賬號B,其操作如下: T: read(A); A:=A50; write(A); read(B); B:=B + 50; write(B).(一致性)在事務(wù)T執(zhí)行結(jié)束后,要求數(shù)據(jù)庫中A的值減50,B的值增加50,也就是A與B的和不變,此時(shí)稱數(shù)據(jù)庫處于一致狀態(tài)。 (原子性)從事務(wù)的一致性可以看出,事務(wù)中所有操作應(yīng)作為一個(gè)整體,不可分割,要么全做,要么全不做。 (持久性)一旦事務(wù)成功地完成執(zhí)行,并且告知用戶轉(zhuǎn)賬已經(jīng)發(fā)生,系統(tǒng)就必須保證以后任何故障都不會(huì)再引起與這次轉(zhuǎn)賬相關(guān)的數(shù)據(jù)的丟失。(隔離性)多個(gè)事務(wù)并發(fā)執(zhí)行時(shí),相互之間應(yīng)該互不干擾。對數(shù)據(jù)

4、庫的訪問是建立在讀和寫兩個(gè)操作的基礎(chǔ)上的: read(X):把數(shù)據(jù)X,從磁盤的數(shù)據(jù)庫中讀到內(nèi)存的緩沖區(qū)中。 write(X):把數(shù)據(jù)X,從內(nèi)存緩沖區(qū)中寫回磁盤的數(shù)據(jù)庫。1.1.3 事務(wù)的狀態(tài)變遷圖活動(dòng)狀態(tài)局部提交狀態(tài)提交狀態(tài)失敗狀態(tài)異常中止?fàn)顟B(tài)read/write圖6-1 事務(wù)的狀態(tài)變遷圖1活動(dòng)狀態(tài) :在事務(wù)開始執(zhí)行后,立即進(jìn)入“活動(dòng)”狀態(tài)(active)。在活動(dòng)狀態(tài),事務(wù)將執(zhí)行對數(shù)據(jù)庫的讀/寫操作。 2局部提交狀態(tài) :事務(wù)的最后一個(gè)語句執(zhí)行之后,進(jìn)入“局部提交”狀態(tài)(partially committed)。事務(wù)是執(zhí)行完了,但是對數(shù)據(jù)庫的修改,很可能還留在內(nèi)存的系統(tǒng)緩沖區(qū)中 。3失敗狀態(tài) :

5、處于活動(dòng)狀態(tài)的事務(wù)還沒到達(dá)最后一個(gè)語句就中止執(zhí)行,此時(shí)稱事務(wù)進(jìn)入“失敗”狀態(tài)(failed)。 4異常中止?fàn)顟B(tài) :(1)事務(wù)重新啟動(dòng)。由硬件錯(cuò)誤、軟件錯(cuò)誤造成的、而不是由事務(wù)內(nèi)部邏輯造成的異常中止時(shí),可以重新啟動(dòng)事務(wù)。重新啟動(dòng)的事務(wù)是一個(gè)新的事務(wù)。 2)取消事務(wù)。如果發(fā)現(xiàn)事務(wù)的內(nèi)部邏輯有錯(cuò)誤,那么應(yīng)該取消原事務(wù),重新改寫應(yīng)用程序。5提交狀態(tài) :事務(wù)成功地結(jié)束,事務(wù)進(jìn)入“提交”狀態(tài)(committed)。 1.2 數(shù)據(jù)庫的恢復(fù)定義6-2 系統(tǒng)能把數(shù)據(jù)庫從被破壞、不正確的狀態(tài)、恢復(fù)到最近一個(gè)正確的狀態(tài),DBMS的這種能力稱為數(shù)據(jù)庫的可恢復(fù)性。 1.2.1 存儲器結(jié)構(gòu)1存儲器類型 :易失性存儲器;非

6、易失性存儲器;穩(wěn)定存儲器2穩(wěn)定存儲器的實(shí)現(xiàn) :數(shù)據(jù)備份 ;數(shù)據(jù)銀行 3數(shù)據(jù)訪問B內(nèi)存AB磁盤input(A)output(B)圖6-2 塊操作input(A)Output(B) xiX事務(wù)工作區(qū)磁盤緩沖區(qū)write(X)read(X)圖6-3 數(shù)據(jù)的read和write操作read(X)write(X) 1.2.2 恢復(fù)的基本原則和方法平時(shí)做好兩件事:轉(zhuǎn)儲和建立日志 一旦發(fā)生數(shù)據(jù)庫故障,如果數(shù)據(jù)庫已被破壞裝入最近一次拷貝的數(shù)據(jù)庫備份到新的磁盤,然后利用日志庫執(zhí)行“重做”處理 ,如果數(shù)據(jù)庫未被破壞只要通過日志庫執(zhí)行“撤消”處理 1.2.3 故障類型和恢復(fù)方法事務(wù)故障 :執(zhí)行UNDO處理 系統(tǒng)故障

7、 :對未完成事務(wù)作UNDO處理;對已提交事務(wù)但更新還留在緩沖區(qū)的事務(wù)進(jìn)行REDO處理 介質(zhì)故障 :重裝轉(zhuǎn)儲的后備副本到新的磁盤,在日志中找出轉(zhuǎn)儲以后所有已提交的事務(wù), 對這些已提交的事務(wù)進(jìn)行REDO處理1.2.4 檢查點(diǎn)技術(shù) 1. DBMS定時(shí)設(shè)置檢查點(diǎn),在檢查點(diǎn)時(shí)刻才真正做到把對DB的修改寫到磁盤,并在日志文件寫入一條檢查點(diǎn)記錄,當(dāng)DB需要恢復(fù)時(shí),只有那些在檢查點(diǎn)后面的事務(wù)需要恢復(fù)。 tc檢查點(diǎn) tf故障點(diǎn) 檢查點(diǎn) 時(shí)間t事務(wù)T1T2T3T4T5圖6-4 與檢查點(diǎn)和系統(tǒng)故障有關(guān)的事務(wù)的可能狀態(tài) 事務(wù)T1不必恢復(fù)。事務(wù)T2和事務(wù)T4必須重做(REDO)。事務(wù)T3和事務(wù)T5必須撤消(UNDO)。

8、 2檢查點(diǎn)方法的恢復(fù)算法 根據(jù)日志文件建立事務(wù)重做隊(duì)列和事務(wù)撤消隊(duì)列 對重做隊(duì)列中的事務(wù)進(jìn)行REDO處理,對撤消隊(duì)列中的事務(wù)進(jìn)行UNDO處理 3運(yùn)行記錄優(yōu)先原則 至少要等相應(yīng)運(yùn)行記錄已經(jīng)寫入運(yùn)行日志后,才能允許事務(wù)往數(shù)據(jù)庫中寫記錄; 直至事務(wù)的所有運(yùn)行記錄都已經(jīng)寫入到運(yùn)行日志后,才能允許事務(wù)完成COMMIT 處理。1.3 數(shù)據(jù)庫的并發(fā)控制1.3.1并發(fā)操作帶來的三個(gè)問題 1.丟失更新問題 圖6-5 在時(shí)間t7丟失了事務(wù)T1的更新(FIND表示從DB中讀值,UPD表示把值寫回到DB)時(shí)間更新事務(wù)T1數(shù)據(jù)庫中A的值更新事務(wù)T2t0100t1FIND At2FIND At3A:=A-30t4A:=A

9、*2t5UPD At670UPD At72002 .依賴于未提交更新的問題時(shí)間更新事務(wù)T1數(shù)據(jù)庫中A的值讀事務(wù)T2t0100t1FIND At2A:=A-30t3UPD At470FIND At5*ROLLBACK*t6100圖6-6 事務(wù)T2在時(shí)間t4讀了未提交的A值(70)時(shí)間更新事務(wù)T1數(shù)據(jù)庫中A的值更新事務(wù)T2t0100t1FIND At2A:=A-30t3UPD At470FIND At5A:=A*2t6UPD At7140t8*ROLLBACK*t9100圖6-7 事務(wù)T2在時(shí)間t4讀了未提交的A值,并在時(shí)間t8丟失了自己的更新時(shí)間讀事務(wù)T1數(shù)據(jù)庫中A、B、C的值更新事務(wù)T2t04

10、0,50,30t1FIND At2SUM:=At3FIND Bt4SUM:=SUM+Bt5FIND Ct6C:=C-10t7UPD Ct840,50,20FIND At9A:=A+10t10UPD At1150,50,20COMMITt12FIND Ct13SUM:=SUM+C圖6-8 事務(wù)T1進(jìn)行了不一致的分析(在時(shí)間t13求得SUM=110,而不是120)3不一致分析問題1.3.2 封鎖技術(shù)排他型封鎖(X鎖) :如果事務(wù)T對某個(gè)數(shù)據(jù)(可以是數(shù)據(jù)項(xiàng)、記錄、數(shù)據(jù)集乃至整個(gè)數(shù)據(jù)庫)實(shí)現(xiàn)X鎖,那么其他事務(wù)T要等T解除X鎖以后,才能對這個(gè)數(shù)據(jù)進(jìn)行封鎖 PX協(xié)議 :任何企圖更新記錄R的事務(wù)必須先執(zhí)行“

11、XFIND R”操作,以獲得對R的X鎖,才能讀或?qū)懹涗汻;如果未獲準(zhǔn)X鎖,那么這個(gè)事務(wù)進(jìn)入等待狀態(tài)。一直到獲準(zhǔn)X鎖,事務(wù)才能繼續(xù)做下去。PXC協(xié)議 :X鎖的解除操作應(yīng)該合并到事務(wù)的結(jié)束(COMMIT或ROLLBACK)操作中 例6-6 時(shí)間更新事務(wù)T1數(shù)據(jù)庫中A的值更新事務(wù)T2t0100t1XFIND At2XFIND A(失?。﹚ait(等待)t3A:=A-30waitt4waitt5UPD Awaitt670waitt7COMMIT(包括解鎖)waitt8XFIND A(重做)t9A:=A*2t10UPD At11140COMMIT(包括解鎖)圖6-9 等事務(wù)T1更新完成后再執(zhí)行事務(wù)T2共

12、享型封鎖(S鎖):如果事務(wù)T對某數(shù)據(jù)加上S鎖后,仍允許其他事務(wù)再對該數(shù)據(jù)加S鎖,但在對該數(shù)據(jù)的所有S鎖都解除之前決不允許任何事務(wù)對該數(shù)據(jù)加X鎖。 PS協(xié)議 :任何要更新記錄R的事務(wù)必須先執(zhí)行“SFIND R”操作,以獲得對R的S鎖。當(dāng)事務(wù)獲準(zhǔn)對R的S鎖后,若要更新記錄R必須用“UPDX R”操作 PSC協(xié)議 :S鎖的解除操作應(yīng)該合并到事務(wù)的結(jié)束 例6-7 時(shí)間更新事務(wù)T1數(shù)據(jù)庫中A的值更新事務(wù)T2t0100t1SFIND At2SFIND At3A:=A-30t4A:=A*2t5UPDX A(失?。﹖6waitUPDX A(失?。﹖7waitWaitt8waitWait圖6-10 更新未丟失,

13、但在時(shí)間t6發(fā)生了死鎖*封鎖的相容矩陣 注: N=NO,不相容的請求Y=YES,相容的請求 X、S、:分別表示X鎖,S鎖,無鎖 如果兩個(gè)封鎖是不相容的,則后提出封鎖的事務(wù)要等待。T2T1X S XS N N Y N Y Y Y Y Y圖6-11 封鎖類型的相容矩陣封鎖的粒度 :封鎖對象的大小稱為封鎖的粒度 封鎖的粒度越大,系統(tǒng)中能夠被封鎖的對象就越少,并發(fā)度也就越小,但同時(shí)系統(tǒng)的開銷也就越?。幌喾?,封鎖的粒度越小,并發(fā)度越高,但系統(tǒng)開銷也就越大 1.3.3 封鎖帶來的問題“活鎖”問題 :系統(tǒng)可能使某個(gè)事務(wù)永遠(yuǎn)處于等待狀態(tài),得不到封鎖的機(jī)會(huì) 解決活鎖問題的一種簡單的方法是采用“先來先服務(wù)”的策略

14、,也就是簡單的排隊(duì)方式 “餓死”問題 :有可能存在一個(gè)事務(wù)序列,其中每個(gè)事務(wù)都申請對某數(shù)據(jù)項(xiàng)加S鎖,且每個(gè)事務(wù)在授權(quán)加鎖后一小段時(shí)內(nèi)釋放封鎖,此時(shí)若另有一個(gè)事務(wù)T1欲在該數(shù)據(jù)項(xiàng)上加X鎖,則將永遠(yuǎn)輪不上封鎖的機(jī)會(huì) 避免事務(wù)餓死的方法是當(dāng)事務(wù)T2中請對數(shù)據(jù)項(xiàng)Q加S鎖時(shí),授權(quán)加鎖的條件是: 不存在在數(shù)據(jù)項(xiàng)Q上持有X鎖的其他事務(wù); 不存在等待對數(shù)據(jù)項(xiàng)Q加鎖且先于T2申請加鎖的事務(wù)?!八梨i”問題 :系統(tǒng)中有兩個(gè)或兩個(gè)以上的事務(wù)都處于等待狀態(tài),并且每個(gè)事務(wù)都在等待其中另一個(gè)事務(wù)解除封鎖,它才能繼續(xù)執(zhí)行下去,結(jié)果造成任何一個(gè)事務(wù)都無法繼續(xù)執(zhí)行,這種現(xiàn)象稱系統(tǒng)進(jìn)入了“死鎖” 狀態(tài) DBMS中有一個(gè)死鎖測試程序

15、,每隔一段時(shí)間檢查并發(fā)的事務(wù)之間是否發(fā)生死鎖。如果發(fā)生死鎖,那么只能抽取某個(gè)事務(wù)作為犧牲品,把它撤消,做回退操作,解除它的所有封鎖,恢復(fù)到該事務(wù)的初始狀態(tài)。釋放出來的資源就可以分配給其他事務(wù),使其他事務(wù)有可能繼續(xù)運(yùn)行下去,就有可能消除死鎖現(xiàn)象時(shí)間事務(wù)T1事務(wù)T2t0XFIND At1XFIND Bt2XFIND Bt3waitXFIND At4waitwait圖6-12 在時(shí)間t4兩個(gè)事務(wù)發(fā)生死鎖例6-8 1.3.4 并發(fā)操作的調(diào)度事務(wù)的調(diào)度、串行調(diào)度和并發(fā)調(diào)度 :事務(wù)的執(zhí)行次序稱 為“調(diào)度”。如果多個(gè)事務(wù)依次執(zhí)行,則稱為事務(wù)的串行調(diào)度,如果利用分時(shí)的方法,同時(shí)處理多個(gè)事務(wù),則稱為事務(wù)的并發(fā)調(diào)

16、度可串行化概念 :每個(gè)事務(wù)中,語句的先后順序在各種調(diào)度中始終保持一致。在這個(gè)前提下,如果一個(gè)并發(fā)調(diào)度的執(zhí)行結(jié)果與某一串行調(diào)度的執(zhí)行結(jié)果等價(jià),那么這個(gè)并發(fā)調(diào)度稱為“可串行化的調(diào)度”,否則是不可串行化的調(diào)度 兩段封鎖協(xié)議: 在對任何一個(gè)數(shù)據(jù)進(jìn)行讀寫操作之前,事務(wù)必須獲得對該數(shù)據(jù)的封鎖; 在釋放一個(gè)封鎖之后,事務(wù)不再獲得任何其他封鎖 如果所有的事務(wù)都遵守“兩段封鎖協(xié)議”,則所有可能的并發(fā)調(diào)度都是可串行化的 1.3.5 SQL中事務(wù)的存取模式和隔離級別事務(wù)的存取模式 :READ ONLY(只讀型);READ WRITE(讀寫型) SET TRANSACTION READ ONLY SET TRANSA

17、CTION READ WRITE 事務(wù)的隔離級別 SERIALIZABLE(可串行化) SET TRANSACTION ISOLATION LEVEL SERIALIZABLE REPEATABLE READ(可重復(fù)讀) SET TRANSACTION ISOLATION LEVEL REPEATABLE READ READ COMMITTED(讀提交數(shù)據(jù)) SET TRANSACTION ISOLATION LEVEL READ COMMITTED READ UNCOMMITTED(可以讀未提交數(shù)據(jù)) SET TRANSACTION ISOLATION LEVEL READ UNCOMMIT

18、TED 1.4 數(shù)據(jù)庫的完整性 1.4.1 完整性子系統(tǒng)和完整性規(guī)則完整性規(guī)則集: 什么時(shí)候使用規(guī)則進(jìn)行檢查 要檢查什么樣的錯(cuò)誤 如果查出錯(cuò)誤,應(yīng)該怎么辦“完整性子系統(tǒng)”: 監(jiān)督事務(wù)的執(zhí)行,并測試是否違反完整性規(guī)則 若有違反現(xiàn)象,則采取恰當(dāng)?shù)牟僮?1.4.2 SQL中的完整性約束域約束 :SQL可以用“CREATE DOMAIN”語句定義新的域,并且還可出現(xiàn)CHECK子句 基本表約束 :候選鍵定義、外鍵定義和“檢查約束”定義 斷言 CHECK ASSERTION CHECK() DROP ASSERTION 1.4.3 SQL3的觸發(fā)器觸發(fā)器結(jié)構(gòu): 事件 條件 動(dòng)作 觸發(fā)器的命名動(dòng)作時(shí)間觸發(fā)事件目標(biāo)表名舊值和新值的別名表動(dòng)作間隔尺寸觸發(fā)動(dòng)作動(dòng)作時(shí)間條件動(dòng)作體CREATE TRIGGER TRIG1觸發(fā)器的名字為TRIG1AFTER UPDATE OF GRADE ON SC給出觸發(fā)事件REFERENCINGOLD AS OLDTUPLENEW AS NEWTUPLE設(shè)置元組變量FOR EACH ROW動(dòng)作間隔尺寸WHEN (OLDTUPLE.GRADE NEWTUPLE.GRADE)觸發(fā)器的條件部分UPDATE SCSET GRADE = OLDTUPLE.GRADEWHERE CNO = NEWTUPLE.CNO觸發(fā)器的動(dòng)作部分 l 例 6-1

溫馨提示

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

評論

0/150

提交評論