《數(shù)據(jù)庫(kù)系統(tǒng)原理與應(yīng)用-Oracle版》課件第6章_第1頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)原理與應(yīng)用-Oracle版》課件第6章_第2頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)原理與應(yīng)用-Oracle版》課件第6章_第3頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)原理與應(yīng)用-Oracle版》課件第6章_第4頁(yè)
《數(shù)據(jù)庫(kù)系統(tǒng)原理與應(yīng)用-Oracle版》課件第6章_第5頁(yè)
已閱讀5頁(yè),還剩47頁(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)介

第6章數(shù)據(jù)庫(kù)的事務(wù)處理與數(shù)據(jù)恢復(fù)6.1事務(wù)管理的基本概念6.2并發(fā)控制6.3數(shù)據(jù)庫(kù)恢復(fù)6.1事務(wù)管理的基本概念6.1.1事務(wù)(Transaction)的概念6.1.2事務(wù)的狀態(tài)6.1.3事務(wù)的特性6.1.4SQLServer中的事務(wù)返回首頁(yè)6.1.1事務(wù)(Transaction)的概念事務(wù)是用戶定義的數(shù)據(jù)庫(kù)操作序列,這些操作可作為一個(gè)完整的工作單元。一個(gè)事務(wù)內(nèi)的所有語(yǔ)句是一個(gè)整體,要么全部執(zhí)行,要么全部不執(zhí)行。即事務(wù)是不可再分的原子性工作。如在銀行業(yè)務(wù)中,“從帳戶A轉(zhuǎn)移資金X到帳戶B”就是一個(gè)典型的事務(wù)。這個(gè)事務(wù)可以分解為兩個(gè)動(dòng)作:(1)從賬戶A減去金額X。(2)在賬戶B中加上金額X。返回本節(jié)6.1.2事務(wù)的狀態(tài)事務(wù)的基本操作包括:(1)事務(wù)開(kāi)始(BEGIN_TRANSACTION)。事務(wù)開(kāi)始執(zhí)行。(2)事務(wù)讀寫(xiě)(Read/Write)。事務(wù)進(jìn)行數(shù)據(jù)操作。(3)事務(wù)結(jié)束(END_TRANSACTION)。事務(wù)完成所有的讀/寫(xiě)操作。(4)事務(wù)交付(COMMIT_TRANSACTION)。事務(wù)完成所有的讀/寫(xiě)操作,并保存操作結(jié)果。返回本節(jié)6.1.3事務(wù)的特性事務(wù)所必須具有的重要特性包括:(1)原子性(Atomicity)。(2)一致性(Consistency)。(3)隔離性(Isolation)。(4)持久性(Durability)。上述的四個(gè)特性也簡(jiǎn)稱為ACID特性,保證ACID特性是事務(wù)處理的重要任務(wù)。事務(wù)的ACID特性可能遭到破壞的原因有:1)多個(gè)事務(wù)并行運(yùn)行時(shí),不同事務(wù)的操作交叉執(zhí)行。2)事務(wù)在運(yùn)行過(guò)程中被強(qiáng)迫停止。返回本節(jié)6.1.4ORACLE中的事務(wù).在Oracle中沒(méi)有“開(kāi)始事務(wù)處理”的語(yǔ)句。用戶不能顯式地開(kāi)始一個(gè)事務(wù)處理。事務(wù)處理會(huì)隱式地開(kāi)始于第一條修改數(shù)據(jù)的語(yǔ)句,或者在一些要求事務(wù)處理的場(chǎng)合。數(shù)據(jù)庫(kù)事務(wù)主要由INSERT、UPDATE、DELETE操作組成。當(dāng)在應(yīng)用程序中執(zhí)行第一條SQL時(shí),事務(wù)便開(kāi)始了,當(dāng)執(zhí)行COMMIT或ROLLBACK語(yǔ)句時(shí)事務(wù)就結(jié)束了。Oracle中對(duì)事務(wù)處理的控制語(yǔ)句主要包括COMMIT、ROLLBACK、SAVEPOINT、ROLLBACKTOSAVEPOINT、SETTRANSACTION。(1)提交事務(wù)(COMMIT)。在事務(wù)處理中,用戶只需要使用COMMIT語(yǔ)句就可以結(jié)束事務(wù)。當(dāng)執(zhí)行COMMIT語(yǔ)句之后,系統(tǒng)確認(rèn)事務(wù)變化、結(jié)束事務(wù)、刪除保存點(diǎn)、釋放鎖,其他會(huì)話就可以查看到事務(wù)變化后的新數(shù)據(jù)了.返回本節(jié)(2)回退事務(wù)(ROLLBACK)回退可以撤消已進(jìn)行的操作。當(dāng)應(yīng)用中出現(xiàn)錯(cuò)誤,或是運(yùn)行程序的終端用戶決定不保存對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)進(jìn)行的修改時(shí),就需要進(jìn)行回滾?;貪L事務(wù)使用ROLLBACK命令。回退終止用戶的事務(wù)處理,撤消用戶已經(jīng)進(jìn)行的對(duì)數(shù)據(jù)的所有改變,讀取用戶存儲(chǔ)在回滾段或UNDO表空間中的信息,將數(shù)據(jù)庫(kù)塊恢復(fù)到用戶處理之前的狀態(tài),且釋放會(huì)話所占用的所有鎖定(3)設(shè)置保存點(diǎn)(SAVEPOINT)用戶在處理較大事物時(shí)中可以建立保存點(diǎn)(SAVEPOINT),用于在必要時(shí)取消部分事務(wù)。用戶可以在單個(gè)事物中擁有多個(gè)保存點(diǎn),當(dāng)使用ROLLBACKTOSAVEPOINT時(shí),可以讓用戶有選擇地回滾到事物處理中的某特定位置.(4)取消部分事務(wù)(ROLLBACKTOSAVEPOINT)為了取消部分事務(wù),可以使用ROLLBACKTOSAVEPOINT命令,也可以調(diào)用包dbms_transaction中過(guò)程rollback(5)設(shè)置事務(wù)只讀屬性設(shè)置事務(wù)屬性的命令為:SETTRANSACTIONREADONLY只讀事務(wù)是指只允許執(zhí)行查詢操作,而不允許執(zhí)行任何數(shù)據(jù)更新操作的事務(wù)。使用SETTRANSACTIONREADONLY命令可以確保用戶無(wú)法執(zhí)行修改數(shù)據(jù)的操作,通過(guò)設(shè)置只讀事務(wù),可以有效地將數(shù)據(jù)庫(kù)視圖凍結(jié)到某個(gè)時(shí)間點(diǎn)。也就是說(shuō),無(wú)論數(shù)據(jù)庫(kù)其他會(huì)話如何工作,都不會(huì)改變只讀事務(wù)讀到的數(shù)據(jù)。假定企業(yè)需要在每天16點(diǎn)統(tǒng)計(jì)最近24小時(shí)的銷售信息,而不統(tǒng)計(jì)當(dāng)天16點(diǎn)之后的銷售信息,那么就可以使用只讀事務(wù),在設(shè)置了只讀事務(wù)之后,盡管其他會(huì)話可能會(huì)提交事務(wù),但只讀事務(wù)將不會(huì)取得新的數(shù)據(jù)變化,從而確保取得特定時(shí)間點(diǎn)的數(shù)據(jù)信息6.2并發(fā)控制6.2.1并發(fā)操作引起的問(wèn)題6.2.2封鎖6.2.3封鎖出現(xiàn)的問(wèn)題及解決方法6.2.4可串行化調(diào)度6.2.5ORACLE的并發(fā)控制機(jī)制返回首頁(yè)6.2.1并發(fā)操作引起的問(wèn)題對(duì)事務(wù)的并發(fā)執(zhí)行如果不加以控制,可能會(huì)導(dǎo)致數(shù)據(jù)庫(kù)中數(shù)據(jù)的不一致性。一個(gè)最常見(jiàn)的并發(fā)操作的例子是飛機(jī)訂票系統(tǒng)中的訂票操作。例如,在該系統(tǒng)中的一個(gè)活動(dòng)的序列:(1)事務(wù)T1(動(dòng)作1):甲售票員讀出某航班的機(jī)票余額A,設(shè)A=16。(2)事務(wù)T2(動(dòng)作1):乙售票員讀出同一航班的機(jī)票余額,A也為16。(3)事務(wù)T1(動(dòng)作2):甲售票員賣(mài)出一張機(jī)票,修改機(jī)票余額A←A-1,所以A=15,把A寫(xiě)入數(shù)據(jù)庫(kù)。(4)事務(wù)T2(動(dòng)作2):乙售票員賣(mài)出兩張機(jī)票,修改機(jī)票余額A←A-2,所以A=14,把A寫(xiě)入數(shù)據(jù)庫(kù)。并發(fā)操作如果不加以控制,就可能引發(fā)下列數(shù)據(jù)的不一致性:1.丟失修改(LostUpdate)2.不可重復(fù)讀(UnrepeatableRead)3.讀“臟”數(shù)據(jù)(DirtyRead)1.丟失修改(LostUpdate)丟失修改是指事務(wù)T1與事務(wù)T2從數(shù)據(jù)庫(kù)中讀入同一數(shù)據(jù)并修改,事務(wù)T2提交的修改結(jié)果破壞了事務(wù)T1提交的修改結(jié)果,導(dǎo)致事務(wù)T1的修改被丟失。丟失修改的情況如圖6-2所示。調(diào)度時(shí)刻事務(wù)T1事務(wù)T2t1讀A=16

t2

讀A=16t3A=A-1寫(xiě)回A=15

t4

A=A-2寫(xiě)回A=14(覆蓋了T1對(duì)A的修改)圖6-2丟失修改2.不可重復(fù)讀(UnrepeatableRead)即事務(wù)T1兩次讀取同一數(shù)據(jù)項(xiàng)A的內(nèi)容不一致。究其原因,是在兩次讀操作之間,事務(wù)T2也修改了數(shù)據(jù)項(xiàng)A。不可重復(fù)讀的情況如圖6-3所示。調(diào)度時(shí)刻事務(wù)T1事務(wù)T2t1讀A=50讀B=100求和=150

t2

讀B=100B←B*2寫(xiě)回B=200t3讀A=50讀B=200求和=250(驗(yàn)算不對(duì))

圖6-3不可重復(fù)讀3.讀“臟”數(shù)據(jù)(DirtyRead)即事務(wù)T1讀取了經(jīng)過(guò)事務(wù)T2修改過(guò)的數(shù)據(jù),但是由于事務(wù)T2因?yàn)榱鳟a(chǎn)而撤消了對(duì)該數(shù)據(jù)的修改,數(shù)據(jù)庫(kù)恢復(fù)到事務(wù)T2執(zhí)行前的狀態(tài),從而導(dǎo)致事務(wù)T1讀取的內(nèi)容與數(shù)據(jù)庫(kù)中的內(nèi)容不一致。讀“臟”數(shù)據(jù)的情況如圖6-4所示。調(diào)度時(shí)刻事務(wù)T1事務(wù)T2t1

讀B=100B←B*2寫(xiě)回B=200t2讀B=200(讀入T2的臟數(shù)據(jù))

t3

ROLLBACK(B恢復(fù)為100)圖6-4讀“臟”數(shù)據(jù)返回本節(jié)6.2.2封鎖1.封鎖的類型DBMS通常提供了多種類型的封鎖。一個(gè)事務(wù)對(duì)某個(gè)數(shù)據(jù)對(duì)象加鎖后究竟擁有什么樣的控制是由封鎖類型決定的?;镜姆怄i類型有兩種:排它鎖(ExclusiveLock,簡(jiǎn)稱X鎖)和共享鎖(ShareLock,簡(jiǎn)稱為S鎖)。(1)排它鎖。(2)共享鎖。2.保證數(shù)據(jù)一致性的封鎖協(xié)議——三級(jí)封鎖協(xié)議所謂封鎖協(xié)議就是在對(duì)數(shù)據(jù)庫(kù)加鎖、持鎖和釋放鎖時(shí)所約定的一些規(guī)則。例如,應(yīng)何時(shí)申請(qǐng)X鎖或S鎖、持鎖時(shí)間、何時(shí)釋放等。不同的封鎖規(guī)則形成了不同的封鎖協(xié)議,下面介紹三級(jí)封鎖協(xié)議。(1)一級(jí)封鎖協(xié)議。(2)二級(jí)封鎖協(xié)議。(3)三級(jí)封鎖協(xié)議(1)一級(jí)封鎖協(xié)議。一級(jí)封鎖協(xié)議是事務(wù)T在修改數(shù)據(jù)之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束才釋放。一級(jí)封鎖協(xié)議可有效防止丟失修改,并保證事務(wù)T是可恢復(fù)的。例如,圖6-6使用一級(jí)封鎖協(xié)議解決了圖6-2中的丟失修改問(wèn)題。調(diào)度時(shí)刻事務(wù)T1事務(wù)T2t1獲得XlockA

t2讀A=16XlockA等待t3A=A-1寫(xiě)回A=15CommitUnlockA等待等待等待t4

獲得XlockA讀A=15A=A-2寫(xiě)回A=13CommitUnlockA圖6-6沒(méi)有丟失修改(2)二級(jí)封鎖協(xié)議。二級(jí)封鎖協(xié)議是在一級(jí)封鎖協(xié)議加上事務(wù)T對(duì)要讀取的數(shù)據(jù)加S鎖,讀完后即可釋放S鎖。二級(jí)封鎖協(xié)議除防止了丟失修改還可進(jìn)一步防止讀“臟”數(shù)據(jù)。例如,圖6-7使用二級(jí)封鎖協(xié)議解決了圖6-4中讀“臟”數(shù)據(jù)的問(wèn)題。調(diào)度時(shí)刻事務(wù)T1事務(wù)T2t1

XlockB讀B=100B←B*2寫(xiě)回B=200t2SlockB等待

t3

ROLLBACK(B恢復(fù)為100)UnlockBt4獲得SlockB讀B=100UnlockB

圖6-7不讀“臟”數(shù)據(jù)(3)三級(jí)封鎖協(xié)議。三級(jí)封鎖協(xié)議是事務(wù)T在讀取數(shù)據(jù)之前必須先對(duì)其加S鎖,在要修改數(shù)據(jù)之前必須先對(duì)其加X(jué)鎖,直到事務(wù)結(jié)束后才釋放所有的鎖。例如圖6-8使用了三級(jí)封鎖協(xié)議解決了圖6-3中的不可重復(fù)讀問(wèn)題。調(diào)度時(shí)刻事務(wù)T1事務(wù)T2t1SlockA讀A=50SlockB讀B=100求和=150

t2

XlockB等待t3讀A=50讀B=100求和=150CommitUnlockAUnlockB等待t4

獲得Xlock讀B=100B←B*2寫(xiě)回B=200CommitUnlockB圖6-8可重復(fù)讀封鎖

協(xié)議X鎖S鎖不丟失

修改不讀臟

數(shù)據(jù)可重

復(fù)讀一級(jí)事務(wù)全程加鎖不加鎖√

二級(jí)事務(wù)全程加鎖事務(wù)開(kāi)始加鎖,讀完即釋放√√

三級(jí)事務(wù)全程加鎖事務(wù)全程加鎖√√√表6-1不同級(jí)別的封鎖協(xié)議返回本節(jié)6.2.3封鎖出現(xiàn)的問(wèn)題及解決方法1.活鎖在多個(gè)事務(wù)請(qǐng)求對(duì)同一數(shù)據(jù)封鎖時(shí),總是使某一事務(wù)等待的情況稱為活鎖。例如:如果事務(wù)T1封鎖了數(shù)據(jù)R后,T2也請(qǐng)求封鎖R,于是T2等待。接著T3也請(qǐng)求封鎖R。假如T1釋放R上的鎖后,系統(tǒng)首先批準(zhǔn)了T3的請(qǐng)求,T2只得繼續(xù)等待。接著T4也請(qǐng)求封鎖R,T3釋放R上的鎖后,系統(tǒng)又批準(zhǔn)了T4的請(qǐng)求,……,T2有可能就這樣永遠(yuǎn)等待下去。2.死鎖多個(gè)并發(fā)事務(wù)處于相互等待的狀態(tài),其中的每一個(gè)事務(wù)都在等待它們中的另一個(gè)事務(wù)釋放封鎖,這樣才可以繼續(xù)執(zhí)行下去,但任何一個(gè)事務(wù)都沒(méi)有釋放自己已獲得的鎖,也無(wú)法獲得其他事務(wù)已擁有的鎖,所以只好相互等待下去,這就產(chǎn)生了死鎖。調(diào)度時(shí)刻事務(wù)T1事務(wù)T2t1XlockA

t2

XlockBt3XlockB等待

t4

XlockA等待…圖6-9死鎖目前在數(shù)據(jù)庫(kù)中解決死鎖問(wèn)題主要有兩類方法,一類方法是采取一定措施來(lái)預(yù)防死鎖的發(fā)生,另一類方法是允許發(fā)生死鎖,然后采用一定手段定期診斷系統(tǒng)中有無(wú)死鎖,若有則解除之。(1)死鎖的預(yù)防。1)一次封鎖法。2)順序封鎖法。(2)死鎖的檢測(cè)與解除。返回本節(jié)6.2.4可串行化調(diào)度所謂的兩段鎖協(xié)議是指所有事務(wù)必須分兩個(gè)階段對(duì)數(shù)據(jù)項(xiàng)進(jìn)行加鎖和解鎖。具體體現(xiàn)在:(1)在對(duì)任何數(shù)據(jù)進(jìn)行讀、寫(xiě)操作之前,事務(wù)首先要獲得對(duì)該數(shù)據(jù)的封鎖;(2)釋放一個(gè)封鎖之后,事務(wù)不再申請(qǐng)并獲得對(duì)任何數(shù)據(jù)的封鎖。所謂兩段鎖的含義是:事務(wù)分為兩個(gè)階段,第一階段是獲得封鎖,也稱為擴(kuò)展階段。在這個(gè)階段,事務(wù)可以申請(qǐng)獲得任何數(shù)據(jù)項(xiàng)上的任何類型的鎖,但不能釋放任何鎖。第二階段是釋放封鎖,也稱為收縮階段。在這個(gè)階段,事務(wù)可以釋放任何數(shù)據(jù)項(xiàng)上的任何類型的鎖,但是不能申請(qǐng)任何鎖。返回本節(jié)6.2.5ORACLE的并發(fā)控制機(jī)制Oracle通過(guò)支持事務(wù)并發(fā)控制機(jī)制來(lái)管理多個(gè)事務(wù),保證事務(wù)的一致性,并使用事務(wù)日志保證修改的完整性和可恢復(fù)性.在通常情況下,數(shù)據(jù)鎖由系統(tǒng)隱含完成,用戶不用考慮封鎖問(wèn)題,但Oracle也允許用戶用LOCKTABLE命令顯式對(duì)封鎖對(duì)象加鎖1.Oracle鎖的類型Oracle的鎖分為兩大類:數(shù)據(jù)鎖(DML鎖)和字典鎖.Oracle的數(shù)據(jù)鎖有5種:共享鎖(S鎖)、排它鎖(X鎖),行級(jí)共享鎖(RS鎖)、行級(jí)排它鎖(RX鎖)和共享行級(jí)排它鎖(SRX鎖),其封鎖粒度包括行級(jí)和表級(jí)2.Oracle數(shù)據(jù)鎖的一個(gè)特點(diǎn)在默認(rèn)情況下,讀數(shù)據(jù)不加鎖。也就是說(shuō),當(dāng)一個(gè)用戶更新數(shù)據(jù)時(shí),另一個(gè)用戶可以同時(shí)讀取相應(yīng)數(shù)據(jù)。Oracle通過(guò)一個(gè)被稱之為回滾段的內(nèi)存結(jié)構(gòu)來(lái)保證用戶不讀“臟”數(shù)據(jù)和可重復(fù)讀。這樣可以提高數(shù)據(jù)的并發(fā)度6.3數(shù)據(jù)庫(kù)恢復(fù)6.3.1數(shù)據(jù)庫(kù)系統(tǒng)的故障6.3.2數(shù)據(jù)庫(kù)備份技術(shù)6.3.3數(shù)據(jù)庫(kù)恢復(fù)策略返回首頁(yè)6.3.1數(shù)據(jù)庫(kù)系統(tǒng)的故障1.事務(wù)故障2.系統(tǒng)故障3.介質(zhì)故障返回本節(jié)6.3.2數(shù)據(jù)庫(kù)備份技術(shù)1.?dāng)?shù)據(jù)轉(zhuǎn)儲(chǔ)2.日志文件1.?dāng)?shù)據(jù)轉(zhuǎn)儲(chǔ)(1)靜態(tài)轉(zhuǎn)儲(chǔ)和動(dòng)態(tài)轉(zhuǎn)儲(chǔ)。1)靜態(tài)轉(zhuǎn)儲(chǔ)是在系統(tǒng)中沒(méi)有運(yùn)行其他事務(wù)時(shí)進(jìn)行的轉(zhuǎn)儲(chǔ)操作。2)動(dòng)態(tài)轉(zhuǎn)儲(chǔ)是指轉(zhuǎn)儲(chǔ)操作與用戶事務(wù)并發(fā)進(jìn)行,轉(zhuǎn)儲(chǔ)期間允許對(duì)數(shù)據(jù)庫(kù)進(jìn)行存取或修改。(2)海量轉(zhuǎn)儲(chǔ)和增量轉(zhuǎn)儲(chǔ)。海量轉(zhuǎn)儲(chǔ)是指每次轉(zhuǎn)儲(chǔ)全部數(shù)據(jù)庫(kù)。增量轉(zhuǎn)儲(chǔ)是指轉(zhuǎn)儲(chǔ)上次轉(zhuǎn)儲(chǔ)后更新過(guò)的數(shù)據(jù)。2.日志文件(1)日志文件的格式和內(nèi)容。各個(gè)事務(wù)的開(kāi)始(BEGINTRANSACTION)標(biāo)記。事務(wù)標(biāo)識(shí)(標(biāo)明是哪個(gè)事務(wù))。操作的類型(插入、刪除或修改)。操作對(duì)象。更新前數(shù)據(jù)的舊值(對(duì)插入操作而言,此項(xiàng)為空值)。更新后數(shù)據(jù)的新值(對(duì)刪除操作而言,此項(xiàng)為空值)。各個(gè)事務(wù)的結(jié)束(COMMIT或ROLLBACK)標(biāo)記。(2)登記日志文件。返回本節(jié)6.3.3數(shù)據(jù)庫(kù)恢復(fù)策略1.事務(wù)故障的恢復(fù)具體的恢復(fù)步驟為:(1)反向掃描文件日志(即從最后向前掃描日志文件),查找該事務(wù)

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論