oracle體系結(jié)構(gòu)總結(jié)._第1頁(yè)
oracle體系結(jié)構(gòu)總結(jié)._第2頁(yè)
oracle體系結(jié)構(gòu)總結(jié)._第3頁(yè)
oracle體系結(jié)構(gòu)總結(jié)._第4頁(yè)
oracle體系結(jié)構(gòu)總結(jié)._第5頁(yè)
已閱讀5頁(yè),還剩6頁(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)介

1、傳統(tǒng)上Oracle體系結(jié)構(gòu)由內(nèi)存結(jié)構(gòu)、進(jìn)程結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)組成。其中,內(nèi)存結(jié)構(gòu)由SGA、PGA組成;進(jìn)程結(jié)構(gòu)由用戶進(jìn)程和Oracle進(jìn)程組成;存儲(chǔ)結(jié)構(gòu)由邏輯存儲(chǔ)、物理存儲(chǔ)組成。 通過(guò)數(shù)據(jù)庫(kù)的啟動(dòng)過(guò)程和一條sql的執(zhí)行過(guò)程可以將oracle的內(nèi)存結(jié)構(gòu)、進(jìn)程結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)串起來(lái)。一、內(nèi)存結(jié)構(gòu)(1)SGA(System Global Area):一個(gè)包含實(shí)例數(shù)據(jù)和控制信息的共享內(nèi)存區(qū)域(2)PGA(Program Global Area):一個(gè)包含服務(wù)器進(jìn)程和后臺(tái)進(jìn)程的數(shù)據(jù)和控制信息的共享內(nèi)存區(qū)域1.1系統(tǒng)全局區(qū)SGA系統(tǒng)全局區(qū),是 DB Server 中實(shí)例的必要組成部分,由很多小內(nèi)存區(qū)共同構(gòu)成,各

2、個(gè)小內(nèi)存區(qū)存放不同的信息,系統(tǒng)全局區(qū)用于暫存可以被所有進(jìn)程( 包括 server process 以 及background process)共享的信息,對(duì)系統(tǒng)的運(yùn)行性能有好處,SGA 在實(shí)例啟動(dòng)的時(shí)候自動(dòng)分配 ,實(shí)例關(guān)閉時(shí)自動(dòng)釋放。SGA 暫存系統(tǒng)的大量共享數(shù)據(jù),對(duì)系統(tǒng)有相當(dāng)?shù)男阅苡绊?,所以需要為SGA 選擇適當(dāng)?shù)墓芾矸绞剑鶕?jù)所使用的數(shù)據(jù)庫(kù)版本不同,SGA 的管理有三種方式:1)8i:SGA 的大小由所有內(nèi)存組件大小之和決定,不能直接定義 SGA 大小,對(duì)內(nèi)存組件的大小可后臺(tái)進(jìn)行修改,但只能通過(guò)直接修改參數(shù)文件的內(nèi)存參數(shù)大小,而且修改完數(shù)據(jù)庫(kù)必須重起后才能生效,所以這種內(nèi)存管理方法叫做 S

3、GA 的靜態(tài)管理。2)9i:SGA 的大小由初始化參數(shù) SGA_MAX_SIZ E 確定,各個(gè)內(nèi)存組件大小之和不能超過(guò)這個(gè)參數(shù) ??梢灾苯油ㄟ^(guò)命令進(jìn)行修改內(nèi)存組件大小而不用重啟,這種叫做 SGA 的動(dòng)態(tài)管理3)10g:SGA 大小既可以像 9i 一人樣動(dòng)態(tài)管理,也可以實(shí)施 SGA 的自動(dòng)管理,默認(rèn)是 SGA 的自動(dòng)管理,啟用 SGA 自動(dòng)管理只需要設(shè)置初始化參數(shù) SGATARGET 即可,各個(gè)組件大小之和不超過(guò) SGA TARGET 。在自動(dòng)管理下,SGA 各個(gè)內(nèi)存組件由數(shù)據(jù)庫(kù)自動(dòng)設(shè)置大小,設(shè)置各個(gè)內(nèi)存區(qū)大小的依據(jù)來(lái)源于系統(tǒng)自動(dòng)收集的統(tǒng)計(jì)信息。在設(shè)置內(nèi)存組件大小的時(shí)候,分配的基本單位是粒度(g

4、ranule )granule 是一段連續(xù)的虛擬內(nèi)存,大小取決于 SGA_MAX_SIZE 的大小,如果 SGA_MAX_SIZ E小于 128M ,Granule 為 4M,否則 Granule 為 16M。大多數(shù)內(nèi)存組件的大小必須是 Granule 的整數(shù)倍,Redo Log Buffer 的大小不受這個(gè)限制,可以自行設(shè)置,它與其他小內(nèi)存區(qū)共同構(gòu)成 Granule 的整數(shù)倍。整個(gè) SGA 最小不小于 3 個(gè) Granule 大小,其中共享池一個(gè),數(shù)據(jù)緩存區(qū)一個(gè),其他分一個(gè), SGA的總大小也一定是 Granule 的整數(shù)倍大小。SGA 大多數(shù)組件的大小可以動(dòng)態(tài)調(diào)整,只要確保所有的內(nèi)存組件大

5、小之和不超過(guò) SGA MAXSIZE 或 SGATARGET 的大小,在 10G 中 SGA 內(nèi)存組件可以自動(dòng)管理 ,各個(gè)內(nèi)存大小由數(shù)據(jù)庫(kù)自己決定,設(shè)置 SGATARGET 參數(shù)(非 0)即可以開(kāi)啟內(nèi)存自動(dòng)管理,這個(gè)參數(shù)也可動(dòng)態(tài)修改,如果設(shè)置為 0,則意味著,禁用內(nèi)存自動(dòng)管理,伋需要 DBA 手動(dòng)調(diào)整各個(gè)內(nèi)存組件大小。以下內(nèi)存組件大小可以由數(shù)據(jù)庫(kù)自動(dòng)設(shè)置1)Buffer cache(db_cache_size)2)Shared pool(shared_pool_size)3)Large pool(large_pool_size)4)Java pool(java_pool_size)5)Stre

6、am pool(stream_poolsize)手動(dòng)設(shè)置:1)LOG_BUFFER2)STREAMS_POOL3)DB_NK_CACHE_SIZE4)DB_KEEP_CACHE_SIZE5)DB_RECYCLE_CACHE_SIZESGA 的必要內(nèi)存區(qū)包括 Shared Pool( 共享池)、 DB Buffer Cache(數(shù)據(jù)庫(kù)高速緩存) Redo Log和Buffers (重做日志緩存區(qū))。共享池中又包含了庫(kù)高速緩存(Library Cache)和數(shù)據(jù)字典高速緩存(Data Dict Cache) 其中庫(kù)高速緩存中暫存了最近常用的 SQL 和 PL/SQL 語(yǔ)句文件,分析代碼,執(zhí)行計(jì)劃,

7、用于減少代碼的硬解析頻度;數(shù)據(jù)字典高速緩存中暫存了最近常用的數(shù)據(jù)字典信息,用于為 SQL 語(yǔ)句解析提供可以快速讀取的數(shù)據(jù)字典信息。數(shù)據(jù)庫(kù)高速緩存(DB Buffer Cache)暫存最近常用的數(shù)據(jù)塊信息,減少磁盤(pán) IO 操作,用于提高數(shù)據(jù)訪問(wèn)的速度。重做日志緩存區(qū)暫存最近生成的重做日志,將來(lái)批量寫(xiě)到重做日志文件中,這樣可以確保日志能夠更快的生成,提高 DML 操作的執(zhí)行速度,也能夠減少日志帶來(lái)的寫(xiě)頻度。除了必要內(nèi)存區(qū)外,SGA 也有一些可選的內(nèi)存區(qū),主要有大池 Large Pool) Java 池 Java Pool)(,(以及流池( Stream Pool)。大池主要用于共享模式存放用戶全局

8、區(qū) (UGA) 的信息,也提供 了 對(duì)Rman 備份恢復(fù)以及并行進(jìn)程的支持。 Java 池的功能類(lèi)似于共享池,暫存 Java 程序的信息。Stream 池是 10G 的新內(nèi)存區(qū),支持新的流復(fù)制技術(shù)。1.1.1 共享池(Shared pool)共享池用于緩存sql,plsql、數(shù)據(jù)字典、資源鎖及其它用于控制結(jié)構(gòu)相關(guān)的數(shù)據(jù),共享池是SGA中最關(guān)鍵的內(nèi)存片段,特別是在性能和可伸縮性上。太大太小都會(huì)扼殺性能,使系統(tǒng)停止,將會(huì)消耗大量的CPU來(lái)管理這個(gè)共享池。共享池大小由參數(shù) shared_pool_size 決定大小,可以動(dòng)態(tài)調(diào)整,它的各個(gè)內(nèi)部件大小由共享池大小決定,不能單獨(dú)設(shè)置alter syste

9、m shared_pool_size=100m; 設(shè)置共享池大小;如果開(kāi)啟了內(nèi)存自動(dòng)管理特性,則不需要 DBA 手動(dòng)調(diào)整。共享池主要包括兩個(gè)與 sql 語(yǔ)句解析性能相關(guān)的內(nèi)存組件。清空緩存池:alter system flush shared_pool;dbms_shared_pool.purge 某個(gè)sql共享池可分為:Library Cache和Data Dictionaey Cache 庫(kù)高速緩沖區(qū)(Library Cache)庫(kù)高速緩存用于暫存最近常使用的 SQL 和 PL/SQL 語(yǔ)句的文本 ,分析代碼,執(zhí)行計(jì)劃。SQL 文本也就是 SQL 語(yǔ)句。執(zhí)行計(jì)劃是最終 SQL

10、 語(yǔ)句的執(zhí)行算法,分析代碼則是生成執(zhí)行計(jì)劃的分析過(guò)程。庫(kù)高速緩存暫時(shí)存放常用語(yǔ)句信息的目的是為了能夠共享 SQL 代碼,從而能夠重用已經(jīng)解析好的執(zhí)行計(jì)劃,減少硬解析帶來(lái)的資源消耗與其它內(nèi)存區(qū)一樣,庫(kù)高速緩存也遵循 LRU 算法管理內(nèi)存,由于內(nèi)存空間大小有限,所以總會(huì)有一些 SQL 語(yǔ)句的信息被擠出庫(kù)高速緩存區(qū),這意味著必然會(huì)帶來(lái)一些語(yǔ)句代碼的硬解析 ,所以需要對(duì)庫(kù)高速緩存進(jìn)行一些調(diào)整,以減少對(duì)解析性能的影響庫(kù)高速緩存的內(nèi)部又分為兩個(gè)內(nèi)存區(qū),分別緩存 SQL 語(yǔ)句和 PLSQL 語(yǔ)句的信息:共享 sql 區(qū)共享 pl/sql 區(qū)庫(kù)高速緩存的大小不能直接設(shè)置,受共享池的大小影響,由數(shù)據(jù)庫(kù)自行決定對(duì)

11、于保存在共享池中的SQL語(yǔ)句,可以從V$Sqltext、v$Sqlarea中查詢到,對(duì)于編程者來(lái)說(shuō),要盡量提高語(yǔ)句的重用率,減少語(yǔ)句的分析時(shí)間。一個(gè)設(shè)計(jì)的差的應(yīng)用程序可以毀掉整個(gè)數(shù)據(jù)庫(kù)的Share pool,提高SQL語(yǔ)句的重用率必須先養(yǎng)成良好的變成習(xí)慣,盡量使用Bind變量。 數(shù)據(jù)字典高速緩存區(qū)(data dict cache)數(shù)據(jù)字典高速緩存用于暫存最近常使用的數(shù)據(jù)字典信息,它同樣遵循 LRU 算法管理內(nèi)存,在字典緩存區(qū)中主要暫存解析所需的表空間,存儲(chǔ),表,索引,字段,用戶,權(quán)限以及其他數(shù)據(jù)庫(kù)對(duì)象的相關(guān)字典信息。由于 SQL 語(yǔ)句解析時(shí),服務(wù)進(jìn)程需要查找相關(guān)的數(shù)據(jù)字典信息以支

12、持解析,而字典信息默認(rèn)存儲(chǔ)在數(shù)據(jù)文件的數(shù)據(jù)字典信息中,所以每次解析去 IO 讀取數(shù)據(jù)文件并不是好的選擇。將常用的字典信息緩存在數(shù)據(jù)字典高速緩存區(qū)中,能夠快速訪問(wèn)所需的字典信息,有效減少解析的時(shí)間,所以 SQL 語(yǔ)句解析的性能得到提高。數(shù)據(jù)字典的大小也不能直接修改,受共享池的大小的影響,數(shù)據(jù)庫(kù)自行決定1.1.2 數(shù)據(jù)高速緩存區(qū)(db buffer cache)用于暫存從數(shù)據(jù)文件中獲得的數(shù)據(jù)塊的數(shù)據(jù)映像,同樣遵循 LRU 算法管理內(nèi)存,不論是表中的數(shù)據(jù)塊,不是索引的數(shù)據(jù)塊,或回滾段的數(shù)據(jù)塊,都被讀取到數(shù)據(jù)高速緩存中進(jìn)行處理,如果內(nèi)存中的數(shù)據(jù)塊發(fā)生變化,在特定的時(shí)機(jī)會(huì)被DBWR進(jìn)程將修改后的數(shù)據(jù)寫(xiě)回

13、到數(shù)據(jù)文件中。由于大量數(shù)據(jù)塊經(jīng)常被反復(fù)訪問(wèn),所以如果數(shù)據(jù)已經(jīng)讀入內(nèi)存,當(dāng)再次需要操作這些數(shù)據(jù)塊時(shí)就可以在內(nèi)存中直接獲取和更新,減少了磁盤(pán) I/O 的操作,SQL 語(yǔ)句的執(zhí)行執(zhí)行效率有大幅的提高初始化參數(shù) DB_BLOCK_SIZE 決定了數(shù)據(jù)塊的大小,這也是數(shù)據(jù)庫(kù) I/O 的最小單位,所以這個(gè)參數(shù)將影響到數(shù)據(jù)訪問(wèn)的性能,而且需要注意的是,這個(gè)參數(shù)在創(chuàng)建數(shù)據(jù)庫(kù)之后將不能夠被改變,數(shù)據(jù)高速緩區(qū)由多個(gè)獨(dú)立的子緩存池構(gòu)成,它的大小是這些緩存池的大小之和,這些子緩存區(qū)可以獨(dú)立設(shè)置大小,通過(guò)下面的參數(shù)進(jìn)行設(shè)置1)Default db_cache_size2)Keep db_keep_cache_size3

14、)Recycle db_recycle_cache_sizekeep緩存池適合存放常用的數(shù)據(jù)字典表,可以把這樣的表直接keep在keep緩存池中; recycle緩存池,用完就釋放,適合存放不常用的大表這些子緩存池的大小都可以動(dòng)態(tài)調(diào)整,但是只有 db_cache_size 可以由數(shù)據(jù)庫(kù)自動(dòng)管理大小,默認(rèn)只有 db_cache_size 被設(shè)置了有效值,其他兩個(gè)緩存池大小被設(shè)置為零1.1.3 重做日志緩沖區(qū)(Redo log buffer)重做日志緩沖區(qū)用于暫存數(shù)據(jù)庫(kù)中所有數(shù)據(jù)塊的改變信息,這些信息將按照改變的發(fā)生時(shí)間順序記錄在緩存區(qū)中,然后在特定的時(shí)機(jī)下被寫(xiě)入重做日志文件,日志緩存區(qū)的內(nèi)存管理

15、方法是FIFO,也就是是先進(jìn)先出。重做日志主要被用于提供數(shù)據(jù)的恢復(fù)功能,應(yīng)用日志前滾( roll forward)就是數(shù)據(jù)庫(kù)的基本恢復(fù)原理使用重做日志緩沖區(qū)的目的是為了提高 DML 或者 DDL 語(yǔ)句的執(zhí)行速度,減少日志產(chǎn)生帶來(lái)的性能影響,減少系統(tǒng)日志 I/O 的頻度。重做日志緩沖區(qū)的大小出 log_buffer 參數(shù)決定,但這個(gè)內(nèi)存區(qū)不能動(dòng)態(tài)調(diào)整大小,也不能被自動(dòng)管理。重做日志緩沖區(qū)的存在是因?yàn)閮?nèi)存到內(nèi)存的操作比較內(nèi)存到硬盤(pán)的速度快很多,所以重作日志緩沖區(qū)可以加快數(shù)據(jù)庫(kù)的操作速度,但是考慮的數(shù)據(jù)庫(kù)的一致性與可恢復(fù)性,數(shù)據(jù)在重做日志緩沖區(qū)中的滯留時(shí)間不會(huì)很長(zhǎng)。所以重作日志緩沖區(qū)一般都很小,大于

16、3M之后的重作日志緩沖區(qū)已經(jīng)沒(méi)有太大的實(shí)際意義。1.1.4 大池大池是系統(tǒng)全局區(qū)中的一個(gè)可選內(nèi)存區(qū),但通常在系統(tǒng)中會(huì)進(jìn)行配置,大池的得名不是因?yàn)榇?,而是因?yàn)樗脕?lái)分配大塊的內(nèi)存,處理比共享池更大的內(nèi)存,在8.0開(kāi)始引入。大池主要以下幾種情況使用:1)共享服務(wù)器存儲(chǔ)用戶全局區(qū)(UGA )信息2)啟用并行進(jìn)程3)使用 RMAN 作備份恢復(fù)大池由參數(shù) large_pool_size 設(shè)置,也可以由數(shù)據(jù)庫(kù)自動(dòng)管理1.1.5 JAVA池Java 池也是系統(tǒng)全局區(qū)中的一個(gè)可選內(nèi)存區(qū),主要用于數(shù)據(jù)庫(kù)中存儲(chǔ)的 Java 程序的解析和執(zhí)行,通常如果不需要在數(shù)據(jù)庫(kù)中運(yùn)行 java 程序,可以不啟用就個(gè)內(nèi)存區(qū),但是

17、如果在數(shù)據(jù)庫(kù)創(chuàng)建時(shí)選擇了安裝 JVM 組件,那么這個(gè)池必須配置。Java 池由 java_pool_size 設(shè)置,也可以動(dòng)態(tài)調(diào)整.。如果 granule 是 4M,Java 池的默認(rèn)大小是 24M ,如果 granule 是 16M,Java 池的默認(rèn)大小是 32M ,如果使用了 JVM 組件,java 池不得小于默認(rèn)的大小。1.2程序全局區(qū)PGA程序全局區(qū)是為每個(gè)連接數(shù)據(jù)庫(kù)會(huì)話開(kāi)辟的私有內(nèi)存區(qū),每個(gè)會(huì)話都有自己獨(dú)立的PGA 區(qū),當(dāng)用戶進(jìn)程對(duì)應(yīng)的服務(wù)進(jìn)程被創(chuàng)建時(shí)分配,也就是會(huì)話創(chuàng)建時(shí) PGA 空間分配,會(huì)話斷開(kāi)時(shí) PGA空間釋放,每個(gè) PGA 區(qū)只能被一個(gè)服務(wù)進(jìn)程使用。在 8i 的時(shí)候每個(gè)會(huì)

18、話的 pga 大小是固定的,由一些*.area_size 參數(shù)準(zhǔn)定大小,這樣造成了各 個(gè)PGA 大小不能結(jié)合實(shí)際會(huì)話的需求而定。從 9i 開(kāi)始 PGA 使用了自動(dòng)管理特性,通過(guò)參數(shù) pga_aggregate_target 設(shè)置 pga 的總大小,而各個(gè)會(huì)話需要分配 pga 內(nèi)存時(shí),從總的 pga中直接分配,分配的 pga 空間大小取決于會(huì)話的實(shí)際需求,這樣的分配方式使會(huì)話的 pga 大小更加符合實(shí)際的會(huì)話需求。由于排序內(nèi)存空間屬于 pga 的一個(gè)部分,所以各個(gè)會(huì)話的 pga 大小,將會(huì)影響會(huì)話的排序性能,需要根據(jù)會(huì)話的排序情況,設(shè)置合適的 PGA 大小PGAAGGREGATETARGET 參

19、數(shù)的大小設(shè)置可以借鑒一些經(jīng)驗(yàn)值for oltp 系統(tǒng):pga_aggregate_target=(總的物理內(nèi)存大小80%)*20%for dss 系統(tǒng):pga_aggregate_target=(總的物理內(nèi)存大小80%)*50%查看PGA信息:select * from v$sysstatselect * from v$sesstat select * from v$pgastat select * from v$sql_workarea select * from v$sql_workarea_active 2.進(jìn)程結(jié)構(gòu)(1)用戶進(jìn)程:客戶端用于連接數(shù)據(jù)庫(kù)的程序,主要負(fù)責(zé)發(fā)布需要執(zhí)行的 SQ

20、L 語(yǔ)句,這些進(jìn)程創(chuàng)建和維護(hù)運(yùn)行的應(yīng)用程序或Oracle工具軟件代碼。 大多數(shù)環(huán)境中,有單獨(dú)的計(jì)算機(jī)客戶端進(jìn)程(2)后臺(tái)進(jìn)程:這些進(jìn)程隨數(shù)據(jù)庫(kù)而啟動(dòng),用于完成各種維護(hù)任務(wù),如將塊寫(xiě)至磁盤(pán)、維護(hù)聯(lián)機(jī)重做日志、清理異常中止的進(jìn)程等(3)服務(wù)進(jìn)程:服務(wù)端響應(yīng)用戶操作請(qǐng)求的程序,通常與用戶進(jìn)程一一對(duì)應(yīng),執(zhí)行用戶進(jìn)程發(fā)出的SQL 語(yǔ)句,并將執(zhí)行結(jié)果返回用戶進(jìn)程。服務(wù)進(jìn)程作用:A解析并執(zhí)行用戶所提交sql語(yǔ)句B在SGA數(shù)據(jù)庫(kù)緩存中搜索用戶進(jìn)程所訪問(wèn)的數(shù)據(jù),如果搜不到則從硬盤(pán)提取數(shù)據(jù)到數(shù)據(jù)庫(kù)緩存中C將數(shù)據(jù)返回用戶進(jìn)程。后臺(tái)進(jìn)程:DBWR 數(shù)據(jù)庫(kù)寫(xiě)進(jìn)程LGWR 日志寫(xiě)進(jìn)程CKPT 檢查點(diǎn)寫(xiě)進(jìn)程SMON 系統(tǒng)監(jiān)

21、控進(jìn)程PMON 進(jìn)程監(jiān)控進(jìn)程ARCH 歸檔進(jìn)程RECO 恢復(fù)進(jìn)程LCKn 封鎖進(jìn)程前五個(gè)為oracle的五大進(jìn)程。DBWR數(shù)據(jù)庫(kù)寫(xiě)進(jìn)程將數(shù)據(jù)庫(kù)緩存中被修改過(guò)的臟數(shù)據(jù)寫(xiě)入到數(shù)據(jù)文件中。由于臟數(shù)據(jù)可能過(guò)多,單個(gè)DBWR進(jìn)程有可能忙不過(guò)來(lái),所以DBWR可以定義多個(gè),oracle最多允許啟動(dòng)10個(gè)DBWR進(jìn)程,進(jìn)程名稱(chēng)分別為DBWR0-DBWR9,統(tǒng)稱(chēng)為DBWn。寫(xiě)入時(shí)機(jī):1)產(chǎn)生檢查點(diǎn)2)臟數(shù)據(jù)緩沖區(qū)達(dá)到閥值 默認(rèn)10%3)掃描整個(gè)data buffer沒(méi)有空閑 data buffer中包含臟的和未臟的 優(yōu)先寫(xiě)臟數(shù)據(jù)列表 再寫(xiě)未改的4)timeout超時(shí) 如果DBWR沒(méi)事做 會(huì)被每三秒喚醒一次去巡檢

22、 寫(xiě)不寫(xiě)不一定5)集群環(huán)境的ping請(qǐng)求觸發(fā)多實(shí)例的數(shù)據(jù)寫(xiě)請(qǐng)求6)表級(jí)別的truncate或drop也會(huì)觸發(fā)數(shù)據(jù)寫(xiě)7)表空間read only 只讀8)表空間offline離線9)熱備份 begin backup命令與用戶的commit無(wú)關(guān)。LGWR重做日志寫(xiě)進(jìn)程將重做日志緩存中的重做記錄寫(xiě)入聯(lián)機(jī)重做日志文件。寫(xiě)入時(shí)機(jī):用戶commit;寫(xiě)滿重做日志緩存1/3;日志緩沖區(qū)達(dá)到1/3滿;DBWR將數(shù)據(jù)庫(kù)緩存中的臟緩存塊成批寫(xiě)入到數(shù)據(jù)文件之前;發(fā)生超時(shí)時(shí),每隔3秒。CKPT檢查點(diǎn)進(jìn)程發(fā)生時(shí)說(shuō)明所有已提交的事務(wù)對(duì)數(shù)據(jù)的更改已寫(xiě)入硬盤(pán),數(shù)據(jù)庫(kù)處于完整狀態(tài)。更新控制文件和數(shù)據(jù)文件。用于強(qiáng)制DB serv

23、er的同步操作,同步每隔一些時(shí)間會(huì)執(zhí)行一次,確保同步之前所有被修改過(guò)的臟數(shù)據(jù)都被寫(xiě)入到了數(shù)據(jù)文件中,這些被寫(xiě)入的數(shù)據(jù)文件中的數(shù)據(jù)在系統(tǒng)崩潰時(shí)不需要恢復(fù),只有內(nèi)存中的數(shù)據(jù)丟失,需要被恢復(fù),在系統(tǒng)崩潰時(shí)的這種恢復(fù)操作叫做實(shí)例恢復(fù),實(shí)例恢復(fù)由于存儲(chǔ)介質(zhì)并沒(méi)有損壞,所以僅需要應(yīng)用日志記錄,即可恢復(fù)檢查點(diǎn)進(jìn)程執(zhí)行下面的動(dòng)作來(lái)完成同步操作1)通知DBWR進(jìn)程將當(dāng)前的SCN之前的所有臟數(shù)據(jù)寫(xiě)入數(shù)據(jù)文件;2)在臟數(shù)據(jù)寫(xiě)入數(shù)據(jù)文件后將所有數(shù)據(jù)文件頭和控制文件中記錄同一個(gè)SCN號(hào)表示同步操作的完成。在數(shù)據(jù)庫(kù)正常關(guān)閉時(shí),系統(tǒng)一定會(huì)由檢查點(diǎn)進(jìn)程執(zhí)行同步操作,以確保數(shù)據(jù)庫(kù)啟動(dòng)時(shí)可以直接打開(kāi)。在日志文件寫(xiě)滿后發(fā)生日志切換

24、時(shí),同樣發(fā)生同步,以確保實(shí)例恢復(fù)只需要使用重做日志文件內(nèi)容。SMON系統(tǒng)監(jiān)控程序在數(shù)據(jù)庫(kù)啟動(dòng)時(shí)檢查數(shù)據(jù)庫(kù)是否需要恢復(fù),如需要?jiǎng)t執(zhí)行恢復(fù);恢復(fù)的方法:先前滾=>后回滾=>釋放資源前滾 將數(shù)據(jù)庫(kù)中的SQL(包括提交的和未提交的)全部重新做一遍回滾 將沒(méi)提交的SQL句從數(shù)據(jù)庫(kù)中將老的鏡像取出覆蓋釋放資源 將前滾和回滾中使用到的資源釋放在排序結(jié)束后釋放臨時(shí)段(對(duì)臨時(shí)表空間有效);合并表空間中的空閑空間碎片(在字典管理表空間時(shí)使用)。PMON進(jìn)程監(jiān)視程序1)清理與實(shí)例非法斷開(kāi)的server_process殘留的資源 非正常終止的用戶進(jìn)程產(chǎn)生的垃圾資源如果PMON檢測(cè)到連接異常終止,將執(zhí)行下面

25、的任務(wù):回滾該會(huì)話沒(méi)完成的事務(wù)釋放該事務(wù)占用的鎖釋放該會(huì)話占用的其他資源2)負(fù)責(zé)重啟以外死掉的調(diào)度器(網(wǎng)絡(luò)監(jiān)聽(tīng)中使用的)3)將實(shí)例的信息注冊(cè)到監(jiān)聽(tīng)程序3.存儲(chǔ)結(jié)構(gòu)包括:物理結(jié)構(gòu)和邏輯結(jié)構(gòu),這兩種存儲(chǔ)結(jié)構(gòu)既相互獨(dú)立又相互聯(lián)系。3.1物理結(jié)構(gòu):物理存儲(chǔ)主要是由一些物理文件組成,包括:數(shù)據(jù)文件、日志文件、控制文件、初始化參數(shù)文件:pfilespfile、passwordfile、還有一些輔助文件:archived log files、alert.log警告文件、各dump文件夾下的跟蹤文件、外部表文件這些文件主要是OS層面的。即一系列物理文件的集合:數(shù)據(jù)文件:存儲(chǔ)數(shù)據(jù),以.dbf做后綴。一句話:一個(gè)

26、表空間對(duì)多個(gè)數(shù)據(jù)文件,一個(gè)數(shù)據(jù)文件只對(duì)一個(gè)表空間。dba_data_files/v$datafile??刂莆募嚎刂莆募涗浿鴶?shù)據(jù)庫(kù)的物理文件信息和數(shù)據(jù)庫(kù)的狀態(tài)信息 非常重要 一個(gè)控制文件是定義當(dāng)前物理數(shù)據(jù)庫(kù)當(dāng)前狀態(tài)的一個(gè)小的二進(jìn)制文件Oracle 服務(wù)器在數(shù)據(jù)庫(kù)使用的過(guò)程中會(huì)不斷更新控制文件何時(shí)涉及改控制文件每次在線日志文件、數(shù)據(jù)文件的新增、修改、刪除,歸檔等都會(huì)更新控制文件 熱備份的時(shí)候觸發(fā)系統(tǒng)事件時(shí)CKPT進(jìn)程將每三秒會(huì)觸發(fā)檢查點(diǎn)進(jìn)程去寫(xiě)控制文件alter system set control_files=路徑。V$CONTROLFILE。日志文件:即Redo Log File

27、s和Archivelog Files。記錄數(shù)據(jù)庫(kù)修改信息。聯(lián)機(jī)日志 存在的目的是為了數(shù)據(jù)完整性 通過(guò)時(shí)間向量和日志條目來(lái)維持完整性 Oracle服務(wù)器維護(hù)聯(lián)機(jī)重做日志文件以使數(shù)據(jù)庫(kù)中的數(shù)據(jù)丟失減到最小。重做日志文件記錄了對(duì)數(shù)據(jù)庫(kù)緩沖區(qū)高速緩存內(nèi)數(shù)據(jù)所做的所有更改,存放著SQL條目(記錄)就是改變向量重做日志按group來(lái)存放的.叫日志組一個(gè)數(shù)據(jù)庫(kù)至少有2個(gè)日志組每個(gè)日志組至少有一個(gè)成員,組內(nèi)成員與成員之間是鏡像關(guān)系順序切 循環(huán)寫(xiě)業(yè)務(wù)交易會(huì)不斷生成REDO,使得REDO LOG文件越來(lái)越大,顯然不利于ORACLE管理,所以設(shè)計(jì)切換模式當(dāng)前組日志寫(xiě)滿,就會(huì)觸發(fā)日志切換.手動(dòng)也可以觸發(fā)al

28、ter system switch logfile; 手動(dòng)觸發(fā)日志切換重做日志文件是寫(xiě)多讀少,要存放在寫(xiě)性能最好的磁盤(pán)上.而且要多元化管理(物理隔離)。重做日志文件的讀寫(xiě)特征寫(xiě)  重做日志主要是寫(xiě)操作,由LGWR完成。讀  重做在實(shí)例恢復(fù)或者介質(zhì)恢復(fù)的時(shí)候才會(huì)去讀,日志挖掘也能用到。參數(shù)文件:約束實(shí)例的行為實(shí)例的參數(shù) 實(shí)例受初始化參數(shù)影響里面都是非默認(rèn)參數(shù) 自定義參數(shù)有文本和二進(jìn)制兩種文本pfile=parameter fileinitsid.ora缺陷:只能是文本文件 存放于文件系統(tǒng)(不能放在裸設(shè)備里)不能自動(dòng)備份(不能用rman備份)動(dòng)態(tài)修

29、改的參數(shù),要下次啟動(dòng)不能自動(dòng)校驗(yàn)不能共享依存于OS編輯器修改參數(shù)寫(xiě)太長(zhǎng)時(shí) 校驗(yàn)讀取失敗優(yōu)點(diǎn):可以使用ifile 共享命名規(guī)則: init.ora 或 init<sid>.ora二進(jìn)制spfile=server parameter filespfilesid.ora解決了文本的缺陷同時(shí)為RAC實(shí)現(xiàn)了每個(gè)實(shí)例使用不同參數(shù) 加實(shí)例名前綴或星號(hào)例如:name=value*.name===value缺陷:不可以使用編輯器修改當(dāng)參數(shù)值設(shè)置錯(cuò)誤時(shí),啟動(dòng)實(shí)例加載參數(shù)不正確,實(shí)例就無(wú)法啟動(dòng),而二進(jìn)制文件又不能修改解

30、決方法:將二進(jìn)制文件轉(zhuǎn)換為文本參數(shù)文件,修改文本參數(shù)文件命名規(guī)則: spfile.ora 或 spfile<sid>.ora警告文件:show parameter background_dump_dest-使用共享服務(wù)器連接跟蹤文件:show parameter user_dump_dest-使用專(zhuān)用服務(wù)器連接3.2邏輯結(jié)構(gòu):(1)塊(Data Block):數(shù)據(jù)庫(kù)數(shù)據(jù)存放在數(shù)據(jù)塊中,一個(gè)數(shù)據(jù)塊對(duì)應(yīng)特定磁盤(pán)上字節(jié)數(shù)。塊是數(shù)據(jù)庫(kù)最小的邏輯存儲(chǔ)單元。(2)區(qū)(Extend):由一系列連續(xù)的塊組成的,其分配是單一分配的。區(qū)也是系統(tǒng)分配空間和回收空間的基本單位。(3)段

31、(Segment):表空間中特定類(lèi)型的邏輯單位,由一個(gè)或多個(gè)區(qū)構(gòu)成。包括數(shù)據(jù)段(Data Segment)、回滾段(Rollback Segment)、臨時(shí)段(Temporary Segment)和索引段(Index Segment)。(4)表空間(Tablespace):邏輯磁盤(pán)空間,由數(shù)據(jù)文件組成,是最大的邏輯存儲(chǔ)單元。 兩種結(jié)構(gòu)關(guān)系圖:3.2.1 表空間(tablespace)表空間是數(shù)據(jù)庫(kù)中的基本邏輯結(jié)構(gòu),一系列數(shù)據(jù)文件的集合。一個(gè)表空間可以包含多個(gè)數(shù)據(jù)文件,但是一個(gè)數(shù)據(jù)文件只能屬于一個(gè)表空間。查詢表空間:SQL>select * form dba_data_files

32、;查詢表空間的空閑信息:SQL>select * from dba_free_space;SQL>alter tablespace * offline;限制表空間大小:SQL>alter user * quota *m on * 臨時(shí)表空間用于為用戶排序的ORDER BY語(yǔ)句使用。創(chuàng)建數(shù)據(jù)庫(kù)時(shí)可以指定數(shù)據(jù)庫(kù)的默認(rèn)臨時(shí)表空間。在創(chuàng)建用戶的時(shí)候可以指定用戶的默認(rèn)臨時(shí)表空間。例如下句就指定temp為用戶的臨時(shí)表空間。SQL>CREATE USER * IDENTIFIED BY * TEMPORARY TABLESPACE temp;3.2.2 段(Seg

33、ment)段是對(duì)象在數(shù)據(jù)庫(kù)中占用的空間,雖然段和數(shù)據(jù)庫(kù)對(duì)象是一一對(duì)應(yīng)的,但段是從數(shù)據(jù)庫(kù)存儲(chǔ)的角度來(lái)看的。一個(gè)段只能屬于一個(gè)表空間,當(dāng)然一個(gè)表空間可以有多個(gè)段。表空間和數(shù)據(jù)文件是物理存儲(chǔ)上的一對(duì)多的關(guān)系,表空間和段是邏輯存儲(chǔ)上的一對(duì)多的關(guān)系,段不直接和數(shù)據(jù)文件發(fā)生關(guān)系。一個(gè)段可以屬于多個(gè)數(shù)據(jù)文件,關(guān)于段可以指定擴(kuò)展到哪個(gè)數(shù)據(jù)文件上面。段基本可以分為以下四種數(shù)據(jù)段(Data Segment)索引段(Index Segment)回滾段(Rollback Segment)臨時(shí)段(Temporary Segment)3.2.3 區(qū)間(Extent)關(guān)于Extent的翻譯有多種解釋?zhuān)械淖g作擴(kuò)展

34、,有的譯作盤(pán)區(qū),我這里通常譯為區(qū)間。在一個(gè)段中可以存在多個(gè)區(qū)間,區(qū)間是為數(shù)據(jù)一次性預(yù)留的一個(gè)較大的存儲(chǔ)空間,直到那個(gè)區(qū)間被用滿,數(shù)據(jù)庫(kù)會(huì)繼續(xù)申請(qǐng)一個(gè)新的預(yù)留存儲(chǔ)空間,即新的區(qū)間,一直到段的最大區(qū)間數(shù)(Max Extent)或沒(méi)有可用的磁盤(pán)空間可以申請(qǐng)。 在ORACLE8i以上版本,理論上一個(gè)段可以無(wú)窮個(gè)區(qū)間,但是多個(gè)區(qū)間對(duì)ORACLE卻是有性能影響的,ORACLE建議把數(shù)據(jù)分布在盡量少的區(qū)間上,以減少ORACLE的管理與磁頭的移動(dòng)。3.2.4 Oracle數(shù)據(jù)塊(Block)ORACLE最基本的存儲(chǔ)單位,他是OS數(shù)據(jù)塊的整數(shù)倍。ORACLE的操作都是以塊為基本單位,一個(gè)區(qū)間可以包含多個(gè)塊(如果區(qū)間大小不是塊大小的整數(shù)倍,ORACLE

溫馨提示

  • 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)論