Oracle系统架构基本概念.ppt_第1页
Oracle系统架构基本概念.ppt_第2页
Oracle系统架构基本概念.ppt_第3页
Oracle系统架构基本概念.ppt_第4页
Oracle系统架构基本概念.ppt_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle系統架構基本概念 Outline Oracle系統架構概觀OverviewOracleInstanceOracleDatabaseOtherProcesses漫談OracleInstance記憶體結構BackgroundProcesses漫談OracleDatabaseStructuresPhysicalDatabaseStructuresLogicalDatabaseStructures Oracle系統架構概觀關於Oracle系統架構 是非常重要的基礎觀念 正所謂 君子務本 本立而道生 有了踏實的基礎觀念之後 才能在往後學習Oracle的路上 無往不利 電腦系統 Overview OracleServer主要是由OracleInstance與Database所組成 透過ServerProcess與UserProcess之間的交互運作 藉以達成使用者交付執行的工作 OracleServer OracleInstance Database UserProcesses ServerProcesses PGA Query 例如 使用者可能想要在OracleServer上查詢一筆人事資料 使用者將相關的SQL敘述輸入系統中 此時系統會產生相對應的UserProcess與ServerProcess 由ServerProcess負責向OracleServer溝通 並將符合使用者所需的資料 從OracleServer送至UserProcess 以完成該使用者下達的request OracleInstance Oracle資料庫引擎 Oracle資料庫中的任何動作都和它有關 是OracleDB的心臟地帶 OracleInstance主要包含 backgroundprocess 背景處理程序 是一群常駐的服務常式 serviceroutine 執行I OProcess與非OracleProcess的監控管理 針對目前的使用者所提出的request執行一些一般性的工作 每一個Process專責於一至兩項的工作SystemGlobalArea SGA 系統全域區 用來存放資料庫系統相關資訊的一塊共享記憶體資料區域 讓backgroundprocess得以利用這些系統資訊 以提供適當的服務 處理外部的userrequest 由於OracleInstance掌控著處理OracleDatabase所有運作的相關資訊 因此 當要存取或操作OracleDatabase裏的資料時 必須先啟動OracleInstance 才能對OracleDatabase的內容加以處理 當OracleInstance啟動時 電腦系統會先配置一塊記憶體空間給SGA SystemGlobalArea 並且載入相關的backgroundprocess OracleDatabase OracleDatabase可分為兩個部份來說明 實體結構邏輯結構 實體結構 OracleDatabase的實體結構部份是由一個個的檔案所組合 主要的檔案包括Datafiles 資料檔 RedoLogfiles 重置日誌檔 onlineControlfiles 控制檔 另外尚有 Passwordfile 密碼檔 Parameterfile 起始參數檔 ArchivedRedoLogfiles 重置日誌封存檔 offline Controlfiles Datafiles Archivedlogfiles Parameterfile Passwordfile Redologfiles Database 邏輯結構 OracleDatabase的邏輯結構部份 主要有Tablespace 表格空間 Segment 區段 Extent 延伸區塊 Block 區塊 OtherProcesses 不屬於OracleInstance內的Process皆稱為OtherProcess 是User和應用程式要連接OracleDBServer的重要橋樑 如UserProcess ServerProcess等主要是反應使用者下達的request 即SQL敘述 將其轉化為OracleServer能看得懂的相關指令 從OracleDatabase裏抓取資料 以反映使用者需求的資料 在ServerProcess中還有一個相當重要的資料結構 PGA ProgramGlobalArea PGA是一個memorybuffer 存放相關ServerProcess的資料與控制資訊 當ServerProcess被呼叫啟動後 OracleServer會為其建立一個所屬的PGA 使用者下達的SQL敘述 就是存放在這裏的 漫談OracleInstance 第一部份我們曾談到所謂的OracleInstance可分為 SGA SystemGlobalArea BackgroundProcesses兩部份 並做了概略的說明 現在就分別針對SGA與BackgroundProcesses做更完整深入的說明 記憶體結構 SGA是OracleServer在系統上所建立的一塊記憶體區塊 OracleServer利用這塊記憶體結構 協同Oracle的各種Processes來完成使用者所交付的工作 SGA主要是由幾種不同的資料區塊所組成 DatabaseBufferCacheRedoLogBufferSharedPoolLargePoolJavaPool其它 如 Cursors 等 SGA DatabaseBufferCache RedoLogBuffer SharedPool LargePool JavaPool Others DatabaseBufferCache 資料庫緩衝快取區 資料庫系統擷取資料時的一個快取空間 其用途在於有效減少存取資料時造成的磁碟讀寫動作 到硬碟從事I O是很耗時的工作 我們可以透過設定DB BLOCK BUFFERS這個參數值來設定DatabaseBufferCache的大小 在Oracle的DatabaseBufferCache中 尚有一些sub caches DB CACHE SIZEDB KEEP CACHE SIZEDB RECYCLE CACHE SIZE我們可以透過DB CACHE ADVICE這個參數 藉由statistics的方式來對不同的cachesize做預設 指令 Altersystemsetdb cache advice on Oracle用所謂的LRU LeastRecentlyUsed 演算法來管理這塊記憶體空間 LRU 當這塊記憶體空間滿載時 OracleServer將只保留最近有被使用過的資料 最不常用的資料則寫回磁碟中 並將該資料所佔用的記憶體空間釋放出來 由於DatabaseBufferCache關係著OracleServer的I O動作頻繁與否 因此如何管理及設定DatabaseBufferCache的大小 對於OracleServer的效能調校 是相當重要的一項課題 RedoLogBuffer 重置日誌緩衝區 當資料庫的內容有所異動時 RedoLogBuffer會記錄其相關異動的情形 做了什麼改變改變後的舊資料與新資料經過一定的時間週期或者是RedoLogBuffer滿載時 OracleServer會將RedoLogBuffer的內容寫到RedoLogFile裏 以追蹤整個資料庫的使用情形 當OracleServer不幸當掉的話 就能利用這些記錄下來的資訊 進行資料庫的復原 Recovery 有關RedoLogBuffer的大小設定 可以透過設定參數LOG BUFFER 改變RedoLogBuffer的大小 SharedPool 共享區 當使用者將SQL PL SQL等操作指令送至Oracle資料庫後 系統會先解析 Parse 語法是否正確 解析時 下列兩項資料將會放入SharedPool中 解析時所需要用到的相關資訊解析後的結果當有不同的使用者執行相同的SQL指令 就可以共用SharedPool中解析好的結果 以加速SQL指令執行的速度 SharedPool內包含數種不同的區域 主要有下列兩類 DataDictionaryCache 存放解析時所需要的相關資訊 以供查詢之用LibraryCache 存放各類指令解析後的結果 以供重覆使用SharedPool亦是採LRU的記憶體管理演算法 SharedPool的大小設定 是由SHARED POOL SIZE這個參數來控制 LargePool 大型區 LargePool是Oracle針對一些需要大量記憶體空間的資料庫處理與運算工作所提供的一個額外選項 它可以讓SGA配置一個較大的記憶體空間 提供給處理Oracle的backup restore I O 執行Oracle復原管理程式RMAN 等 透過指定LARGE POOL SIZE這個參數 設定LargePool的大小 JavaPool Java區 當使用者有使用Java時 OracleServer利用這塊記憶體空間 存放及Parse所使用的JavaCode 藉以提供Oracle與Internet更高的整合性 透過指定JAVA POOL SIZE這個參數 來改變JavaPool的大小 BackgroundProcesses OracleServer所提供的Processes可分為兩類 ServerProcesses用以服務ClientProcesses 根據ClientProcesses的需求 由OracleServer動態配置所產生的 用以服務ClientProcesses的需求不被包含在OracleInstance裏在ServerProcesses裏 尚包含另一個重要的記憶體結構 PGA ProgramGlobalArea 存放著ClientProcesses與ServerProcesses間的重要資訊BackgroundProcesses用來管理OracleServer所需的一些系統常式 諸如資料庫的I O OracleProcesses的管理等包含於OracleInstance中 主要的BackgroundProcesses共有五個 只要有這五個BackgroundProcesses OracleServer就可以正常地運作了 分別是 DatabaseWriter DBWR LogWriter LGWR SystemMonitor SMON ProcessMonitor PMON CheckpointProcess CKPT 其它尚有Archiver ARCH Recoverer RECO Dispatcher Dnnn Lock LCKn JobQueue SNPn 及QueueMonitor QMNn 等BackgroundProcesses 它們主要是提供OracleServer更進階的管理 如ARCH 它可以提供比LGWR更強的資料庫回復能力 DatabaseWriter DBWR DBWR主要是負責管理DatabaseBufferCache 將DatabaseBufferCache中修改過的資料 整批寫入DataFile裏 透過系統整批寫入的方式 可以提高整個系統的執行效率 當使用者執行DML指令修改相關資料欄位 並執行commit指令時 Oracle本身並不是直接將修改過的資料直接寫入DataFile裏 而是當DatabaseBufferCache的內容即將滿載或是經過一定的時間區隔 檢查點Checkpoint CKPT 才將資料寫入DataFile中 藉由減少相關的I O動作 以提高系統執行效能 使用write ahead的技術 Database 由於在大型線上交易 OLTP 系統 其資料庫異動情況可能十分頻繁 因此 一個OracleServer可以有一個以上的DBWRBackgroundProcesses 可以依實際系統硬體與作業系統的特性 設定DB WRITER PROCESSES參數值 以獲得整個資料庫系統的最佳執行效能 當設定DB WRITER PROCESSES的內容值後 系統上有關DBWR的名稱將會變為DBWn n可為0 9 如DBW0 DBW1 DBW2等 系統預設只會啟動一個DBWn 即DBW0 然而 在單一處理器的伺服器系統 配置額外的DBWn並無太多的實質幫助 LogWriter LGWR LGWR主要是負責將RedoLogBuffer的內容值 寫入online的RedoLogFile中 它與DBWR的運作方式不同點在於 DBWR在DatabaseBufferCache即將滿載或是經過一定的時間區隔 才會將資料寫入DataFile中 且是在有需要的時候才會對相關檔案做存取的動作LGWR是在資料庫的內容有異動且已被確認 commit 時 如insert update delete等 就會被觸發 將異動的情形記錄到onlineRedoLogFile中 因此 當資料庫crash時 就可以根據onlineRedoLogFile內容 對資料庫進行還原的動作 LGWR一樣可以透過設定LGWR IO SLAVES這個參數值 提供非同步I O模式的功能 LGWR之動作時機 當使用者確認 commit 某交易時 LGWR會遵循Write aheadProtocol 先期寫入協定 將Redologbutter內的資料異動記錄寫入 下列幾種情況 自動週期性地動作 如 間隔時間為3秒 Checkpoint CKPT 重置日誌緩衝區之剩餘空間不到2 3當DBWn回寫資料檔時 必要的時候LGWR也會動作 Write aheadProtocol Instance SGA DBWn Redologbuffer Controlfiles Datafiles Redologfiles LGWR Database 何謂Write ahead 在DBWn回寫資料至DataFile之前 RedoLogBuffer內相關資料都必須完成寫入動作 即寫入RedoLogFile 若DBWn發現某些重置紀錄尚未寫入RedoLogFile時 它會通知LGWR前來處理 等到LGWR將RedoLogBuffer的紀錄寫入完畢時 DBWn才會開始寫入資料檔 為何要把RedoLogFile稱為onlineRedoLogFile 因為Oracle把RedoLogFile分為兩部份 onlineRedoLogFilearchiveRedoLogFile這兩個都是負責記錄 追蹤整個資料庫的異動情形 不同的是 archiveRedoLogFile是onlineRedoLogFile的備份資料檔 由另一個BackgroundProcess Archiver ARCH 負責管理 在預設的情況下 ARCH是不會啟動的 而是由LGWR記錄資料庫的異動情形 將這些記錄資料寫到onlineRedoLogFile裏 如果OracleServer不幸掛了 此時的資料庫僅能復原onlineRedoLogFile裏有記錄的資料 可是 其他的呢 這時候就要靠ARCH將onlineRedoLogFile備份出來 SystemMonitor SMON 如果是因為停電或是其它因素導致Oracle資料庫不正常被關閉 下一次啟動資料庫時將由SMON進行必要的資料庫修復動作 主要的工作有 執行一些資料庫必要的修復工作 如果有需要的話 SMON會使用onlineRedoLogFile的內容 定時清除資料庫系統中一些不必要的殘餘物件 例如上次系統交易進行一半的資料或暫時性區間 執行整個系統儲存空間的管理 對於Tablespace上破碎的Extent 它會將這些較小的Extents予以合併 整理出一個較大的空間 以供系統日後的使用 Instance SGA SMON Controlfiles Datafiles Redologfiles Instance SGA SMON Database ProcessMonitor PMON 當某個UserProcess異常中止時 PMON會執行程序修復 ProcessRecovery 的動作 就是把已經失效的UserProcesses給趕出記憶體 並釋放該記憶體空間 留待系統日後使用釋放該Process之前使用的系統資源 避免Deadlock發生 PMON和SMON一樣 都是由Oracle資料庫系統週期性自動執行 檢查整個資料庫系統的運作情形 PGAarea Checkpoint CKPT 在一個指定的時間區間裏 DBWR會對所有在DatabaseBufferCache所做的異動 將其結果寫入到相關的DataFiles以及RedoLogFiles ControlFiles 這樣的動作 就稱為產生 設定 一個checkpoint事件 CKPTBackgroundProcess就是扮演著一個通知者的角色 經過一定的時間後 負責通知DBWR執行Checkpoint的動作 CKPT會在適常時候產生一個Checkpoint事件 其意義為 確保DatabaseBufferCache內經常被異動的資料也能夠定期被寫入硬碟的DataFile LRU演算法 萬一Oracle需要進行InstanceRecovery時 就不需要Checkpoint之前的Redorecord 可縮短資料庫動新啟動的時間 Instance SGA DBWn LGWR CKPT Controlfiles Datafiles Redologfiles 執行Checkpoint的時間區間 可以透過設定LOG CHECKPOINT INTERVAL這個參數 改變checkpoint的區間 然而 在設定LOG CHECKPOINT INTERVAL時 要注意的是 這個值設得太小的話 會造成系統額外I O的負擔設得太大 超過onlineRedoLogFileswap的時間時 LOG CHECKPOINT INTERVAL的值又會變得沒有意義因為Oracle會在swaponlineRedoLogFile時 做一次checkpoint的動作 Summary 縱觀以上的說明 現在我們可以勾勒出整個OracleInstance的整個架構圖 系統記憶體大致上的配置情形有DatabaseBufferCache RedoLogBuffer SharedPool LargePool JavaPool 等 在BackgroundProcesses部份 計有DBWR LGWR SMON PMON CKPT 等 Backgroundstructures Memorystructures SGA Redologbuffer Databasebuffercache Sharedpool DBWR SMON PMON CKPT LGWR Others DataDictionarycache Librarycache Instance Instance SGA Redologbuffercache Sharedpool DataDict cache Librarycache DBWR SMON PMON CKPT LGWR Others Userprocess Serverprocess PGA Controlfiles Datafiles Archivedlogfiles Parameterfile Passwordfile Redologfiles Database Databasebuffercache 漫談OracleDatabaseStructures 第一部份曾談到所謂的OracleDatabase可分為 邏輯結構實體結構兩部份 並做了概略的說明 如果您有心成為一個頂尖的OracleDBA 那麼不僅要對以上兩結構內的各個項目如數家珍般熟悉 還要瞭解其內部運作與相互關係才行 現在就分別針對這兩部份做深入的說明 邏輯結構 LogicalDatabaseStructures 邏輯資料庫結構是Oracle所提供的一種抽象化的資料庫管理概念 透過一個 Mapping 的機制 管理OraclePhysicalDatabaseStructures 由外至內 我們可以看到 整個Database是由一個以上的Tablespace 表空間 組成 每個Tablespace存在著許多的Segment 區段 每個Segment內含許多的Extent 延伸區塊 最後 則是構成整個OracleDatabase的最小邏輯單位 block 區塊 Tablespace 表空間 Oracle資料庫允許DBA自行規劃各種用途的資料表空間 Tablespace 以便存放不同型態的資料與資料庫物件 例如 存放Oracle系統資訊的 資料辭典 datadictionary 可放在SYSTEM表空間 使用者所存放的相關資料可存放在USER表空間 所有資料表的索引 Index 則可單獨存放在INDX表空間 SYSTEM為Oracle資料庫預設的表空間 USER與INDX則是由DBA自行規劃建置的 一般來說 Oracle資料庫至少應規劃出五個以上的資料表空間 如下圖所示 OracleServer其他相關的邏輯結構 均是經由Tablespace做統一集中的管理 Tablespace依其可存取的狀態 分為兩種狀態 on line 在線 off line 離線 再以其可存取的模式區分 可分為兩種式read only 唯讀 read write 讀寫 透過其存取狀態的控制以及存取模式的切換 將可使整個資料庫的管理更為方便 Tablespace的特性OracleDatabase是由數個Tablespace所構成 一個Tablespace在同一時間點上 僅能類歸於一個Database 即 Database與Tablespace之間的關係 是呈現一對多的關係 除了SYSTEMTablespace與存在作用中 active 的RollbackSegment的Tablespace外 其餘的Tablespace均可在Database尚在執行的時候 將其選擇性的off line或on line 以利資料庫的管理 Tablespace能夠隨意切換其存取模式 read only及read write模式 Block 區塊 OracleDatabase邏輯空間概念中最小的邏輯空間單位 有關OracleServer對儲存空間所執行的配置 allocate 讀取 read 及寫入 write 均是以此為單位 進行資料庫的種種操作 且在新建Oracle資料庫時就必須明確地定義 Oracle的區塊大小通常是數倍於 作業系統的磁碟讀寫區塊 O S blocks 表示 Oracle在存取資料時是以自身的block為最小讀取單位 而不是以O S block為單位 它的參數設定透過參數DB BLOCK SIZE設定之 必須將DB BLOCK SIZE設定為O S blocks的整數倍 Extent 延伸區塊 雖然資料區塊是Oracle最小的資料讀寫單位 但值得注意的是 Oracle在 配置 儲存空間時 並不是以資料區塊為單位 而是改採 延伸區塊 的方式來配置空間 它是由許多連續的blocks所組成 一個Extent的相關資訊 僅能存在於同一個Datafile中 好處 減少資料庫空間配置的動作假定您準備在Oracle資料庫內存放80KB的資料 當執行DDL指令建立資料庫物件時 例如 CREATETABLE Oracle會先配置出一連串的Blocks 即 Extent 其大小可為單一Block 假設8KB 的5倍 當這些資料區塊全部存滿資料後 視實際需要再配置第二個Extent 大小還是40KB 只要兩次的空間配置動作就可以存放80KB的資料 反例如果Oracle每次只配置8KB的Block讓您存放資料 總共需要10次空間配置動作才能放滿80KB的資料 比較沒有效率由此可見 Extent的確有其存在的必要性 Segment 區段 Segment是僅次於Tablespace的邏輯空間單位 依照不同的資料處理性質 您可能需要在表空間內劃分出不同Segment 以存放不同資料 依其儲存 管理資料型態的不同 可大致分為 Datasegment 資料區段 Indexsegment 索引區段 Temporarysegment 暫時性區段 Rollbacksegment 退回區段 從Oracle資料庫的 邏輯層面 來看 我們知道 資料是存放在每個Block內 資料讀寫動作也將以Block為單位 空間配置的動作則是引用Extent的概念 一個Extent由一連串的Blocks所構成 依實際資料量多寡 資料 或資料庫物件 由多個Extent所組成 Tablespace內可劃分不同的Segment 而每個Segment內又包含許多Extents 在每個Oracle資料庫內可規劃不同的Tablespace 用以存放不同型態的資料 實體結構 PhysicalDatabaseStructures OracleServer實體結構概觀圖如下 整個OracleDatabase的實體結構 主要由三大部份所組成 ControlfilesDatafilesRedologfiles其它Passwordfile Parameterfile則是關於OracleServerSecurity及資料庫啟動設定檔Archivedlogfiles則與DatabaseRecovery息息相關 Controlfiles Datafiles Archivedlogfiles Parameterfile Passwordfile Redologfiles OracleDatabase 資料庫的啟動順序如下 Passwordfile 密碼檔 PasswordFile是由DBA建立的 儲存那些可以管理Oracle的登入密碼 可以用一個叫做ORAPWD的工具建立它 ORAPWD需要輸入三個參數 FILE 這是PasswordFile的儲存地方 PASSWORD 密碼 留意這個密碼也會同時成為SYS的密碼 如果之後您用SYS登入 發出ALTERUSER的變更密碼指令 那就會同時變更PasswordFile和SYS的密碼 ENTRIES 設定PasswordFile有多少個用戶 即該資料庫最多可擁有多少個Administrators 如果之後要增加這個數目 就要先把PasswordFile刪除 然後再建立 這個動作是有風險的 Parameterfile 參數檔 啟動OracleServer時 OracleServer會先配置一塊記憶體空間 供OracleInstance及Backgroundprocesses使用 在這之前 OracleServer會先讀取Parameterfile內的相關設定 做為配置記憶體空間與Backgroundprocesses時的設定值 Parameterfile是一個文字檔 一般均是使用文字編輯器編輯該檔 修改OracleInstance的設定值 前兩部份提及的許多參數 如 DB BLOCK BUFFERS LOG BUFFER SHARED POOL SIZE等 均可以在Parameterfile中設定 參數名稱沒有大小寫之分 只是一般而言 均是以小寫字母為主 在改變Parameterfile的相關設定時 要重新啟動Oracle的相關服務 所做的改變才能反映在系統中 有關Parameterfile的Initializationparameters 依其使用時機 方式 大致可歸納成以下幾類 指定檔案所在位址及名稱 如CONTROL FILES指定DatabaseControlFile的相關資訊 設定區間限制 如LOG CHECKPOINT INTERVAL設定DatabaseCheckpoint的時間間隔 指定有效的容量大小 如DB BLOCK BUFFERS設定DatabaseBufferCache記憶空間的大小 這類參數又稱為VariableParameter 起始參數檔包含以下主要內容 SGA相關的組態設定其他各起始參數之名稱與設定值ControlFile的名稱與存放路徑RedoLogFile之相關設定 Controlfile 控制檔 一個OracleDatabase至少要有一個Controlfile 記載著用來對整個OracleDatabase實體結構maintain與verify的相關資訊 如 Databasename Datafiles Redologfiles的名稱與所在位置 Database建立的Timestamp 每當資料庫被啟動時 Oracle會在Instance啟動後立刻讀取ControlFile內容 待所有資料庫實體組成檔案之所在資訊都收集完畢 資料庫才會被開啟 Controlfile掌控著所有OracleDatabase實體檔案結構的相關資訊 新增 刪除 修改Datafiles或Redologfiles OracleServer均會自動維護Controlfile的內容資訊 為了避免控制檔毀損導致資料庫系統停擺 建議在實務應用上至少配置兩個ControlFile 存放在不同實體硬碟 並以mirror 映射 的方式 提供資料庫備援的機制 Parameterfile也有類似的系統資訊 DB NAME Parameterfile主要是給OracleInstance看的 透過CONTROL FILES的指定 讓Instance 記憶體 與Database 實體的檔案結構 能夠彼此結合 提供資料庫的相關服務 因此 Parameterfile必須要搭配適當的Controlfile 否則將造成系統不可預期的錯誤 Datafile 資料檔 DataFiles包含在資料庫中的實際資料 ActualData 一個OracleDatabase至少會有一個以上的Datafile來存放資料 資料庫的資料大致上可以分為兩類 資料庫邏輯結構資訊 資料字典 資料字典包含資料庫邏輯結構的配置資訊 諸如Tables Columns Indexes Tablespaces等 使用者資料 一般說來 Datafile有以下幾個特點 一個Datafile僅能對應一個Tablespace Datafile有其屬性設定的集合如Auto extend的設定 當Datafile的容量不足時 OracleServer會自動配置一額外的空間供其使用 一個Tablespace可包含一或多個Datafile一個Segment只能存在於同一個Tablespace中 而一個Tablespace可能包含一個以上的Datafile 因此 Segment是得以展延 Span 在其Tablespace所屬的Datafile內 Datafile雖然是OracleServer用來存放大量資料的實體檔案結構 但它並不是以直接存取Datafile的模式 達成資料存取的目的 它是以類似Buffer的機制 間接存取Datafile 以提高系統的整體運作效

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论