版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、第八章第八章 系統(tǒng)實現(xiàn)技術(shù)系統(tǒng)實現(xiàn)技術(shù) 事務(wù)和鎖事務(wù)和鎖 本章重要概念本章重要概念 (1)事務(wù)的定義,COMMIT和ROLLBACK的語義,事務(wù)的 ACID性質(zhì),事務(wù)的狀態(tài)變遷圖。 (2)存儲器類型,穩(wěn)定存儲器的實現(xiàn),數(shù)據(jù)傳送過程。 (3)恢復(fù)的定義、基本原則和實現(xiàn)方法,故障的類型,檢查 點技術(shù),REDO和UNDO操作,運行記錄優(yōu)先原則。 (4)并發(fā)操作帶來的三個問題,X鎖、S鎖、使用X鎖和S鎖 的操作,封鎖協(xié)議,活鎖、餓死和死鎖,并發(fā)調(diào)度、串行調(diào) 度、并發(fā)調(diào)度的可串行化,SQL中事務(wù)的存取模式和隔離級 別,基于時標(biāo)的并發(fā)控制。 第第8章章 系統(tǒng)實現(xiàn)技術(shù)系統(tǒng)實現(xiàn)技術(shù) 8.1 事務(wù) 8.2 數(shù)據(jù)
2、庫的恢復(fù) 8.3 數(shù)據(jù)庫的并發(fā)控制 8.1 8.1 事務(wù)事務(wù) 8.1.1 事務(wù)的定義 8.1.2 事務(wù)的ACID性質(zhì) 為什么需要事務(wù)為什么需要事務(wù)8.1-18.1-1 例如,銀行轉(zhuǎn)帳問題:例如,銀行轉(zhuǎn)帳問題: 假定資金從帳戶假定資金從帳戶A A轉(zhuǎn)到帳戶轉(zhuǎn)到帳戶B B,至少需要兩步:,至少需要兩步: 帳戶帳戶A A的資金減少的資金減少 然后帳戶然后帳戶B B的資金相應(yīng)增加的資金相應(yīng)增加 帳戶帳戶A帳戶帳戶B 為什么需要事務(wù)為什么需要事務(wù)8.1-28.1-2 CREATE TABLE bank ( customerName CHAR(10), -顧客姓名 currentMoney MONEY -當(dāng)
3、前余額 ) GO ALTER TABLE bank ADD CONSTRAINT CK_currentMoney CHECK(currentMoney=1) GO INSERT INTO bank(customerName,currentMoney) VALUES(張三,1000) INSERT INTO bank(customerName,currentMoney) VALUES(李四,1) 創(chuàng)建帳戶表,存放用戶的帳戶信息 添加約束:根據(jù)銀行規(guī)定,帳戶 余額不能少于1元,否則視為銷戶 張三開戶,開戶金額為1000元 ;李四開戶,開戶金額1元 為什么需要事務(wù)為什么需要事務(wù)8.1-38.1-3
4、目前兩個帳戶的余額總和為:目前兩個帳戶的余額總和為:1000+1=1001元元 為什么需要事務(wù)為什么需要事務(wù)8.1-48.1-4 模擬實現(xiàn)轉(zhuǎn)帳 : 從張三的帳戶轉(zhuǎn)帳從張三的帳戶轉(zhuǎn)帳1000元到李四的帳戶元到李四的帳戶 /*-轉(zhuǎn)帳測試:張三轉(zhuǎn)賬1000元給李四-*/ -我們可能會這樣這樣編寫語句 -張三的帳戶少1000元,李四的帳戶多1000元 UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=張三 UPDATE bank SET currentMoney=currentMoney+1000 WHERE custo
5、merName=李四 GO -再次查看轉(zhuǎn)帳后的結(jié)果。 SELECT * FROM bank GO 請問: 執(zhí)行轉(zhuǎn)帳語句后,張三、李四的 帳戶余額為多少? l張三的帳戶沒有減少 l但李四的帳戶卻多了1000元 l100010012001元 總額多出了1000元! 為什么需要事務(wù)為什么需要事務(wù)8.1-58.1-5 -張三的帳戶減少1000元,李四的帳戶增加1000元 UPDATE bank SET currentMoney=currentMoney-1000 WHERE customerName=張三 UPDATE bank SET currentMoney=currentMoney+1000 W
6、HERE customerName=李四 GO 錯誤原因分析:錯誤原因分析: UPDATE語句違反約束: 余額=1元 執(zhí)行失敗,所以張三還是執(zhí)行失敗,所以張三還是1000元元 繼續(xù)往下執(zhí)行繼續(xù)往下執(zhí)行:執(zhí)行成功,所以李四變?yōu)椋簣?zhí)行成功,所以李四變?yōu)?001元元 如何解決呢?使用如何解決呢?使用事務(wù)事務(wù) 8.1.1 事務(wù)的定義事務(wù)的定義(1)(1) 定義定義8.1 8.1 事務(wù)(事務(wù)(transactiontransaction)是構(gòu)成單一邏輯工作單元的)是構(gòu)成單一邏輯工作單元的 操作集合,要么完整地執(zhí)行,要么完全不執(zhí)行。不論發(fā)生操作集合,要么完整地執(zhí)行,要么完全不執(zhí)行。不論發(fā)生 何種情況,何種
7、情況,DBSDBS必須保證事務(wù)能正確、完整地執(zhí)行。必須保證事務(wù)能正確、完整地執(zhí)行。 在程序中,事務(wù)以在程序中,事務(wù)以BEGIN TRANSACTIONBEGIN TRANSACTION語句開始,語句開始, 以以COMMITCOMMIT語句或語句或ROLLBACKROLLBACK語句結(jié)束。語句結(jié)束。 COMMITCOMMIT語句表示事務(wù)執(zhí)行成功地結(jié)束(提交),此語句表示事務(wù)執(zhí)行成功地結(jié)束(提交),此 時告訴系統(tǒng),數(shù)據(jù)庫要進入一個新的正確狀態(tài),該事務(wù)對時告訴系統(tǒng),數(shù)據(jù)庫要進入一個新的正確狀態(tài),該事務(wù)對 數(shù)據(jù)庫的所有更新都已交付實施(寫入磁盤)。數(shù)據(jù)庫的所有更新都已交付實施(寫入磁盤)。 ROLLB
8、ACKROLLBACK語句表示事務(wù)執(zhí)行不成功地結(jié)束(應(yīng)該語句表示事務(wù)執(zhí)行不成功地結(jié)束(應(yīng)該 “回退回退”),此時告訴系統(tǒng),已發(fā)生錯誤,數(shù)據(jù)庫可能處),此時告訴系統(tǒng),已發(fā)生錯誤,數(shù)據(jù)庫可能處 在不正確的狀態(tài),該事務(wù)對數(shù)據(jù)庫的所有更新必須被撤消,在不正確的狀態(tài),該事務(wù)對數(shù)據(jù)庫的所有更新必須被撤消, 數(shù)據(jù)庫應(yīng)恢復(fù)該事務(wù)到初始狀態(tài)。數(shù)據(jù)庫應(yīng)恢復(fù)該事務(wù)到初始狀態(tài)。 用戶定義的一個對數(shù)據(jù)庫讀寫操作序列用戶定義的一個對數(shù)據(jù)庫讀寫操作序列 一個一個不可分割不可分割的工作單位的工作單位 數(shù)據(jù)庫恢復(fù)和并發(fā)控制的基本單位數(shù)據(jù)庫恢復(fù)和并發(fā)控制的基本單位 數(shù)據(jù)庫系統(tǒng)中通常有多個事務(wù)并行運行數(shù)據(jù)庫系統(tǒng)中通常有多個事務(wù)并行
9、運行 v事務(wù)和程序比較事務(wù)和程序比較 在關(guān)系數(shù)據(jù)庫中,一個事務(wù)可以是一條或多在關(guān)系數(shù)據(jù)庫中,一個事務(wù)可以是一條或多 條條SQL語句語句,也可以包含一個或多個程序。也可以包含一個或多個程序。 一個程序通常包含多個事務(wù)一個程序通常包含多個事務(wù) 轉(zhuǎn)帳過程就是一個事務(wù)。 它需要兩條UPDATE語句來完成,這兩條語句是一個整體, 如果其中任一條出現(xiàn)錯誤,則整個轉(zhuǎn)帳業(yè)務(wù)也應(yīng)取消,兩 個帳戶中的余額應(yīng)恢復(fù)到原來的數(shù)據(jù),從而確保轉(zhuǎn)帳前和 轉(zhuǎn)帳后的余額不變,即都是1001元。 8.1.1 事務(wù)的定義事務(wù)的定義(2)(2) 8.1.1 事務(wù)的定義事務(wù)的定義(3)(3) 例例8.1 8.1 設(shè)銀行數(shù)據(jù)庫設(shè)銀行數(shù)據(jù)庫
10、 中有一轉(zhuǎn)賬事務(wù)中有一轉(zhuǎn)賬事務(wù)T T,從,從 賬號賬號A A轉(zhuǎn)一筆款子(轉(zhuǎn)一筆款子($50$50) 到賬號到賬號B B,其操作如下:,其操作如下: T T:readread(A A);); A:=AA:=A5050; writewrite(A A);); readread(B B);); B:=B + 50B:=B + 50; writewrite(B B). . n組織成組織成如下如下事務(wù)事務(wù): T T: BEGIN RANSACTIONBEGIN RANSACTION; readread(A A);); A:=A-50A:=A-50; writewrite(A A);); if(Aif(A
11、0)ROLLBACK0)ROLLBACK; else readelse read(B B);); B:=B+50B:=B+50; writewrite(B B);); COMMITCOMMIT; 8.1.1 事務(wù)的定義事務(wù)的定義(4)(4) 對數(shù)據(jù)庫的訪問是建立在讀和寫兩個操作的基礎(chǔ)上的:對數(shù)據(jù)庫的訪問是建立在讀和寫兩個操作的基礎(chǔ)上的: ureadread(X X):把數(shù)據(jù)):把數(shù)據(jù)X X,從磁盤的數(shù)據(jù)庫中讀到內(nèi),從磁盤的數(shù)據(jù)庫中讀到內(nèi) 存的緩沖區(qū)中。存的緩沖區(qū)中。 uwritewrite(X X):把數(shù)據(jù)):把數(shù)據(jù)X X,從內(nèi)存緩沖區(qū)中寫回磁盤,從內(nèi)存緩沖區(qū)中寫回磁盤 的數(shù)據(jù)庫。的數(shù)據(jù)庫。
12、在系統(tǒng)運行時,在系統(tǒng)運行時,writewrite操作未必導(dǎo)致數(shù)據(jù)立即寫操作未必導(dǎo)致數(shù)據(jù)立即寫 回磁盤,很可能先暫存在內(nèi)存緩沖區(qū)中,稍后再寫回回磁盤,很可能先暫存在內(nèi)存緩沖區(qū)中,稍后再寫回 磁盤。這件事情是磁盤。這件事情是DBMSDBMS實現(xiàn)時必須注意的問題。實現(xiàn)時必須注意的問題。 8.1.2 事務(wù)的事務(wù)的ACIDACID性質(zhì)性質(zhì) 性質(zhì): v 原子性原子性(Atomicity): 事務(wù)是一個不可分割的工作單元,事務(wù)中的操作要么都做,要事務(wù)是一個不可分割的工作單元,事務(wù)中的操作要么都做,要 么都不做么都不做 (All or None)(All or None) v 一致性一致性(Consisten
13、cy): 即數(shù)據(jù)不會應(yīng)事務(wù)的執(zhí)行而遭受破壞。即數(shù)據(jù)不會應(yīng)事務(wù)的執(zhí)行而遭受破壞。事務(wù)執(zhí)行的結(jié)果必須使事務(wù)執(zhí)行的結(jié)果必須使 數(shù)據(jù)庫從數(shù)據(jù)庫從一個一致性狀態(tài)一個一致性狀態(tài)變到變到另一個一致性狀態(tài)。另一個一致性狀態(tài)。與原子性與原子性 密切相關(guān)。密切相關(guān)。 v 隔離性隔離性(Isolation): 在多個事務(wù)并發(fā)執(zhí)行時,系統(tǒng)應(yīng)保證與這些事務(wù)先后單獨執(zhí)行在多個事務(wù)并發(fā)執(zhí)行時,系統(tǒng)應(yīng)保證與這些事務(wù)先后單獨執(zhí)行 時的結(jié)果一樣。時的結(jié)果一樣。 v 持久性持久性(Durability): 一個事務(wù)一旦完成全部操作后,它對數(shù)據(jù)庫的所有更新應(yīng)永久一個事務(wù)一旦完成全部操作后,它對數(shù)據(jù)庫的所有更新應(yīng)永久 地反映在數(shù)據(jù)庫中
14、。地反映在數(shù)據(jù)庫中。 8.2 8.2 數(shù)據(jù)庫的恢復(fù)數(shù)據(jù)庫的恢復(fù) 8.2.1 8.2.1 存儲器結(jié)構(gòu)存儲器結(jié)構(gòu) 8.2.2 8.2.2 恢復(fù)的基本原則和實現(xiàn)方法恢復(fù)的基本原則和實現(xiàn)方法 8.2.3 8.2.3 故障類型和恢復(fù)方法故障類型和恢復(fù)方法 8.2.4 8.2.4 檢查點技術(shù)檢查點技術(shù) 8.2.5 SQL8.2.5 SQL對事務(wù)的支持對事務(wù)的支持 8.2.1 8.2.1 存儲器結(jié)構(gòu)存儲器結(jié)構(gòu)(1)(1) 1.1.存儲器類型存儲器類型 p易失性存儲器(易失性存儲器(volatile storagevolatile storage) 內(nèi)存、內(nèi)存、cachecache存儲器存儲器 p非易失性存儲
15、器(非易失性存儲器(nonvolatile storagenonvolatile storage) 磁盤和磁帶磁盤和磁帶 p穩(wěn)定存儲器(穩(wěn)定存儲器(stable storagestable storage) 這是一個理論上的概念。存儲在穩(wěn)定存儲器中的信息是決不會這是一個理論上的概念。存儲在穩(wěn)定存儲器中的信息是決不會 丟失的。丟失的。 2.2.穩(wěn)定存儲器的實現(xiàn)穩(wěn)定存儲器的實現(xiàn) p數(shù)據(jù)備份數(shù)據(jù)備份 p數(shù)據(jù)銀行數(shù)據(jù)銀行 8.2.1 8.2.1 存儲器結(jié)構(gòu)存儲器結(jié)構(gòu)(2)(2) 3. 數(shù)據(jù)訪問數(shù)據(jù)訪問 p塊、物理塊和緩沖塊、物理塊和緩沖塊塊 p塊塊的操作的操作 inputinput(A A):把物理塊
16、:把物理塊A A的的 內(nèi)容傳送到內(nèi)存的緩沖內(nèi)容傳送到內(nèi)存的緩沖 塊中。塊中。 OutputOutput(B B):把緩沖塊:把緩沖塊B B 的內(nèi)容傳送到磁盤中恰的內(nèi)容傳送到磁盤中恰 當(dāng)?shù)奈锢韷K中當(dāng)?shù)奈锢韷K中 B 內(nèi)存內(nèi)存 A B 磁盤磁盤 input(A) output(B) 圖圖8.2 塊操作塊操作 8.2.1 8.2.1 存儲器結(jié)構(gòu)存儲器結(jié)構(gòu)(3)(3) xi write(X) 包含包含x的塊的塊 Bx存在,存在, read(X)事務(wù)事務(wù) 系統(tǒng)系統(tǒng) 開開 始始 請求請求 read(X) 事務(wù)工作區(qū)事務(wù)工作區(qū)分配分配 X 磁盤緩沖區(qū)磁盤緩沖區(qū) 掃描內(nèi)存掃描內(nèi)存 磁盤磁盤 包含包含x的塊的塊
17、Bx存在,存在, input(B) 8.2.1 8.2.1 存儲器結(jié)構(gòu)存儲器結(jié)構(gòu)(4)(4) 銀行轉(zhuǎn)賬系統(tǒng)銀行轉(zhuǎn)賬系統(tǒng) A=2000 B=1000 事務(wù)事務(wù) A=A-100 B=B+100 output(A)output(A) output(Boutput(B 假設(shè)沒有事假設(shè)沒有事 務(wù)的原子性,務(wù)的原子性, 那么重新啟那么重新啟 動事務(wù)時,動事務(wù)時, 要么要么A A因為因為 再執(zhí)行一遍再執(zhí)行一遍 而為而為18001800, 要么要么B B因從因從 未執(zhí)行而保未執(zhí)行而保 持原值。持原值。 4. 恢復(fù)和原子性的聯(lián)系恢復(fù)和原子性的聯(lián)系 8.2.28.2.2恢復(fù)的基本原則和實現(xiàn)方法恢復(fù)的基本原則和實現(xiàn)
18、方法 u基本原則基本原則 :“冗余冗余”,即數(shù)據(jù)庫重復(fù)存儲。,即數(shù)據(jù)庫重復(fù)存儲。 u具體實現(xiàn)方法具體實現(xiàn)方法 平時做好兩件事:轉(zhuǎn)儲和建立日志平時做好兩件事:轉(zhuǎn)儲和建立日志 周期地(比如一天一次)對整個數(shù)據(jù)庫進行拷貝,轉(zhuǎn)儲周期地(比如一天一次)對整個數(shù)據(jù)庫進行拷貝,轉(zhuǎn)儲 到另一個磁盤或磁帶一類存儲介質(zhì)中。到另一個磁盤或磁帶一類存儲介質(zhì)中。 建立日志數(shù)據(jù)庫。記錄事務(wù)的開始、結(jié)束及數(shù)據(jù)每一次建立日志數(shù)據(jù)庫。記錄事務(wù)的開始、結(jié)束及數(shù)據(jù)每一次 插入、刪除和修改前后的值,并寫到插入、刪除和修改前后的值,并寫到“日志日志”庫中。庫中。 一旦發(fā)生數(shù)據(jù)庫故障,分兩種情況進行處理一旦發(fā)生數(shù)據(jù)庫故障,分兩種情況進行
19、處理 如果數(shù)據(jù)庫已被破壞,則裝入如果數(shù)據(jù)庫已被破壞,則裝入lastlast數(shù)據(jù)庫備份,再利用數(shù)據(jù)庫備份,再利用 日志庫將這兩個數(shù)據(jù)庫狀態(tài)之間的所有更新重新做一遍。日志庫將這兩個數(shù)據(jù)庫狀態(tài)之間的所有更新重新做一遍。 如果數(shù)據(jù)庫未被破壞,但某些數(shù)據(jù)不可靠,則撤消所有如果數(shù)據(jù)庫未被破壞,但某些數(shù)據(jù)不可靠,則撤消所有 不可靠的修改,把數(shù)據(jù)庫恢復(fù)到正確的狀態(tài)。不可靠的修改,把數(shù)據(jù)庫恢復(fù)到正確的狀態(tài)。 8.2.3 8.2.3 故障類型和恢復(fù)方法故障類型和恢復(fù)方法(1)(1) 1.1.事務(wù)故障事務(wù)故障 可以預(yù)期的事務(wù)故障,如存款余額透支等可以預(yù)期的事務(wù)故障,如存款余額透支等 非預(yù)期事務(wù)故障,如運算溢出、數(shù)據(jù)
20、錯誤、死鎖等非預(yù)期事務(wù)故障,如運算溢出、數(shù)據(jù)錯誤、死鎖等 2.2.系統(tǒng)故障:硬件故障、軟件錯誤或掉電等系統(tǒng)故障:硬件故障、軟件錯誤或掉電等, ,重重 新啟動時,具體處理分兩種情況考慮。新啟動時,具體處理分兩種情況考慮。 對未完成事務(wù)作對未完成事務(wù)作UNDOUNDO處理;處理; 對已提交事務(wù)但更新還留在緩沖區(qū)的事務(wù)進行對已提交事務(wù)但更新還留在緩沖區(qū)的事務(wù)進行REDOREDO 處理。處理。 8.2.3 8.2.3 故障類型和恢復(fù)方法故障類型和恢復(fù)方法(2)(2) 3 3介質(zhì)故障介質(zhì)故障 在發(fā)生介質(zhì)故障和遭受病毒破壞時,磁盤上在發(fā)生介質(zhì)故障和遭受病毒破壞時,磁盤上 的物理數(shù)據(jù)庫遭到毀滅性破壞。此時恢
21、復(fù)的的物理數(shù)據(jù)庫遭到毀滅性破壞。此時恢復(fù)的 過程如下:過程如下: p重裝最近轉(zhuǎn)儲的后備副本到新的磁盤,使數(shù)據(jù)重裝最近轉(zhuǎn)儲的后備副本到新的磁盤,使數(shù)據(jù) 庫恢復(fù)到轉(zhuǎn)儲時的一致狀態(tài)。庫恢復(fù)到轉(zhuǎn)儲時的一致狀態(tài)。 p在日志中找出最近轉(zhuǎn)儲以后所有已提交的事務(wù)。在日志中找出最近轉(zhuǎn)儲以后所有已提交的事務(wù)。 p對這些已提交的事務(wù)進行對這些已提交的事務(wù)進行REDOREDO處理,將數(shù)據(jù)庫處理,將數(shù)據(jù)庫 恢復(fù)到故障前某一時刻的一致狀態(tài)?;謴?fù)到故障前某一時刻的一致狀態(tài)。 在實際中,系統(tǒng)故障通常稱為軟故障在實際中,系統(tǒng)故障通常稱為軟故障(Soft (Soft Crash)Crash),介質(zhì)故障通常稱為硬故障,介質(zhì)故障通常
22、稱為硬故障(Hard (Hard Crash)Crash)。 8.2.4 8.2.4 檢查點技術(shù)檢查點技術(shù)(1)(1) 1 1檢查點方法檢查點方法 在在DBSDBS運行時,運行時, DBMSDBMS定時設(shè)置檢查定時設(shè)置檢查 點。在檢查點時刻點。在檢查點時刻 才真正做到把對才真正做到把對DBDB 的修改寫到磁盤,的修改寫到磁盤, 并在日志文件寫入并在日志文件寫入 一條檢查點記錄一條檢查點記錄( (以以 便恢復(fù)時使用便恢復(fù)時使用) )。當(dāng)。當(dāng) DBDB需要恢復(fù)時,只需要恢復(fù)時,只 有那些在檢查點后有那些在檢查點后 面的事務(wù)需要恢復(fù)。面的事務(wù)需要恢復(fù)。 事務(wù)事務(wù)T1T1不必恢復(fù);不必恢復(fù); 事務(wù)事務(wù)
23、T2T2和事務(wù)和事務(wù)T4T4必須重做必須重做(REDO)(REDO); 事務(wù)事務(wù)T3T3和事務(wù)和事務(wù)T5T5必須撤消必須撤消(UNDO)(UNDO)。 事務(wù)事務(wù) 檢查點檢查點 故障點故障點 t 檢查點檢查點 T1T1 T3T3 T2T2 T5T5 T4T4 8.2.4 8.2.4 檢查點技術(shù)檢查點技術(shù)(2)(2) 2 2檢查點方法的恢復(fù)算法:分成兩步。檢查點方法的恢復(fù)算法:分成兩步。 (1 1)根據(jù)日志文件建立事務(wù))根據(jù)日志文件建立事務(wù)重做隊列重做隊列和事務(wù)和事務(wù)撤銷隊撤銷隊 列列。此時,從頭掃描日志文件(正向掃描)。此時,從頭掃描日志文件(正向掃描)。 (2 2)對)對重做隊列重做隊列中的事
24、務(wù)進行中的事務(wù)進行REDOREDO處理,對處理,對撤銷隊撤銷隊 列列中的事務(wù)進行中的事務(wù)進行UNDOUNDO處理。處理。 p進行進行REDOREDO處理的方法是:正向掃描日志文件,根處理的方法是:正向掃描日志文件,根 據(jù)重做隊列的記錄對每一個重做事務(wù)重新實施對數(shù)據(jù)重做隊列的記錄對每一個重做事務(wù)重新實施對數(shù) 據(jù)庫的更新操作。據(jù)庫的更新操作。 p進行進行UNDOUNDO處理的方法是:反向掃描日志文件,根處理的方法是:反向掃描日志文件,根 據(jù)撤銷隊列的記錄對每一個撤銷事務(wù)的更新操作執(zhí)據(jù)撤銷隊列的記錄對每一個撤銷事務(wù)的更新操作執(zhí) 行逆操作。行逆操作。 8.2.5 SQL8.2.5 SQL對事務(wù)的支持對
25、事務(wù)的支持 無無begin transaction Commit Rollback 8.3 數(shù)據(jù)庫的并發(fā)控制數(shù)據(jù)庫的并發(fā)控制 8.3.1 8.3.1 并發(fā)操作帶來的三個問題并發(fā)操作帶來的三個問題 8.3.2 8.3.2 封鎖技術(shù)封鎖技術(shù) 8.3.3 8.3.3 封鎖帶來的問題封鎖帶來的問題 8.3.4 8.3.4 并發(fā)操作的調(diào)度并發(fā)操作的調(diào)度 8.3.5 SQL8.3.5 SQL對事務(wù)處理的支持對事務(wù)處理的支持 8.3.1并發(fā)操作帶來的三個問題并發(fā)操作帶來的三個問題(1)(1) 圖圖8.5 8.5 在時間在時間t8t8丟失了事務(wù)丟失了事務(wù)T1T1的更新的更新 (FINDFIND表示從表示從DB
26、DB中讀值,中讀值,UPDUPD表示把值寫回到表示把值寫回到DBDB) 1 1丟失更新問題(例丟失更新問題(例8.28.2) 時間 更新事務(wù)T1數(shù)據(jù)庫中A的值更新事務(wù)T2 t0 100 t1FIND A t2 FIND A t3A:=A-30 t4 A:=A*2 t5UPD A t6 80UPD A t8 200 8.3.1并發(fā)操作帶來的三個問題并發(fā)操作帶來的三個問題(2)(2) 圖圖8.6 8.6 事務(wù)事務(wù)T2T2在時間在時間t4t4讀了未提交的讀了未提交的A A值(值(8080) 2 2讀臟數(shù)據(jù)問題(例讀臟數(shù)據(jù)問題(例8.38.3,用戶讀了,用戶讀了“臟數(shù)據(jù)臟數(shù)據(jù)”, 但沒有破壞數(shù)據(jù)庫的完
27、整性)但沒有破壞數(shù)據(jù)庫的完整性) 時間更新事務(wù)T1 數(shù)據(jù)庫中A的值 讀事務(wù)T2 t0 100 t1FIND A t2A:=A-30 t3UPD A t4 80FIND A t5 *ROLLBAC K* t6 100 8.3.1并發(fā)操作帶來的三個問題并發(fā)操作帶來的三個問題(3)(3) 圖圖8.8 8.8 事務(wù)事務(wù)T2T2在時間在時間t4t4讀了未提交的讀了未提交的A A值,并在時間值,并在時間 t8t8丟失了自己的更新丟失了自己的更新 2 2讀臟數(shù)據(jù)問題(讀臟數(shù)據(jù)問題(例例8.48.4,用戶讀了用戶讀了“臟數(shù)據(jù)臟數(shù)據(jù)”,引起,引起 自自身的更新操作被丟失,破壞了數(shù)據(jù)庫的完整性)身的更新操作被丟失
28、,破壞了數(shù)據(jù)庫的完整性) 時間 更新事務(wù)T1 數(shù)據(jù)庫中A的值 更新事務(wù)T2 t0 100 t1FIND A t2A:=A-30 t3UPD A t4 80FIND A t5 A:=A*2 t6 UPD A t8 140 t8 *ROLLBAC K* t9 100 8.3.1并發(fā)操作帶來的三個問題并發(fā)操作帶來的三個問題(4)(4) 圖圖8.8 8.8 事務(wù)事務(wù)T1T1兩次讀取兩次讀取A A的值,的值, 卻得到了不同的結(jié)果卻得到了不同的結(jié)果 3.3.不可重復(fù)讀問題不可重復(fù)讀問題(例(例8.58.5) 時間 讀事務(wù)T1 數(shù)據(jù)庫中A的值 更新事務(wù)T2 t0 100 t1FIND A t2 XFIND
29、A t3 A:=A*2 t4 UPD A t5 200COMMIT t6FIND A 8.3.1并發(fā)操作帶來的三個問題并發(fā)操作帶來的三個問題(5)(5) 時間時間 更新事務(wù)更新事務(wù)T1T1數(shù)據(jù)庫中數(shù)據(jù)庫中A A值值更新事務(wù)更新事務(wù)T2T2 t0t0 100100 t1t1FIND AFIND A t2t2 FIND AFIND A t3t3A:=A-30A:=A-30 t4t4 A:=AA:=A* *2 2 t5t5UPD AUPD A t6t6 8080UPD AUPD A t8t8 200200 圖圖8.5 8.5 在時間在時間t8t8丟失了事務(wù)丟失了事務(wù)T1T1的更新的更新 解決方法:解
30、決方法: 8.3.2 封鎖技術(shù)封鎖技術(shù)(1)(1) 定義定義8.3 8.3 鎖(鎖(locklock)是一個與數(shù)據(jù)項相關(guān)的變量,是一個與數(shù)據(jù)項相關(guān)的變量, 對可能應(yīng)用于該數(shù)據(jù)項上的操作而言,鎖描述了該對可能應(yīng)用于該數(shù)據(jù)項上的操作而言,鎖描述了該 數(shù)據(jù)項的狀態(tài)。數(shù)據(jù)項的狀態(tài)。 通常在數(shù)據(jù)庫中每個數(shù)據(jù)項都有一個鎖。鎖的通常在數(shù)據(jù)庫中每個數(shù)據(jù)項都有一個鎖。鎖的 作用是使并發(fā)事務(wù)對數(shù)據(jù)庫中數(shù)據(jù)項的訪問能夠同作用是使并發(fā)事務(wù)對數(shù)據(jù)庫中數(shù)據(jù)項的訪問能夠同 步。步。 封鎖技術(shù)中主要有兩種封鎖:封鎖技術(shù)中主要有兩種封鎖: 排他型封鎖排他型封鎖 共享型封鎖共享型封鎖 8.3.2 封鎖技術(shù)封鎖技術(shù)(2)(2) 1
31、.1.排他型封鎖(排他型封鎖(X X鎖,寫鎖)鎖,寫鎖) X X鎖定義:鎖定義:如果事務(wù)如果事務(wù)T T對某個數(shù)據(jù)對某個數(shù)據(jù)R R(可以是數(shù)據(jù)項、記(可以是數(shù)據(jù)項、記 錄、數(shù)據(jù)集乃至整個數(shù)據(jù)庫)實現(xiàn)了錄、數(shù)據(jù)集乃至整個數(shù)據(jù)庫)實現(xiàn)了X X鎖,那么在鎖,那么在T T對對 數(shù)據(jù)數(shù)據(jù)R R解除封鎖之前,不允許其他事務(wù)解除封鎖之前,不允許其他事務(wù)T T再對該數(shù)據(jù)加再對該數(shù)據(jù)加 任何類型的鎖。這種鎖稱為任何類型的鎖。這種鎖稱為“X X鎖鎖”。 X X鎖的操作有兩個:鎖的操作有兩個: 封鎖操作封鎖操作 “XFIND RXFIND R”:表示事務(wù)對數(shù)據(jù)表示事務(wù)對數(shù)據(jù)R申請加申請加X鎖,若成功,鎖,若成功, 則
32、可以讀或?qū)憯?shù)據(jù)則可以讀或?qū)憯?shù)據(jù)R,若不成功,那么這個事務(wù)將進入等待隊列,直到獲,若不成功,那么這個事務(wù)將進入等待隊列,直到獲 得得X鎖,事務(wù)才繼續(xù)做下去。鎖,事務(wù)才繼續(xù)做下去。 解鎖操作解鎖操作 “XRELEASE RXRELEASE R”:表示事務(wù)要解除對數(shù)據(jù)表示事務(wù)要解除對數(shù)據(jù)R的的X鎖鎖 X X鎖的解除操作應(yīng)該合并到事務(wù)的結(jié)束(鎖的解除操作應(yīng)該合并到事務(wù)的結(jié)束(COMMITCOMMIT或或 ROLLBACKROLLBACK)操作中。)操作中。 時間更新事務(wù)T1 DB中A的 值 更新事務(wù)T2 t0 100 t1XFIND A t2 XFIND A(失敗) wait(等待) t3A:=A-3
33、0 wait t4 wait t5UPD A wait t6 80 wait t8COMMIT(含解鎖) wait t8 XFIND A(重做) t9 A:=A*2 t10 UPD A t11 140COMMIT(含解鎖) 8.3.2 封鎖技術(shù)封鎖技術(shù)(3)(3) 例例8.6 8.6 使用使用X X鎖技術(shù),可以解決圖鎖技術(shù),可以解決圖8.58.5的丟失更新問題。的丟失更新問題。 圖圖8.9 8.9 等事務(wù)等事務(wù)T1T1更新完成后再執(zhí)行事務(wù)更新完成后再執(zhí)行事務(wù)T2T2 2 2共享型封鎖(共享型封鎖(S S鎖,讀鎖)鎖,讀鎖) 定義定義8.5 8.5 如果事務(wù)如果事務(wù)T T對某數(shù)據(jù)加上對某數(shù)據(jù)加上
34、S S鎖鎖后,仍允許其他后,仍允許其他 事務(wù)再對該數(shù)據(jù)加事務(wù)再對該數(shù)據(jù)加S S鎖,但在對該數(shù)據(jù)的所有鎖,但在對該數(shù)據(jù)的所有S S鎖都解鎖都解 除之前決不允許任何事務(wù)對該數(shù)據(jù)加除之前決不允許任何事務(wù)對該數(shù)據(jù)加X X鎖。鎖。 S S鎖的操作有三個:鎖的操作有三個: 封鎖操作 “SFIND R 升級和寫操作 “UPDX R” 解鎖操作 “SRELEASE R” 可以看出,獲準(zhǔn)可以看出,獲準(zhǔn)S S鎖的事務(wù)只能讀數(shù)據(jù),不能更新數(shù)鎖的事務(wù)只能讀數(shù)據(jù),不能更新數(shù) 據(jù),若要更新,則先要把據(jù),若要更新,則先要把S S鎖升級為鎖升級為X X鎖。鎖。 另外,由于另外,由于S S鎖只允許讀數(shù)據(jù),因此解除鎖只允許讀數(shù)據(jù)
35、,因此解除S S鎖的操作不鎖的操作不 必非要合并到事務(wù)的結(jié)束操作中去,可以隨時根據(jù)需必非要合并到事務(wù)的結(jié)束操作中去,可以隨時根據(jù)需 要解除要解除S S鎖。鎖。 8.3.2 封鎖技術(shù)封鎖技術(shù)(4)(4) 時間更新事務(wù)T1 DB中A的 值 更新事務(wù)T2 t0 100 t1SFIND A t2 SFIND A t3A:=A-30 t4 A:=A*2 t5UPDX A(失敗) t6wait UPDX A(失敗) t8wait wait t8wait wait 8.3.2 封鎖技術(shù)封鎖技術(shù)(5)(5) 例例8.8 使用使用S S鎖技術(shù)鎖技術(shù), ,也可以解決圖也可以解決圖8.5的丟失更新問題。的丟失更新問
36、題。 圖圖8.10 更新未丟失更新未丟失, ,但在時間但在時間t6t6發(fā)生了死鎖發(fā)生了死鎖 注:注: N=NO,不相容的請求,不相容的請求 Y=YES,相容的請求,相容的請求 X、S、:、: 分別表示分別表示X鎖,鎖,S鎖,無鎖鎖,無鎖 如果兩個封鎖是不相容如果兩個封鎖是不相容 的,則后提出封鎖的事務(wù)的,則后提出封鎖的事務(wù) 要等待。要等待。 XS XNNY SNYY YYY 8.3.2 封鎖技術(shù)封鎖技術(shù)(6)(6) 3 3封鎖的相容矩陣封鎖的相容矩陣 4 4封鎖的粒度封鎖的粒度 定義定義8.6 封鎖對象的大小稱為封鎖對象的大小稱為封鎖的粒度封鎖的粒度。 封鎖的對象封鎖的對象 邏輯單元邏輯單元:
37、 :屬性值、屬性值集合、元組、關(guān)系、索引項、整屬性值、屬性值集合、元組、關(guān)系、索引項、整 個索引、整個數(shù)據(jù)庫個索引、整個數(shù)據(jù)庫 物理單元物理單元 :頁(數(shù)據(jù)頁或索引頁)、塊頁(數(shù)據(jù)頁或索引頁)、塊 封鎖粒度與系統(tǒng)并發(fā)度和并發(fā)控制開銷密切相關(guān)。封鎖粒度與系統(tǒng)并發(fā)度和并發(fā)控制開銷密切相關(guān)。 粒度越大,系統(tǒng)中能被封鎖的對象就越少,并發(fā)度就粒度越大,系統(tǒng)中能被封鎖的對象就越少,并發(fā)度就 越小,但同時系統(tǒng)的開銷也就越??;相反,粒度越小,越小,但同時系統(tǒng)的開銷也就越??;相反,粒度越小, 并發(fā)度越高,系統(tǒng)開銷越大。并發(fā)度越高,系統(tǒng)開銷越大。 選擇封鎖粒度時必須同時考慮封鎖機構(gòu)與并發(fā)度兩選擇封鎖粒度時必須同時
38、考慮封鎖機構(gòu)與并發(fā)度兩 個因素,對系統(tǒng)開銷與并發(fā)度進行權(quán)衡。個因素,對系統(tǒng)開銷與并發(fā)度進行權(quán)衡。 8.3.2 封鎖技術(shù)封鎖技術(shù)(8)(8) 5 5封鎖協(xié)議:封鎖協(xié)議:三級封鎖協(xié)議,分別在不同程度上三級封鎖協(xié)議,分別在不同程度上 解決了并發(fā)操作帶來的各種問題,為并發(fā)操作的正確解決了并發(fā)操作帶來的各種問題,為并發(fā)操作的正確 調(diào)度提供一定的保證。調(diào)度提供一定的保證。 8.3.2 封鎖技術(shù)封鎖技術(shù)(8)(8) 表8.1 封鎖協(xié)議的內(nèi)容和優(yōu)缺點 級別 內(nèi) 容 優(yōu) 點 缺 點 一級 封鎖 協(xié)議 事務(wù)在修 改數(shù)據(jù)之 前,必須 先對該數(shù) 據(jù)加X鎖, 直到事務(wù) 結(jié)束時才 釋放 但只讀數(shù)據(jù)的事務(wù) 可以不加鎖 防止
39、“丟失修改” 不加鎖的事務(wù), 可 能 “ 讀 臟 數(shù) 據(jù) ” , 也 可 能 “不可重復(fù)讀” 二級 封鎖 協(xié)議 但其他事務(wù)在 讀數(shù)據(jù)之前必 需先加S鎖 讀 完 數(shù) 據(jù) 后 即 可 釋 放S鎖 防止“丟失修改”, 防止“讀臟數(shù)據(jù)” 對加S鎖的事務(wù), 可能“不可重復(fù) 讀” 三級 封鎖 協(xié)議 直 到 事 務(wù) 結(jié) 束 時 才 釋放S鎖 防止“丟失修改”, 防止“讀臟數(shù)據(jù)”, 防止“不可重復(fù)讀” 8.3 數(shù)據(jù)庫的并發(fā)控制數(shù)據(jù)庫的并發(fā)控制 8.3.1 8.3.1 并發(fā)操作帶來的三個問題并發(fā)操作帶來的三個問題 8.3.2 8.3.2 封鎖技術(shù)封鎖技術(shù) 8.3.3 8.3.3 封鎖帶來的問題封鎖帶來的問題 8
40、.3.4 8.3.4 并發(fā)操作的調(diào)度并發(fā)操作的調(diào)度 8.3.5 SQL8.3.5 SQL對事務(wù)處理的支持對事務(wù)處理的支持 8.3.3 封鎖帶來的問題封鎖帶來的問題(1)(1) 1 1“活鎖活鎖”問題問題 定義定義8.8 8.8 系統(tǒng)可能使某個事務(wù)永遠(yuǎn)處于等待狀態(tài),得系統(tǒng)可能使某個事務(wù)永遠(yuǎn)處于等待狀態(tài),得 不到封鎖的機會,這種現(xiàn)象稱為不到封鎖的機會,這種現(xiàn)象稱為“活鎖活鎖”(Live Live LockLock)。)。 解決活鎖問題的一種簡單的方法是采用解決活鎖問題的一種簡單的方法是采用“先來先先來先 服務(wù)服務(wù)”的策略,也就是簡單的排隊方式。的策略,也就是簡單的排隊方式。 如果運行時,事務(wù)有優(yōu)先
41、級,那么很可能使優(yōu)先如果運行時,事務(wù)有優(yōu)先級,那么很可能使優(yōu)先 級低的事務(wù),既使排隊也很難輪上封鎖的機會。此時級低的事務(wù),既使排隊也很難輪上封鎖的機會。此時 可采用可采用“升級升級”方法來解決,也就是當(dāng)一個事務(wù)等待方法來解決,也就是當(dāng)一個事務(wù)等待 若干時間(譬如若干時間(譬如5 5分鐘)還輪不上封鎖時,可以提高其分鐘)還輪不上封鎖時,可以提高其 優(yōu)先級別,這樣總能輪上封鎖。優(yōu)先級別,這樣總能輪上封鎖。 8.3.3 封鎖帶來的問題封鎖帶來的問題(2)(2) 2 2“餓死餓死”問題問題 定義定義8.8 8.8 有可能存在一個事務(wù)序列,其中每個事務(wù)有可能存在一個事務(wù)序列,其中每個事務(wù) 都申請對某數(shù)據(jù)
42、項加都申請對某數(shù)據(jù)項加S S鎖,且每個事務(wù)在授權(quán)加鎖后鎖,且每個事務(wù)在授權(quán)加鎖后 一小段時內(nèi)釋放封鎖,此時若另有一個事務(wù)一小段時內(nèi)釋放封鎖,此時若另有一個事務(wù)T2T2欲在欲在 該數(shù)據(jù)項上加該數(shù)據(jù)項上加X X鎖,則將永遠(yuǎn)輪不上封鎖的機會。這鎖,則將永遠(yuǎn)輪不上封鎖的機會。這 種現(xiàn)象稱為種現(xiàn)象稱為“餓死餓死”(starvationstarvation)。)。 可以用下列方式授權(quán)加鎖來避免事務(wù)餓死。當(dāng)可以用下列方式授權(quán)加鎖來避免事務(wù)餓死。當(dāng) 事務(wù)事務(wù)T2T2中請對數(shù)據(jù)項中請對數(shù)據(jù)項Q Q加加S S鎖時,授權(quán)加鎖的條件是:鎖時,授權(quán)加鎖的條件是: 不存在在數(shù)據(jù)項不存在在數(shù)據(jù)項Q Q上持有上持有X X鎖的
43、其他事務(wù);鎖的其他事務(wù); 不存在等待對數(shù)據(jù)項不存在等待對數(shù)據(jù)項Q Q加鎖且先于加鎖且先于T2T2申請加鎖的申請加鎖的 事務(wù)。事務(wù)。 8.3.3 封鎖帶來的問題封鎖帶來的問題(3)(3) 3. “3. “死鎖死鎖”問題問題 定義定義8.9 8.9 系統(tǒng)中有兩個或兩個以上的事務(wù)都處于等系統(tǒng)中有兩個或兩個以上的事務(wù)都處于等 待狀態(tài),并且每個事務(wù)都在等待其中另一個事務(wù)解待狀態(tài),并且每個事務(wù)都在等待其中另一個事務(wù)解 除封鎖,它才能繼續(xù)執(zhí)行下去,結(jié)果造成任何一個除封鎖,它才能繼續(xù)執(zhí)行下去,結(jié)果造成任何一個 事務(wù)都無法繼續(xù)執(zhí)行,這種現(xiàn)象稱系統(tǒng)進入了事務(wù)都無法繼續(xù)執(zhí)行,這種現(xiàn)象稱系統(tǒng)進入了“死死 鎖鎖”(De
44、ad LockDead Lock)狀態(tài)。)狀態(tài)。 時間事務(wù)T1事務(wù)T2 t0 XFIND A t1 XFIND B t2 XFIND B t3waitXFIND A t4waitwait 圖圖8.12 8.12 在時間在時間t4t4 兩個事務(wù)發(fā)生死鎖兩個事務(wù)發(fā)生死鎖 8.3.3 封鎖帶來的問題封鎖帶來的問題(4)(4) u我們可以用事務(wù)依賴我們可以用事務(wù)依賴 圖的形式測試系統(tǒng)中圖的形式測試系統(tǒng)中 是否存在死鎖。圖中是否存在死鎖。圖中 每 一 個 結(jié) 點 是每 一 個 結(jié) 點 是 “ 事事 務(wù)務(wù)”,箭頭表示事務(wù),箭頭表示事務(wù) 間的依賴關(guān)系。間的依賴關(guān)系。 圖圖8.148.14為無環(huán)依賴圖,表示為
45、無環(huán)依賴圖,表示 系統(tǒng)未進入死鎖狀態(tài);系統(tǒng)未進入死鎖狀態(tài); 而圖而圖8.158.15為有環(huán)依賴圖,則為有環(huán)依賴圖,則 表示系統(tǒng)進入死鎖狀態(tài)。表示系統(tǒng)進入死鎖狀態(tài)。 數(shù)據(jù)數(shù)據(jù)B B 數(shù)據(jù)數(shù)據(jù)A A 8.3.3 封鎖帶來的問題封鎖帶來的問題(5)(5) uDBMSDBMS中有一個死鎖測試程序,每隔一段時間檢查并中有一個死鎖測試程序,每隔一段時間檢查并 發(fā)的事務(wù)之間是否發(fā)生死鎖。發(fā)的事務(wù)之間是否發(fā)生死鎖。 u如果發(fā)生死鎖,那么只能抽取某個事務(wù)作為犧牲品,如果發(fā)生死鎖,那么只能抽取某個事務(wù)作為犧牲品, 把它撤消,做回退操作,解除它的所有封鎖,恢復(fù)把它撤消,做回退操作,解除它的所有封鎖,恢復(fù) 到該事務(wù)的
46、初始狀態(tài)。釋放出來的資源就可以分配到該事務(wù)的初始狀態(tài)。釋放出來的資源就可以分配 給其他事務(wù),使其他事務(wù)有可能繼續(xù)運行下去,就給其他事務(wù),使其他事務(wù)有可能繼續(xù)運行下去,就 有可能消除死鎖現(xiàn)象。有可能消除死鎖現(xiàn)象。 u理論上,系統(tǒng)進入死鎖狀態(tài)時可能會有許多事務(wù)在理論上,系統(tǒng)進入死鎖狀態(tài)時可能會有許多事務(wù)在 相互等待,但是相互等待,但是System RSystem R的實驗表明,實際上絕大的實驗表明,實際上絕大 部分的死鎖只涉及到兩個事務(wù),也就是事務(wù)依賴圖部分的死鎖只涉及到兩個事務(wù),也就是事務(wù)依賴圖 中的循環(huán)里只有兩個事務(wù)。有時,死鎖也被形象地中的循環(huán)里只有兩個事務(wù)。有時,死鎖也被形象地 稱作稱作“死死擁抱死死擁抱”(Deadly EmbraceDeadly Embrace)。)。 8.3 數(shù)據(jù)庫的并發(fā)控制數(shù)據(jù)庫的并發(fā)控制 8.3.1 8.3.1 并發(fā)操作帶來的三個問題并發(fā)操作帶來的三個問題 8.3.2 8.3.2 封鎖技術(shù)封鎖技術(shù) 8.3.3 8.3.3 封鎖帶來的問題封鎖帶來的問題 8.3.4 8.3.4 并發(fā)操作的調(diào)度并發(fā)操作的調(diào)度 8.3.5 SQL8.3.5 SQL對事務(wù)處理的支持對事務(wù)處理的支持 事務(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度商業(yè)綜合體物業(yè)經(jīng)營權(quán)轉(zhuǎn)讓合同范本2篇
- 2025年度施工企業(yè)施工技術(shù)優(yōu)化合理化建議書3篇
- 2025年度時尚飾品寄售分銷合同范本
- 二零二五年度專業(yè)會議包車服務(wù)合同5篇
- 2025年度水利工程建設(shè)項目施工合同履約保函條款9篇
- 學(xué)校文明廣播稿范文(5篇)
- 學(xué)校學(xué)生管理交流發(fā)言稿范文(12篇)
- 2024民政廳離婚協(xié)議書簽訂流程規(guī)范合同3篇
- 二零二五年度農(nóng)業(yè)科技產(chǎn)品采購合作協(xié)議
- 2025版高性能鋼構(gòu)工程安裝及售后服務(wù)協(xié)議3篇
- 倉庫管理培訓(xùn)課件
- 2024年居間服務(wù)合同:律師事務(wù)所合作與業(yè)務(wù)推廣
- 大型活動音響設(shè)備保養(yǎng)方案
- 安全生產(chǎn)專(兼)職管理人員職責(zé)
- 公檢法聯(lián)席會議制度
- 成都大學(xué)《Python數(shù)據(jù)分析》2022-2023學(xué)年期末試卷
- 保險理賠崗位招聘面試題與參考回答(某大型央企)2024年
- 上海市市轄區(qū)(2024年-2025年小學(xué)五年級語文)部編版期末考試(上學(xué)期)試卷及答案
- 第10課《我們不亂扔》(教學(xué)設(shè)計)-部編版道德與法治二年級上冊
- 期末試卷(試題)-2024-2025學(xué)年五年級上冊數(shù)學(xué)人教版
- 護理安全警示教育-新-
評論
0/150
提交評論