數(shù)據(jù)庫原理及應(yīng)用開發(fā)技術(shù)_事務(wù)管理6.ppt_第1頁
數(shù)據(jù)庫原理及應(yīng)用開發(fā)技術(shù)_事務(wù)管理6.ppt_第2頁
數(shù)據(jù)庫原理及應(yīng)用開發(fā)技術(shù)_事務(wù)管理6.ppt_第3頁
數(shù)據(jù)庫原理及應(yīng)用開發(fā)技術(shù)_事務(wù)管理6.ppt_第4頁
數(shù)據(jù)庫原理及應(yīng)用開發(fā)技術(shù)_事務(wù)管理6.ppt_第5頁
已閱讀5頁,還剩51頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

講義六 事務(wù)管理 主要內(nèi)容 事務(wù)的概念恢復(fù)措施并發(fā)控制小結(jié) 6 1事務(wù)的概念 事務(wù) 構(gòu)成單一邏輯工作單元的操作的集合事務(wù)是由一系列的對數(shù)據(jù)庫的查詢操作和更新操作構(gòu)成 這些操作是一個整體 不能分割 事務(wù)要么所有的操作都順利完成 要么一個操作也不要做 絕不能只完成了部分操作 而還有一些操作沒有完成 DBMS中的事務(wù)管理子系統(tǒng)負(fù)責(zé)事務(wù)的處理 1 原子性 Atomicity 一個事務(wù)中的所有操作 是一個邏輯上不可分割的單位 2 一致性 Consistency 數(shù)據(jù)庫處于一個一致性狀態(tài)是指數(shù)據(jù)庫中的數(shù)據(jù)滿足各種完整性約束 1事務(wù)的特性 3 隔離性 Isolation 隔離性的含義是指無論同時有多少事務(wù)在執(zhí)行 DBMS會保證事務(wù)之間互不干擾 就像只有一個事務(wù)在運行一樣 4 持久性 Durability DBMS的恢復(fù)子系統(tǒng)采用日志和備份技術(shù)保證事務(wù)的持久性 事務(wù)的這四個特性一般簡稱為事務(wù)的ACID特性 1事務(wù)的特性 1 啟動事務(wù) BEGINTRANSACTION 2 提交事務(wù)COMMITTRANSACTION 3 回滾語句ROLLBACKTRANSACTION 2事務(wù)的語句 例 在運輸部門的訂票數(shù)據(jù)庫一個完整事務(wù) 開始事務(wù) 1 查詢某趟車次TrainNo的剩余車票 2 插入訂票記錄ReservedTicket 3 更新剩余票額Ticket的數(shù)量 提交事務(wù) 3事務(wù)舉例 Select TSum TicketSum 取出剩余車票數(shù)量FromTrainTicketWhereTrainNo D123 IF TSum 0 沒有剩余車票ROLLBACKTRANSACTION 回滾事務(wù)ELSEBEGINTRANSACTIONINSERTINTOReservedTicketvalues 車次 發(fā)站 到站 座位號 票價 日期 UPDATETrainTicketSETTicketSum TicketSum 1whereTicketNo D123 COMMITTRANSACTION 提交事務(wù)END 3事務(wù)舉例 4事務(wù)狀態(tài) 事務(wù)必須處于下列狀態(tài)之一活動狀態(tài) 初始狀態(tài) 事務(wù)執(zhí)行時處于這個狀態(tài)部分提交狀態(tài) 最后一條語句執(zhí)行后失敗狀態(tài) 發(fā)現(xiàn)正常的執(zhí)行不能繼續(xù)之后中止?fàn)顟B(tài) 事務(wù)回滾并且數(shù)據(jù)庫已恢復(fù)到事務(wù)開始執(zhí)行前的狀態(tài)之后提交狀態(tài) 成功完成后 6 2事務(wù)恢復(fù) DBMS中的數(shù)據(jù)如何流動的 圖 數(shù)據(jù)的流動 標(biāo)號 和 的流程分別是讀操作和寫操作的數(shù)據(jù)流動過程 6 2事務(wù)恢復(fù) 恢復(fù)機制 1 數(shù)據(jù)庫系統(tǒng)必不可少的組成部分 負(fù)責(zé)將數(shù)據(jù)庫恢復(fù)到故障發(fā)生前的某個一致的狀態(tài) 2 高可用性 盡快恢復(fù)數(shù)據(jù)庫功能 使崩潰的數(shù)據(jù)庫不能使用的時間減少到最小 1 事務(wù)故障事務(wù)在運行過程中 如果出現(xiàn)運算溢出 違反了某些完整性規(guī)則 某些應(yīng)用程序的錯誤 以及并發(fā)事務(wù)發(fā)生死鎖等 使事務(wù)不能繼續(xù)執(zhí)行下去 這種情況稱為事務(wù)故障 非法輸入 溢出或超出資源限制等 1故障種類 2 系統(tǒng)故障系統(tǒng)故障是指系統(tǒng)在運行過程中 由于某種原因 如操作系統(tǒng)或DBMS代碼錯誤 操作員操作失誤 特定類型的硬件錯誤 如CPU故障 突然停電等造成系統(tǒng)停止運行 丟失了系統(tǒng)緩沖區(qū)中的數(shù)據(jù) 而存儲在磁盤中的數(shù)據(jù)未受到影響 1故障種類 3 介質(zhì)故障系統(tǒng)在運行過程中 由于某種硬件故障 如磁盤壞損 磁頭碰撞 或由于操作系統(tǒng)的某種潛在的錯誤 瞬時強磁場干擾 使存儲在外存上的數(shù)據(jù)部分損失或全部損失 稱為介質(zhì)故障 這類故障比前兩類故障的可能性小的多 但破壞性最大 所有正在運行的事務(wù)被中止 系統(tǒng)緩沖區(qū)中的數(shù)據(jù)無法寫到磁盤 存儲在磁盤上的數(shù)據(jù)全部丟失 1故障種類 2恢復(fù)措施 1 日志文件事務(wù)由一系列對數(shù)據(jù)庫的讀寫操作組成 按照操作執(zhí)行的先后次序 記錄下事務(wù)所執(zhí)行的所有對數(shù)據(jù)庫的寫操作 更新操作 就構(gòu)成了事務(wù)的日志文件 日志文件的格式和內(nèi)容日志文件從邏輯上來看是由若干條記錄構(gòu)成的 這些記錄叫做日志記錄 同一個事務(wù)的日志記錄組織成了一個鏈表 日志文件示意圖 2恢復(fù)措施 日志文件示意圖在圖中 圖 a 為向一個表中插入一條記錄 出錯了 則終止事物執(zhí)行 圖 b 中給出Update記錄的內(nèi)部結(jié)構(gòu) T1表示發(fā)出操作的是事務(wù)T1 U表示操作類型是修改 Update Ticket TicketSum 表示修改的數(shù)據(jù)對象是TrainTicket表的TicketSum列 修改前的值是80 修改后的值是79 2恢復(fù)措施 日志文件記錄日志文件由若干記錄組成 記錄有三種類型 一是記錄事務(wù)的開始 用Begin表示 主要記錄事務(wù)的內(nèi)部標(biāo)識和開始時間 二是記錄事務(wù)的結(jié)束 圖中用Rollback和Commit表示 主要記錄事務(wù)的內(nèi)部標(biāo)識和結(jié)束時間 三是記錄事務(wù)的更新操作 2恢復(fù)措施 日志文件記錄信息其中事務(wù)的更新操作用Update表示 更新要記錄以下的信息 1 事務(wù)標(biāo)識 標(biāo)明是哪個事務(wù) 2 操作的類型 插入 刪除或修改 3 操作對象 記錄內(nèi)部標(biāo)識 4 更新前數(shù)據(jù)的舊值 對插入操作而言 此項為空值 5 更新后數(shù)據(jù)的新值 對刪除操作而言 此項為空值 2恢復(fù)措施 2 登記日志文件日志文件為數(shù)據(jù)庫的數(shù)據(jù)建立了副本 冗余 為了保證數(shù)據(jù)庫數(shù)據(jù)的可恢復(fù)性 必須堅持先寫日志 后寫數(shù)據(jù)的原則 事務(wù)更新了某個數(shù)據(jù)后 把數(shù)據(jù)由工作區(qū)復(fù)制到系統(tǒng)緩沖區(qū) 同時形成了一條日志記錄 該日志記錄也被存放到系統(tǒng)緩沖區(qū) DBMS保證 把更新后的數(shù)據(jù)由系統(tǒng)緩沖區(qū)移動到數(shù)據(jù)庫之前 要首先把相應(yīng)的日志記錄寫到日志文件中 這叫做先寫日志規(guī)則 2恢復(fù)措施 3 登記日志文件步驟第一步 事務(wù)把更新后的數(shù)據(jù)和形成的日志記錄寫到系統(tǒng)緩沖區(qū) 第二步 將日志記錄寫到磁盤上的日志文件 第三步 把更新后的數(shù)據(jù)寫到數(shù)據(jù)庫 2恢復(fù)措施 4 數(shù)據(jù)庫備份為了處理介質(zhì)故障 需要由DBA定期地將數(shù)據(jù)庫和日志文件復(fù)制到磁帶或磁盤上 并將這些備用的數(shù)據(jù)文本妥善地保存起來 當(dāng)數(shù)據(jù)庫遭到破壞時就可以將后備副本重新裝入 恢復(fù)數(shù)據(jù)庫 2恢復(fù)措施 4 數(shù)據(jù)庫備份制做備份的過程稱為轉(zhuǎn)儲 轉(zhuǎn)儲是十分耗費時間和資源的 不能頻繁進行 DBA應(yīng)根據(jù)應(yīng)用情況確定適當(dāng)?shù)霓D(zhuǎn)儲時間和周期 轉(zhuǎn)儲可以分為增量轉(zhuǎn)儲和海量轉(zhuǎn)儲 海量轉(zhuǎn)儲是指每次轉(zhuǎn)儲全部數(shù)據(jù)庫 而增量轉(zhuǎn)儲是指每次轉(zhuǎn)儲上次轉(zhuǎn)儲后修改過的數(shù)據(jù) 轉(zhuǎn)儲還可分為靜態(tài)轉(zhuǎn)儲和動態(tài)轉(zhuǎn)儲 靜態(tài)轉(zhuǎn)儲是指系統(tǒng)停止對外服務(wù) 不允許用戶運行事務(wù) 只進行轉(zhuǎn)儲操作 動態(tài)轉(zhuǎn)儲是指轉(zhuǎn)儲期間允許用戶對數(shù)據(jù)庫進行存取操作 即轉(zhuǎn)儲和用戶事務(wù)可以并發(fā)執(zhí)行 2恢復(fù)措施 5 故障恢復(fù)事務(wù)故障恢復(fù)事務(wù)未運行至正常終止點前被DBMS或用戶撤消 這時恢復(fù)子系統(tǒng)對此事務(wù)做UNDO處理 具體做法 反向閱讀日志文件 找出該事務(wù)的所有更新操作 對每一個更新操作做它的逆操作 即若記錄中是插入操作 則做刪除操作 若記錄中是刪除操作 則做插入操作 若是修改操作 則用修改前的值代替修改后的值 如此處理直至讀到此事務(wù)的開始標(biāo)簽 事務(wù)故障恢復(fù)完成 2恢復(fù)措施 5 故障恢復(fù)系統(tǒng)故障恢復(fù)造成數(shù)據(jù)庫不一致狀態(tài)的原因有兩個 一是由于一些未完成事務(wù)對數(shù)據(jù)庫的更新已寫入數(shù)據(jù)庫 二是由于一些已提交事務(wù)對數(shù)據(jù)庫的更新還留在緩沖區(qū)沒來得及寫入數(shù)據(jù)庫 系統(tǒng)故障恢復(fù)是在系統(tǒng)重新啟動以后進行的 基本的恢復(fù)算法分為二步 1 根據(jù)日志文件建立重作隊列和撤消隊列2 對UNDO隊列中的事務(wù)進行UNDO處理 對REDO隊列中事務(wù)的進行REDO處理 2恢復(fù)措施 5 故障恢復(fù)介質(zhì)故障恢復(fù)在發(fā)生介質(zhì)故障時 磁盤上的物理數(shù)據(jù)庫被破壞 因此 需要重裝最后一次備份的數(shù)據(jù)庫備份 但重裝副本只能將數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲時的狀態(tài) 從那以后的所有更新事務(wù)必須重新運行才能恢復(fù)到故障時的狀態(tài) 2恢復(fù)措施 6 恢復(fù)過程示例舉例 系統(tǒng)在t1時刻停止運行事務(wù) 進行數(shù)據(jù)庫轉(zhuǎn)儲 在t2時刻轉(zhuǎn)儲完畢 得到t2時刻的數(shù)據(jù)庫的一致性副本 當(dāng)系統(tǒng)運行到tn時刻發(fā)生故障 運行事務(wù) 介質(zhì)故障恢復(fù)過程 t1 t2 tn 故障點 轉(zhuǎn)儲完畢 轉(zhuǎn)儲開始 2恢復(fù)措施 6 恢復(fù)過程示例重裝轉(zhuǎn)儲的數(shù)據(jù)庫副本 使數(shù)據(jù)庫恢復(fù)到轉(zhuǎn)儲時的一致狀態(tài) 裝入轉(zhuǎn)儲后備份的第一個日志文件讀日志文件 找出已提交的事務(wù) 按提交次序的先后將其記入REDO隊列 重做REDO隊列中每個事務(wù)的所有更新操作 裝入下一個日志文件重復(fù)上一步 直至處理完所有的日志文件 這時數(shù)據(jù)庫恢復(fù)至故障前一時刻的一致狀態(tài) 2恢復(fù)措施 6 3并發(fā)控制 DBMS為了有效的利用計算機的硬件資源和數(shù)據(jù)庫中的數(shù)據(jù) 允許多個事務(wù)并發(fā)執(zhí)行 但事務(wù)的并發(fā)執(zhí)行可能出現(xiàn)諸如丟失修改 讀臟數(shù)據(jù) 不可重復(fù)讀問題 使數(shù)據(jù)庫處于不一致性的狀態(tài) 為了防止并發(fā)執(zhí)行產(chǎn)生的問題 DBMS需要具備并發(fā)控制的功能 并發(fā)控制常用的方法有封鎖法 時間印法和樂觀控制法 商用的DBMS一般都采用封鎖法 并發(fā)控制由DBMS中的調(diào)度器 事務(wù)管理器以及存儲子系統(tǒng)協(xié)同完成并發(fā)控制 6 3并發(fā)控制 并發(fā)控制示意圖 作用 實現(xiàn)可串行化調(diào)度采用串行調(diào)度來保證數(shù)據(jù)庫處于一致性狀態(tài)本節(jié)中對數(shù)據(jù)庫的操作用更底層的讀操作和寫操作來描述并發(fā)控制 用R x 表示對數(shù)據(jù)x的讀操作W x 表示對數(shù)據(jù)x的寫操作 一個事務(wù)由若干的讀操作和寫操作組成 SQL中的SELECT語句可以用一串讀操作表示 INSERT語句可以用一串寫操作表示 UPDATE和DELETE可以用一串讀寫操作表示 6 3并發(fā)控制 舉例 假設(shè)有兩個售票員同時運行售票的事務(wù) 分別用T1和T2表示 事務(wù)用底層操作可以表示為 W A R B W B W A 表示向ReservedTicket表插入一個元組 R B 和W B 表示讀 寫Ticket表的TicketSum列 因為一個UPDATE語句首先要讀出TicketSum上的值 然后才能做加1運算 所以 UPDATE語句要使用兩個底層操作 1并發(fā)產(chǎn)生的問題 并發(fā)執(zhí)行一 在t1 t2和t3時刻售票1的事務(wù)的三個操作被送到DBMS的存取層 并立刻獲得執(zhí)行 在t4 t5和t6時刻執(zhí)行售票2的三個操作 執(zhí)行的結(jié)果和我們預(yù)期的結(jié)果完全相同 如右圖所示 兩個事務(wù)的執(zhí)行是實際上是串行執(zhí)行 先執(zhí)行完T1 再執(zhí)行T2 1并發(fā)產(chǎn)生的問題 并發(fā)執(zhí)行二 如右圖所示 T1和T2的操作穿插執(zhí)行 結(jié)果是T1的修改操作沒有起到應(yīng)有的作用 這種現(xiàn)象稱為 丟失修改 1并發(fā)產(chǎn)生的問題 并發(fā)執(zhí)行三 售票1執(zhí)行事務(wù)T1 但是在確認(rèn)是否真正買票時 他放棄了買票 事務(wù)被回滾 具體的執(zhí)行過程如右圖所示 T2的售票操作也沒有獲得成功 原因是在T1沒有結(jié)束時 就讀了ticketsum 這種現(xiàn)象叫做 讀臟數(shù)據(jù) 1并發(fā)產(chǎn)生的問題 并發(fā)執(zhí)行四 T1在執(zhí)行過程中讀了兩次ticketsum 但是發(fā)現(xiàn)ticketsum的兩次余額不一樣 由于不知道發(fā)生了什么情況而將T1撤消了 原因是在兩個讀操作中間執(zhí)行了另外的事務(wù)T2 這種現(xiàn)象叫做 不可重復(fù)讀 1并發(fā)產(chǎn)生的問題 2鎖 類型 S鎖和X鎖S鎖又被稱為共享鎖 ShareLocks X鎖又被叫做排它鎖 eXclusiveLocks 共享鎖又稱為讀鎖 若事務(wù)T對數(shù)據(jù)對象A加上S鎖 則事務(wù)T可以讀A但不能修改A 其它事務(wù)只能再對A加S鎖 而不能加X鎖 直到T釋放A上的S鎖 這就保證了其它事務(wù)可以讀A 但在T釋放A上的S鎖之前不能對A做任何修改 2 排它鎖排它鎖又稱為寫鎖 若事務(wù)T對數(shù)據(jù)對象A加上X鎖 則只允許T讀取和修改A 其它任何事務(wù)都不能再對A加任何類型的鎖 直到T釋放A上的鎖 這就保證了其它事務(wù)在T釋放A上的鎖之前不能讀取和修改A 封鎖類型的相容矩陣 Y Yes 相容的請求N No 不相容的請求 2鎖 封鎖級別對數(shù)據(jù)對象加鎖所采用的規(guī)則 一級封鎖協(xié)議 事務(wù)T在修改數(shù)據(jù)R之前必須先對其加X鎖 直到事務(wù)結(jié)束才釋放 事務(wù)結(jié)束包括正常結(jié)束 COMMIT 和非正常結(jié)束 ROLLBACK 可防止 丟失修改不能防止 可重復(fù)讀和不讀 臟 數(shù)據(jù) 2鎖 封鎖級別 二級封鎖協(xié)議 實施一級封鎖協(xié)議 并且事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖 讀完后即可釋放S鎖 二級封鎖協(xié)議除防止了丟失修改 還可進一步防止讀 臟 數(shù)據(jù) 由于讀完數(shù)據(jù)后即可釋放S鎖 所以它不能保證可重復(fù)讀 2鎖 封鎖級別三級封鎖協(xié)議 實施一級封鎖協(xié)議 并且事務(wù)T在讀取數(shù)據(jù)R之前必須先對其加S鎖 直到事務(wù)結(jié)束才釋放 三級封鎖協(xié)議除防止了丟失修改和不讀 臟 數(shù)據(jù)外 還進一步防止了不可重復(fù)讀 2鎖 兩階段封鎖協(xié)議 加鎖和解鎖 兩階段 是獲得鎖的第一階段和釋放鎖的第二階段一個事務(wù)中一旦開始釋放鎖 就不能再申請新鎖了 事務(wù)的加鎖和解鎖嚴(yán)格分為兩個階段 第一階段加鎖 第二階段解鎖 可實現(xiàn)并發(fā)的串行化調(diào)度 2鎖 加鎖內(nèi)容包括 在事務(wù)T的R A 操作之前 先對A加S鎖 如果加鎖成功 則執(zhí)行操作R A 否則 將R A 加入A的等待隊列 在事務(wù)T的W A 操作之前 先對A加X鎖 如果加鎖成功 則執(zhí)行操作W A 否則 將W A 加入A的等待隊列 2鎖 解鎖內(nèi)容包括 在收到事務(wù)的Abort或Commit請求后 釋放T在每個數(shù)據(jù)上所加的鎖 如果在數(shù)據(jù)A的等待隊列中不空 即有其它的事務(wù)等待對A進行操作 則從隊列中取出第一個操作 完成加鎖 然后執(zhí)行該操作 執(zhí)行Abort和Commit請求后 不再接收該事務(wù)的讀寫操作 2鎖 兩階段封鎖協(xié)議舉例 事務(wù)1的封鎖序列 SlockA SlockB XlockC UnlockC UnlockB UnlockA 事務(wù)2的封鎖序列 SlockA UnlockA SlockB XlockC UnlockC UnlockB 事務(wù)1遵守兩段鎖協(xié)議 而事務(wù)2不遵守兩段協(xié)議 2鎖 封鎖粒度封鎖對象的大小稱為封鎖粒度 封鎖對象可以是邏輯單位 這時的粒度可以是數(shù)據(jù)庫 表 元組 屬性 封鎖對象也可以是物理單位 這時的封鎖對象可以是數(shù)據(jù)塊 物理記錄 不同的粒度會影響事務(wù)的并發(fā)度 2鎖 兩個事務(wù)造成的死鎖問題 2鎖 DBMS的并發(fā)控制子系統(tǒng)保證了事務(wù)的隔離性 盡管同時有很多事務(wù)在使用系統(tǒng) 但是它們互不干擾 就像單獨使用系統(tǒng)一樣 不會出現(xiàn)丟失修改 讀臟數(shù)據(jù) 不可重復(fù)讀等問題 對于一些只讀事務(wù) 有時可以忍受讀臟數(shù)據(jù) 不可重復(fù)讀等問題 為了加快它的執(zhí)行 不需要嚴(yán)格的按照兩段鎖協(xié)議運行 SQL提供的隔離級別設(shè)置語句能滿足這個要求 3隔離級別 隔離級別考慮因素是否在讀數(shù)據(jù)的時候使用鎖讀鎖持續(xù)多長時間在讀數(shù)據(jù)的時候使用何種類型的鎖SETTRANSACTIONISOLATIONLEVEL READUNCOMMITTED READCOMMITTED REPEATABLEREAD SERIALIZABLE 3隔離級別 1 READUNCOMMITTED執(zhí)行事務(wù)的讀操作之前不對數(shù)據(jù)對象加S鎖 可能會讀到未完成事務(wù)的操作結(jié)果 臟數(shù)據(jù) 不能重復(fù)讀 2 READCOMMITTED執(zhí)行事務(wù)的讀操作之前對數(shù)據(jù)對象加S鎖 執(zhí)行完讀操作之后立刻釋放S鎖 不會讀到臟數(shù)據(jù) 但不能重復(fù)讀 3 REPEATABLEREAD執(zhí)行事務(wù)的讀操作之前對數(shù)據(jù)對象加S鎖 持有該鎖直到事務(wù)結(jié)束 可以重復(fù)讀 3隔離級別 4 SERIALIZABLE嚴(yán)格按照兩段封鎖協(xié)議對數(shù)據(jù)加鎖 3隔離級別 ANSI99定義了4種事務(wù)隔離級別 SQLServer能夠完全支持這些級別 未提交讀在讀數(shù)據(jù)時不會檢查或使用任何鎖 因此 在這種隔離級別中可能讀取到?jīng)]有提交的數(shù)據(jù) 已提交讀只讀取提交的數(shù)據(jù)并等待其它事務(wù)釋放排它鎖 讀數(shù)據(jù)的共享鎖在讀操作完

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論