C#事務(wù)的方法詳細(xì)_第1頁
C#事務(wù)的方法詳細(xì)_第2頁
C#事務(wù)的方法詳細(xì)_第3頁
C#事務(wù)的方法詳細(xì)_第4頁
C#事務(wù)的方法詳細(xì)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)專心-專注-專業(yè)精選優(yōu)質(zhì)文檔-傾情為你奉上專心-專注-專業(yè)1第十八講事務(wù)管理2學(xué)完本講后,你應(yīng)該能夠了解:1. 事務(wù)是數(shù)據(jù)庫操作的原子單位,具有原子性、一致性、隔離性和持久性等特性;2. 事務(wù)的并發(fā)導(dǎo)致的四種不一致性:丟失修改(Lost Update)、不可重復(fù)讀(Non-Repeatable Read)、讀“臟”數(shù)據(jù)(Dirty Read)和幻像(Phantom).并發(fā)控制的正確性準(zhǔn)則是事務(wù)并發(fā)執(zhí)行的可串行化3. 兩段鎖協(xié)議的工作原理;4. ANSI SQL-92支持的四種隔離級別5. 數(shù)據(jù)庫恢復(fù)的目標(biāo)是在故障發(fā)生時(shí),確保事

2、務(wù)的原子性和持久性;6. DBMS提供備份機(jī)制、日志機(jī)制、檢查點(diǎn)機(jī)制來協(xié)助數(shù)據(jù)庫故障恢復(fù);7. 事務(wù)編程時(shí),應(yīng)盡量避免事務(wù)中的用戶交互.本 講 主 要 目 標(biāo)3一事務(wù)的定義與特性二事務(wù)并發(fā)導(dǎo)致的四種不一致性三兩段鎖協(xié)議四隔離級別五數(shù)據(jù)庫恢復(fù)的目標(biāo)六. 數(shù)據(jù)庫恢復(fù)的技術(shù)七. 事務(wù)編程4事務(wù)的定義與特性5事務(wù)的定義與特性1. 多用戶同時(shí)操作同一張表導(dǎo)致的問題假定兩個(gè)顧客使用主副信用卡分別幾乎同時(shí)刻在兩臺ATM上取款;有可能兩人各取出500元,而帳戶上只減少500元。導(dǎo)致此種情形出現(xiàn)的原因是什么?SQL的原子操作單位與操作系統(tǒng)的原子操作單位不同?6事務(wù)的定義與特性2. 數(shù)據(jù)的不一致性假定數(shù)據(jù)庫系統(tǒng)自

3、動檢測參照完整性約束,有下面操作:操作一:刪除學(xué)號為“95002”的學(xué)生的信息;操作二:插入選課信息(“95005”,“C8”,85);操作三:修改學(xué)號“95001”的學(xué)生的學(xué)號為“95008”;這些操作如何實(shí)現(xiàn)?這些操作一定能用SQL實(shí)現(xiàn)嗎?7事務(wù)的定義與特性學(xué)號S#姓名SN性別SE年齡SA所在系SD95001 李勇 男 20 CS95002 劉晨 女 19 IS95003 王敏 女 18 MA95004 張立 男 19 IS課程號C#課程名CN先行課CP#學(xué)分CCC1 數(shù)據(jù)庫 C5 4C2 數(shù)學(xué) 2C3 信息系統(tǒng) C1 4C4 操作系統(tǒng) C6 3C5 數(shù)據(jù)結(jié)構(gòu) C7 4C6 數(shù)據(jù)處理 2C

4、7 PASCAL語言 C6 4學(xué)號S#課程號C#成績G95001 C1 9295001 C2 8595001 C3 8895002 C2 9095002 C3 80SCSC8事務(wù)的定義與特性解決方法一:DELETEFROM SWHERE S# = 95002;DELETEFROM SCWHERE S# = 95002;兩個(gè)SQL刪除命令的順序不合適會破壞參照完整性WHERE 2. 數(shù)據(jù)的不一致性操作一:刪除學(xué)號為“95002”的學(xué)生的信息;解決方法二:DELETEFROM SCWHERE S# = 95002 ;DELETEFROM SS# = 95002 ;破壞參照完整性9事務(wù)的定義與特性2

5、. 數(shù)據(jù)的不一致性操作二:插入選課信息(“95005”,“C8”,85);INSERT INTO SVALUES(95005,null,null,null,null);INSERT INTO CVALUES(C8,null,null);INSERT INTO SCVALUES(95005,C8,85);三個(gè)SQL插入命令的順序不合適會破壞參照完整性10事務(wù)的定義與特性2. 數(shù)據(jù)的不一致性操作三:修改學(xué)號“95001”的學(xué)生的學(xué)號為“95008”;UPDATE SSET S# = 95008WHERE S# = 95001;UPDATE SCSET S# = 95008WHERE S# = 95

6、001;UPDATE SCSET S# = 95008WHERE S# = 95001;UPDATE SSET S# = 95008WHERE S# = 95001;破壞參照完整性破壞參照完整性11事務(wù)的定義與特性2. 數(shù)據(jù)的不一致性為何出現(xiàn)該問題? 參照完整性的檢測時(shí)機(jī)是在關(guān)系數(shù)據(jù)庫的原子操作之前或之后 一個(gè)SQL語句是關(guān)系數(shù)據(jù)庫的原子操作;如何解決該問題?修改原子操作的定義 可以將多個(gè)SQL語句定義為一個(gè)原子操作 事務(wù)12事務(wù)的定義與特性3. 事務(wù)的定義事務(wù)是用戶定義的一個(gè)數(shù)據(jù)庫操作序列,這些操作要么全做要么全不做,是一個(gè)不可分割的工作單位。13事務(wù)的定義與特性4. 事務(wù)的特性 ACID特

7、性 原子性(Atomicity)事務(wù)包含的一組更新操作是原子不可分的,即更新操作對于數(shù)據(jù)庫而言,要么全做,要么全不做,不能部分地完成 一致性(Consistency)當(dāng)數(shù)據(jù)庫只包含成功事務(wù)提交的結(jié)果時(shí),就說數(shù)據(jù)庫處于一致性狀態(tài)14事務(wù)的定義與特性4. 事務(wù)的特性 ACID特性 隔離性(Isolation)系統(tǒng)允許的任何交錯(cuò)操作調(diào)度等價(jià)于某一個(gè)串行調(diào)度,即可串行性 持久性(Durability)當(dāng)事務(wù)發(fā)出提交語句后系統(tǒng)返回到程序邏輯時(shí),必須保證該事務(wù)是可恢復(fù)的15事務(wù)的定義與特性4. 事務(wù)的特性 ACID特性破壞事務(wù)ACID特性的因素有:(1)多個(gè)事務(wù)的并行運(yùn)行(2)事務(wù)的運(yùn)行過程中被強(qiáng)行停止并

8、發(fā)控制故障恢復(fù)16事務(wù)的定義與特性5. 在程序中定義事務(wù)BEGIN TRANSACTIONEXEC SQL COMMITEXEC SQL ROLLBACK17事務(wù)并發(fā)導(dǎo)致的不一致性18事務(wù)并發(fā)導(dǎo)致的不一致性1. 事務(wù)隔離性為了有效地利用系統(tǒng)資源,即使是在集中式數(shù)據(jù)庫系統(tǒng)中,多個(gè)事務(wù)也進(jìn)行并發(fā)(concurrency)。由于操作系統(tǒng)的原子操作單位進(jìn)程,與數(shù)據(jù)庫系統(tǒng)的原子操作單位 事務(wù)不同,DBMS需要對事務(wù)進(jìn)行并發(fā)控制,以保證數(shù)據(jù)庫中數(shù)據(jù)的一致性。19事務(wù)并發(fā)導(dǎo)致的不一致性DBMSDBT1 T2 T3存取數(shù)據(jù)庫順序并發(fā)控制的目標(biāo)是什么?事務(wù)的并發(fā)操作何時(shí)會破壞事務(wù)的隔離性?會出現(xiàn)哪些不一致性?保

9、證事務(wù)的隔離性,從而保證數(shù)據(jù)庫的一致性事務(wù)操作相同的數(shù)據(jù)并且這些操作是沖突的20X=25Write X事務(wù)并發(fā)導(dǎo)致的不一致性2. 事務(wù)并發(fā)導(dǎo)致的不一致性例:兩個(gè)事務(wù)T1和T2讀入同一數(shù)據(jù)并修改丟失修改T2T1Time X=10Read X (10)Read X (10)Compute X+=10(20)Compute X+=15(25)Write XX=20 X=2521事務(wù)并發(fā)導(dǎo)致的不一致性2. 事務(wù)并發(fā)導(dǎo)致的不一致性例:事務(wù)T2讀取數(shù)據(jù)X后,事務(wù)T1更新該數(shù)據(jù)X,T2再讀X時(shí),得到的結(jié)果不同不可重復(fù)讀T2T1TimeRead X (10)Read X (10)Compute X+=15(2

10、5)X=25Write XCommitRead X (25)X=1022事務(wù)并發(fā)導(dǎo)致的不一致性2. 事務(wù)并發(fā)導(dǎo)致的不一致性例:事務(wù)T1修改數(shù)據(jù)X,事務(wù)T2讀取X后,T1被撤消,并將X恢復(fù)原值,T2讀到的值與數(shù)據(jù)庫不一致讀“臟”數(shù)據(jù)T1T2Time X=10Read X (25)Read X (10)ComputeX+=15(25)X=25Write XX=10RollbackUse value ofX that was nevercommitted to DB23事務(wù)并發(fā)導(dǎo)致的不一致性2. 事務(wù)并發(fā)導(dǎo)致的不一致性例:事務(wù)T1按一定條件讀數(shù)據(jù)庫后,事務(wù)T2刪除或插入了某些記錄,當(dāng)事務(wù)T1再次按相

11、同條件讀數(shù)據(jù)庫時(shí),發(fā)現(xiàn)某些記錄神秘消失或出現(xiàn),幻像T2T1TimeSelect count (*) where rank 32 rows returnedInsertJones,6Smith,4Brewer,7Jones,6Smith,4Brewer,7Select count (*) where rank 33 rows returned24事務(wù)并發(fā)導(dǎo)致的不一致性2. 事務(wù)并發(fā)導(dǎo)致的不一致性 丟失修改(Lost Update) 不可重復(fù)讀(Non-Repeatable Read) 讀“臟”數(shù)據(jù)(Dirty Read) 幻像(Phantom)25事務(wù)并發(fā)導(dǎo)致的不一致性3. 出現(xiàn)不一致性的原因不

12、同事務(wù)間沖突操作的無序執(zhí)行。如何控制沖突操作的無序?26事務(wù)并發(fā)導(dǎo)致的不一致性4. 并發(fā)控制的方法DBMSDBT1 T2 T3存取數(shù)據(jù)庫順序兩種途徑:對共享的資源DB進(jìn)行控制- 加鎖對事務(wù)規(guī)定一定的順序- 時(shí)間戳27兩段鎖協(xié)議28兩段鎖協(xié)議1. 封鎖的定義所謂封鎖就是事務(wù)T在對某個(gè)數(shù)據(jù)對象例如表、記錄等操作之前,先向系統(tǒng)發(fā)出請求,對其加鎖。加鎖后事務(wù)T就對該數(shù)據(jù)對象有了一定的控制,在事務(wù)T釋放它的鎖之前,其他事務(wù)對該數(shù)據(jù)的操作受到一定限制。29兩段鎖協(xié)議2. 封鎖機(jī)制 基本的封鎖類型 排它鎖(Exclusive Locks,簡稱X鎖,也稱寫鎖) 共享鎖(Share Locks,簡稱S鎖,也稱讀

13、鎖)封鎖類型的相容矩陣:T1 T2 X SX N N YS N Y YYYYN=No,不相容Y=Yes,相容30兩段鎖協(xié)議3. 并發(fā)事務(wù)的正確性準(zhǔn)則并發(fā)事務(wù)正確性準(zhǔn)則 - 多個(gè)事務(wù)的并發(fā)執(zhí)行是正確的,當(dāng)且僅當(dāng)其結(jié)果與某一次序串行地執(zhí)行它們時(shí)的結(jié)果相同,我們稱這種調(diào)度策略為可串行化的調(diào)度。例如,現(xiàn)在有兩個(gè)事務(wù)T1和T2:事務(wù)T1 :讀B;A=B+1;寫回A;事務(wù)T2 :讀A;B=A+1;寫回B;假定A,B的初值均為2,則按T1T2次序執(zhí)行結(jié)果為A=3,B=4;按T2T1次序執(zhí)行結(jié)果為A=4,B=3;31兩段鎖協(xié)議什么樣的方法能保證調(diào)度的可串行化?兩段鎖協(xié)議32兩段鎖協(xié)議4. 兩段鎖協(xié)議所謂兩段鎖

14、協(xié)議是指所有事務(wù)必須分兩個(gè)階段對數(shù)據(jù)項(xiàng)加鎖和解鎖。 在對任何數(shù)據(jù)進(jìn)行讀、寫操作之前,首先要申請并獲得對該數(shù)據(jù)的封鎖; 在釋放一個(gè)封鎖之后,事務(wù)不再申請和獲得任何其他封鎖?!皟啥巍?- 獲得(擴(kuò)展)階段和釋放(收縮)階段33兩段鎖協(xié)議4. 兩段鎖協(xié)議兩段鎖協(xié)議是可串行化的充分條件,而不是必要條件34兩段鎖協(xié)議5. 活鎖如果事務(wù)T1封鎖了數(shù)據(jù)R,事務(wù)T2又申請封鎖R,于是T2等待。T3也請求封鎖R,當(dāng)T1釋放了R上的封鎖之后系統(tǒng)首先批準(zhǔn)了T3的請求,T2仍然等待。然后T4又申請封鎖R,當(dāng)T3釋放了R上的封鎖之后系統(tǒng)又批準(zhǔn)了T4 的請求T2有可能永遠(yuǎn)等待。如何解決活鎖?先來先服務(wù)35兩段鎖協(xié)議6.

15、死鎖 死鎖的定義如果事務(wù)T1封鎖了數(shù)據(jù)R1,事務(wù)T2封鎖了R2,然后,T1請求封鎖R2,等待。接著T2請求封鎖R1,等待。這樣就出現(xiàn)了T1等待T2,而T2又在等待T1的局面。這兩個(gè)事務(wù)永遠(yuǎn)不能結(jié)束,形成死鎖。如何解決死鎖?預(yù)防診斷與解除36兩段鎖協(xié)議6. 死鎖 死鎖的診斷與解除診斷: 超時(shí)法- 超過規(guī)定的時(shí)間就認(rèn)為發(fā)生死鎖不足:可能誤判死鎖,也可能不能及時(shí)發(fā)現(xiàn)死鎖 等待圖法- 事務(wù)為結(jié)點(diǎn),邊表示事務(wù)等待的情況,若T1等待T2,則T1T2。系統(tǒng)周期性地檢測事務(wù)等待圖,若圖中存在回路,則出現(xiàn)死鎖。解除:選擇一個(gè)處理死鎖代價(jià)最小的事務(wù),撤消。37隔離級別38隔離級別1. 隔離級別SQL-92 定義了

16、下列四種隔離級別(SQL Server支持所有這些隔離級別): 未提交讀(事務(wù)隔離的最低級別,僅可保證不讀取物理損壞的數(shù)據(jù)) 提交讀(SQL Server 默認(rèn)級別) 可重復(fù)讀 可串行讀(事務(wù)隔離的最高級別,事務(wù)之間完全隔離)。39隔離級別2. 隔離級別允許不同類型的行為隔離級別 臟讀 不可重復(fù)讀取 幻像未提交讀 是 是 是提交讀 否 是 是可重復(fù)讀 否 否 是可串行讀 否 否 否40隔離級別3. SQL Server設(shè)置隔離級別SET TRANSACTION ISOLATION LEVEL語法:SET TRANSACTION ISOLATION LEVEL READ COMMITTED| R

17、EAD UNCOMMITTED| REPEATABLE READ| SERIALIZABLE41數(shù)據(jù)庫恢復(fù)的目標(biāo)42數(shù)據(jù)庫恢復(fù)的目標(biāo)1. 數(shù)據(jù)庫恢復(fù)的目標(biāo)- 把數(shù)據(jù)庫從錯(cuò)誤狀態(tài)恢復(fù)到某一個(gè)已知的正確狀態(tài)(亦稱為一致狀態(tài)或完整狀態(tài))的功能。何時(shí)需要對數(shù)據(jù)庫進(jìn)行恢復(fù)?故障數(shù)據(jù)庫恢復(fù)有何特點(diǎn)?43數(shù)據(jù)庫恢復(fù)的目標(biāo)2. 數(shù)據(jù)庫恢復(fù)的特點(diǎn)DBMSDB應(yīng)用程序 應(yīng)用程序OS緩沖區(qū)因?yàn)镈B與內(nèi)存用戶工作區(qū)之間的數(shù)據(jù)交換是通過緩沖區(qū)進(jìn)行的,而這個(gè)交換一般是以緩沖區(qū)是否滿來觸發(fā)的。因此,有可能提交事務(wù)的數(shù)據(jù)仍在緩沖區(qū)而沒有寫到DB中,而未提交事務(wù)的數(shù)據(jù)卻寫到了DB中。所以,故障恢復(fù)時(shí),可能既要REDO已經(jīng)提交了

18、的事務(wù),又要UNDO未提交的事務(wù),以保證事務(wù)的原子性44數(shù)據(jù)庫恢復(fù)的技術(shù)45數(shù)據(jù)庫恢復(fù)的技術(shù)1. 數(shù)據(jù)庫恢復(fù)的基本原理冗余如何建立冗余數(shù)據(jù)?如何利用這些冗余數(shù)據(jù)實(shí)施數(shù)據(jù)庫恢復(fù)?恢復(fù)的實(shí)現(xiàn)技術(shù) 恢復(fù)的實(shí)現(xiàn)策略46數(shù)據(jù)庫恢復(fù)的技術(shù)2. 建立冗余數(shù)據(jù)最常用的技術(shù) 數(shù)據(jù)轉(zhuǎn)儲- 即DBA定期地將整個(gè)數(shù)據(jù)庫復(fù)制到磁帶或另一個(gè)磁盤上保存起來的過程。這些備用的數(shù)據(jù)文本稱為后備副本或后援副本。 登記日志文件- 是用來記錄事務(wù)對數(shù)據(jù)庫的更新操作的文件。47數(shù)據(jù)庫恢復(fù)的技術(shù)3. 登記日志文件 內(nèi)容 各個(gè)事務(wù)的開始標(biāo)志(BEGIN TRANSACTION) 各個(gè)事務(wù)的結(jié)束標(biāo)志(COMMIT 或 ROLLBACK) 各

19、個(gè)事務(wù)的所有更新操作 格式事務(wù)標(biāo)識 操作類型 操作對象 舊值 新值T1 BEGINT2 INSERT X NULL 2T1 UPDATE Y 5 7T1 DELETE Z abc NULLT1 COMMIT48數(shù)據(jù)庫恢復(fù)的技術(shù)4. 系統(tǒng)故障的恢復(fù)實(shí)現(xiàn)策略 系統(tǒng)故障導(dǎo)致的數(shù)據(jù)庫不一致(1)未完成的事務(wù)對DB產(chǎn)生影響(2)已完成的事務(wù)在緩沖區(qū)的內(nèi)容未寫入DB 恢復(fù)功能(1)UNDO未完成的事務(wù)(2)REDO已完成的事務(wù) 恢復(fù)步驟(1)正向掃描日志文件,建立UNDO和REDO隊(duì)列;(2)反向掃描日志文件,對每個(gè)UNDO事務(wù)的更新執(zhí)行逆操作;(3)正向掃描日志文件,對每個(gè)REDO事務(wù)的更新重新執(zhí)行。需要REDO日志中所有已完成的事務(wù)嗎?是否一部分故障發(fā)生點(diǎn)前很久的事務(wù)不需要REDO?如何確定這些事務(wù)?由此引入了檢查點(diǎn)恢復(fù)技術(shù)49數(shù)據(jù)庫恢復(fù)的技術(shù)5. 檢查點(diǎn)技術(shù)檢查點(diǎn)(checkpoint)是使物理數(shù)據(jù)文件與數(shù)據(jù)庫高速緩存當(dāng)前狀態(tài)同步的一種操作,方法是將所有高速緩存中的被修改的數(shù)據(jù)頁寫回到磁盤,這確保了對數(shù)據(jù)的一份永久拷貝(在磁盤上)。檢查點(diǎn)將最小化必須REDO的事務(wù)數(shù)量。50事務(wù)編程51事務(wù)編程

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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

提交評論