| 一、ORACLE實(shí)例 1、ORACLE 實(shí)例——包括內存結構與后臺進(jìn)程 System Global Area(SGA) 和 Background Process 稱(chēng)為數據庫的實(shí)例。 2、ORACLE 數據庫——物理操作系統文件的集合 一系列物理文件的集合(數據文件,控制文件,聯(lián)機日志,參數文件等) 3、系統全局共享區System Global Area(SGA) System Global Area 是一塊巨大的共享內存區域,他被看做是Oracle 數據庫的一個(gè)大緩沖池,這里的數據可以被ORACLE的各個(gè)進(jìn)程共用。其大小可以通過(guò)如下語(yǔ)句查看: SQL> select * from v$sga; NAME VALUE -------------------- --------- Fixed Size 39816 Variable Size 259812784 Database Buffers 1.049E+09 Redo Buffers 327680 更詳細的信息可以參考V$sgastat、V$buffer_pool 主要包括以下幾個(gè)部分: a、 共享池(Shared pool) 共享池是SGA中最關(guān)鍵的內存片段,特別是在性能和可伸縮性上。一個(gè)太小的共享池會(huì )扼殺性能,使系統停止,太大的共享池也會(huì )有同樣的效果,將會(huì )消耗大量的CPU來(lái)管理這個(gè)共享池。不正確的使用共享池只會(huì )帶來(lái)災難。共享池主要又可以分為以下兩個(gè)部分: SQL語(yǔ)句緩沖(Library Cache) 當一個(gè)用戶(hù)提交一個(gè)SQL語(yǔ)句,Oracle會(huì )將這句SQL進(jìn)行分析(parse),這個(gè)過(guò)程類(lèi)似于編譯,會(huì )耗費相對較多的時(shí)間。在分析完這個(gè)SQL,Oracle會(huì )把他的分析結果給保存在Shared pool的Library Cache中,當數據庫第二次執行該SQL時(shí),Oracle自動(dòng)跳過(guò)這個(gè)分析過(guò)程,從而減少了系統運行的時(shí)間。這也是為什么第一次運行的SQL 比第二次運行的SQL要慢一點(diǎn)的原因。 下面舉例說(shuō)明parse的時(shí)間 SQL> select count(*) fromscpass ; COUNT(*) ---------- 243 Elapsed: 00:00:00.08 這是在Share_pool 和Data buffer 都沒(méi)有數據緩沖區的情況下所用的時(shí)間 SQL> alter system flush SHARED_POOL; System altered. 清空Share_pool,保留Data buffer SQL> select count(*) from scpass ; COUNT(*) ---------- 243 Elapsed: 00:00:00.02 SQL> select count(*) from scpass ; COUNT(*) ---------- 243 Elapsed: 00:00:00.00 從兩句SQL 的時(shí)間差上可以看出該SQL 的Parse 時(shí)間約為00:00:00.02 對于保存在共享池中的SQL語(yǔ)句,可以從V$Sqltext、v$Sqlarea中查詢(xún)到,對于編程者來(lái)說(shuō),要盡量提高語(yǔ)句的重用率,減少語(yǔ)句的分析時(shí)間。一個(gè)設計的差的應用程序可以毀掉整個(gè)數據庫的Share pool,提高SQL語(yǔ)句的重用率必須先養成良好的變成習慣,盡量使用Bind變量。 數據字典緩沖區(Data Dictionary Cache) 顯而易見(jiàn),數據字典緩沖區是ORACLE特地為數據字典準備的一塊緩沖池,供ORACLE內部使用,沒(méi)有什么可以說(shuō)的。 b、塊緩沖區高速緩存(Database Buffer Cache) 這些緩沖是對應所有數據文件中的一些被使用到的數據塊。讓他們能夠在內存中進(jìn)行操作。在這個(gè)級別里沒(méi)有系統文件,,戶(hù)數據文件,臨時(shí)數據文件,回滾段文件之分。也就是任何文件的數據塊都有可能被緩沖。數據庫的任何修改都在該緩沖里完成,并由DBWR進(jìn)程將修改后的數據寫(xiě)入磁盤(pán)。 這個(gè)緩沖區的塊基本上在兩個(gè)不同的列表中管理。一個(gè)是塊的“臟”表(Dirty List),需要用數據庫塊的書(shū)寫(xiě)器(DBWR)來(lái)寫(xiě)入,另外一個(gè)是不臟的塊的列表(Free List),一般的情況下,是使用最近最少使用 (Least Recently Used,LRU)算法來(lái)管理。塊緩沖區高速緩存又可以細分為以下三個(gè)部分(Default pool,Keep pool,Recycle pool)。如果不是人為設置初始化參數(Init.ora),ORACLE將默認為Default pool。由于操作系統尋址能力的限制,不通過(guò)特殊設置,在32位的系統上,塊緩沖區高速緩存最大可以達到 c、重做日志緩沖區(Redo log buffer) 重做日志文件的緩沖區,對數據庫的任何修改都按順序被記錄在該緩沖,然后由LGWR進(jìn)程將它寫(xiě)入磁盤(pán)。這些修改信息可能是DML語(yǔ)句,如(Insert,Update,Delete),或DDL語(yǔ)句,如(Create,Alter,Drop等)。 重做日志緩沖區的存在是因為內存到內存的操作比較內存到硬盤(pán)的速度快很多,所以重作日志緩沖區可以加快數據庫的操作速度,但是考慮的數據庫的一致性與可恢復性,數據在重做日志緩沖區中的滯留時(shí)間不會(huì )很長(cháng)。所以重作日志緩沖區一般都很小,大于 d、Java程序緩沖區(Java Pool) Java 的程序區,Oracle 8I 以后,Oracle 在內核中加入了對Java的支持。該程序緩沖區就是為Java 程序保留的。如果不用Java程序沒(méi)有必要改變該緩沖區的默認大小。 e、大池(Large Pool) 大池的得名不是因為大,而是因為它用來(lái)分配大塊的內存,處理比共享池更大的內存,在8.0開(kāi)始引入。 下面對象使用大池: MTS——在SGA的Large Pool中分配UGA 語(yǔ)句的并行查詢(xún)(Parallel Executeion of Statements)——允許進(jìn)程間消息緩沖區的分配,用來(lái)協(xié)調 并行查詢(xún)服務(wù)器 備份(Backup)——用于RMAN磁盤(pán)I/O緩存 4、后臺進(jìn)程(Background process) 后臺進(jìn)程是Oracle的程序,用來(lái)管理數據庫的讀寫(xiě),恢復和監視等工作。Server Process主要是通過(guò)他和user process進(jìn)行聯(lián)系和溝通,并由他和user process進(jìn)行數據的交換。在Unix機器上,Oracle后臺進(jìn)程相對于操作系統進(jìn)程,也就是說(shuō),一個(gè)Oracle后臺進(jìn)程將啟動(dòng)一個(gè)操作系統進(jìn)程;在Windows機器上, Oracle后臺進(jìn)程相對于操作系統線(xiàn)程,打開(kāi)任務(wù)管理器,我們只能看到一個(gè)ORACLE.EXE的進(jìn)程,但是通過(guò)另外的工具,就可以看到包含在這里進(jìn)程中的線(xiàn)程。 在Unix上可以通過(guò)如下方法查看后臺進(jìn)程: ps –ef | grep ora_ # ps -ef | grep ora_ | grep XCLUAT oracle 29431 1 0 Sep 02 2:02 ora_dbwr_SID oracle 29444 1 0 Sep 02 0:03 ora_ckpt_SID oracle 29448 1 0 Sep 02 2:42 ora_smon_SID oracle 29442 1 0 Sep 02 3:25 ora_lgwr_SID oracle 29427 1 0 Sep 02 0:01 ora_pmon_SID a、Oracle系統有5 個(gè)基本進(jìn)程他們是 DBWR(數據文件寫(xiě)入進(jìn)程) LGWR(日志文件寫(xiě)入進(jìn)程) SMON(系統監護進(jìn)程) PMON(用戶(hù)進(jìn)程監護進(jìn)程) CKPT(檢查點(diǎn)進(jìn)程,同步數據文件, 日志文件,控制文件) 服務(wù)進(jìn)程:用戶(hù)進(jìn)程服務(wù)。 用戶(hù)進(jìn)程:在客戶(hù)端,負責將用戶(hù)的SQL語(yǔ)句傳遞給服務(wù)進(jìn)程,并從服務(wù)器段拿回查詢(xún)數據。
負責將更改的數據從數據庫緩沖區高速緩存寫(xiě)入數據文件 c、LGWR 將重做日志緩沖區中的更改寫(xiě)入在線(xiàn)重做日志文件。LGWR是一個(gè)必須和前臺用戶(hù)進(jìn)程通信的進(jìn)程。當數據被修改的時(shí)候,系統會(huì )產(chǎn)生一個(gè)重做日志并記錄在重做日志緩沖區內。這個(gè)重做日志可以類(lèi)似的認為是以下的一個(gè)結構: SCN=000000001000 數據塊ID 對象ID=0801 數據行=02 修改后的數據=0011 提交的時(shí)候,LGWR必須將被修改的數據的重做日志緩沖區內數據寫(xiě)入日志數據文件,然后再通知前臺進(jìn)程提交成功,并由前臺進(jìn)程通知用戶(hù)。從這點(diǎn)可以看出LGWR承擔了維護系統數據完整性的任務(wù)。 LGWR 工作的主要條件如下 用戶(hù)提交 有1/3 重做日志緩沖區未被寫(xiě)入磁盤(pán) 有大于 超時(shí) DBWR需要寫(xiě)入的數據的SCN號大于LGWR 記錄的SCN號,DBWR 觸發(fā)LGWR寫(xiě)入 d、SMON :檢查數據庫的一致性如有必要還會(huì )在數據庫打開(kāi)時(shí)啟動(dòng)數據庫的恢復。 工作主要包含 清除臨時(shí)空間 在系統啟動(dòng)時(shí),完成系統實(shí)例恢復 聚結空閑空間 從不可用的文件中恢復事務(wù)的活動(dòng) OPS中失敗節點(diǎn)的實(shí)例恢復 清除OBJ$表 縮減回滾段 使回滾段脫機 e、PMON:負責在一個(gè)Oracle 進(jìn)程失敗時(shí)清理資源。 主要用于清除失效的用戶(hù)進(jìn)程,釋放用戶(hù)進(jìn)程所用的資源。如PMON將回滾未提交的工作,釋放鎖,釋放分配給失敗進(jìn)程的SGA資源。 f、CKPT 同步數據文件,日志文件和控制文件,由于DBWR/LGWR的工作原理,造成了數據文件,日志文件,控制文件的不一至,這就需要CKPT進(jìn)程來(lái)同步。CKPT會(huì )更新數據文件/控制文件的頭信息。 CKPT工作的主要條件如下 在日志切換的時(shí)候 數據庫用immediate ,transaction , normal 選項shutdown 數據庫的時(shí)候 根據初始話(huà)文件LOG_CHECKPOINT_INTERVAL、LOG_CHECKPOINT_TIMEOUT、FAST_START_IO_TARGET 的設置的數值來(lái)確定 用戶(hù)觸發(fā) 以下進(jìn)程的啟動(dòng)需要手工配置 g、ARCH:在每次日志切換時(shí)把已滿(mǎn)的日志組進(jìn)行備份或歸檔。 當數據庫以歸檔方式運行的時(shí)候,Oracle會(huì )啟動(dòng)ARCH進(jìn)程,當重做日志文件被寫(xiě)滿(mǎn)時(shí),日志文件進(jìn)行切換,舊的重做日志文件就被ARCH進(jìn)程復制到一個(gè)/多個(gè)特定的目錄/遠程機器。這些被復制的重做日志文件被叫做歸檔日志文件。 h、RECO 負責解決分布事物中的故障。Oracle可以連接遠程的多個(gè)數據庫,當由于網(wǎng)絡(luò )問(wèn)題,有些事物處于懸而未決的狀態(tài)。RECO進(jìn)程試圖建立與遠程服務(wù)器的通信,當故障消除后,RECO進(jìn)程自動(dòng)解決所有懸而未決的會(huì )話(huà)。 i、服務(wù)進(jìn)程Server Process 服務(wù)進(jìn)程的分類(lèi) 專(zhuān)用服務(wù)進(jìn)程(Dedicated Server Process) 一個(gè)服務(wù)進(jìn)程對應一個(gè)用戶(hù)進(jìn)程 共享服務(wù)進(jìn)程(MultiTreaded Server Process) 一個(gè)服務(wù)進(jìn)程對應多個(gè)用戶(hù)進(jìn)程,輪流為用戶(hù)進(jìn)程服務(wù)。 PGA & UGA PGA = Process Global Area UGA = User Global Area 他保存了用戶(hù)的變量、權限、堆棧、排序空間等用戶(hù)信息,對于專(zhuān)用服務(wù)器進(jìn)程,UGA在PGA中分配。對于多線(xiàn)程進(jìn)程,UGA在Large pool中分配。 j、用戶(hù)進(jìn)程User Process 在客戶(hù)端,將用戶(hù)的SQL 語(yǔ)句傳遞給服務(wù)進(jìn)程 5、一個(gè)貫穿數據庫全局的概念----系統改變號SCN(System Change Number) 系統改變號,一個(gè)由系統內部維護的序列號。當系統需要更新的時(shí)候自動(dòng)增加,他是系統中維持數據的一致性和順序恢復的重要標志。 a. 查詢(xún)語(yǔ)句不會(huì )使SCN增加,就算是同時(shí)發(fā)生的更新,數據庫內部對應的SCN也是不同的。這樣一來(lái)就保證了數據恢復時(shí)候的順序。 b. 維持數據的一致性,當一
ORACLE數據庫的組成——物理操作系統文件的集合。主要包括以下幾種。 1、控制文件(參數文件init.ora記錄了控制文件的位置) 控制文件包括如下主要信息 數據庫的名字,檢查點(diǎn)信息,數據庫創(chuàng )建的時(shí)間戳 所有的數據文件,聯(lián)機日志文件,歸檔日志文件信息 備份信息等 有了這些信息,Oracle就知道那些文件是數據文件,現在的重做日志文件是哪些,這些都是系統啟動(dòng)和運行的基本條件,所以他是Oracle運行的根本。如果沒(méi)有控制文件系統是不可能啟動(dòng)的??刂莆募欠浅V匾?,一般采用多個(gè)鏡相復制來(lái)保護控制文件,或采用RAID來(lái)保護控制文件??刂莆募膩G失,將使數據庫的恢復變的很復雜。 控制文件信息可以從V$Controlfile中查詢(xún)獲得 2、數據文件(數據文件的詳細信息記載在控制文件中) 可以通過(guò)如下方式查看數據文件 SQL> select name from v$datafile; NAME --------------------------------------------- /u05/dbf/PROD/system_01.dbf /u06/dbf/PROD/temp_01.dbf /u04/dbf/PROD/users_01.dbf /u09/dbf/PROD/rbs_01.dbf /u06/dbf/PROD/applsys_indx_01.dbf /u05/dbf/PROD/applsys_data_01.dbf 從以上可以看出,數據文件大致可以分為以下幾類(lèi): i. 系統數據文件(system_01.dbf) 存放系統表和數據字典,一般不放用戶(hù)的數據,但是用戶(hù)腳本,如過(guò)程,函數,包等卻是保存在數據字典中的。 名詞解釋?zhuān)簲祿值洹祿值涫且恍┫到y表或視圖,他存放系統的信息,他包括數據庫版本,數據文件信息,表與索引等段信息,系統的運行狀態(tài)等各種和系統有關(guān)的信息和用戶(hù)腳本信息。數據庫管理員可以通過(guò)對數據字典的查詢(xún),就可以了解到Oracle的運行狀態(tài)。 ii. 回滾段文件(rbs_01.dbf) 如果數據庫進(jìn)行對數據的修改,那么就必須使用回滾段,回滾段是用來(lái)臨時(shí)存放修改前的數據(Before Image)?;貪L段通常都放在一個(gè)單獨的表空間上(回滾表空間),避免表空間碎片化,這個(gè)表空間包含的數據文件就是回滾數據文件。 iii. 臨時(shí)數據文件(temp_01.dbf) 主要存放用戶(hù)的排序等臨時(shí)數據,與回滾段相似,臨時(shí)段也容易引起表空間碎片化,而且沒(méi)有辦法在一個(gè)永久表空間上開(kāi)辟臨時(shí)段,所以就必須有一個(gè)臨時(shí)表空間,它所包含的數據文件就是臨時(shí)數據文件,主要用于不能在內存上進(jìn)行的排序操作。我們必須為用戶(hù)指定一個(gè)臨時(shí)表空間。 iv. 用戶(hù)數據文件(/applsys_data_01.dbf ,applsys_indx_01.dbf) 存放用戶(hù)數據,這里列舉了兩類(lèi)常見(jiàn)的用戶(hù)型數據,一般數據和索引數據,一般來(lái)說(shuō),如果條件許可的話(huà),可以考慮放在不同的磁盤(pán)上。 3、重做日志文件(聯(lián)機重做日志) 用戶(hù)對數據庫進(jìn)行的任何操作都會(huì )記錄在重做日志文件。在了解重做日志之前必須了解重做日志的兩個(gè)概念,重做日志組和重做日志組成員(Member),一個(gè)數據庫中至少要有兩個(gè)日志組文件,一組寫(xiě)完后再寫(xiě)另一組,即輪流寫(xiě)。每個(gè)日志組中至少有一個(gè)日志成員,一個(gè)日志組中的多個(gè)日志成員是鏡相關(guān)系,有利于日志文件的保護,因為日志文件的損壞,特別是當前聯(lián)機日志的損壞,對數據庫的影響是巨大的。 聯(lián)機日志組的交換過(guò)程叫做切換,需要特別注意的是,日志切換在一個(gè)優(yōu)化效果不好的數據庫中會(huì )引起臨時(shí)的“掛起”。掛起大致有兩種情況: 在歸檔情況下,需要歸檔的日志來(lái)不及歸檔,而聯(lián)機日志又需要被重新利用 檢查點(diǎn)事件還沒(méi)有完成(日志切換引起檢查點(diǎn)),而聯(lián)機日志需要被重新利用 解決這種問(wèn)題的常用手段是: i.增加日志組 ii.增大日志文件成員大小 通過(guò)v$log可以查看日志組,v$logfile可以查看具體的成員文件。 4、歸檔日志文件 Oracle可以運行在兩種模式之中,歸檔模式和不歸檔模式。如果不用歸檔模式,當然,你就不會(huì )有歸檔日志,但是,你的系統將不會(huì )是一個(gè)實(shí)用系統,特別是不能用于生產(chǎn)系統,因為你可能會(huì )丟失數據。但是在歸檔模式中,為了保存用戶(hù)的所有修改,在重做日志文件切換后和被覆蓋之間系統將他們另外保存成一組連續的文件系列,該文件系列就是歸檔日志文件。 有人或許會(huì )說(shuō),歸檔日志文件占領(lǐng)我大量的硬盤(pán)空間,其實(shí),具體想一想,你是愿意浪費一點(diǎn)磁盤(pán)空間來(lái)保護你的數據,還是愿意丟失你的數據呢?顯而義見(jiàn),我們需要保證我們的數據的安全性。其實(shí),歸檔并不是一直占領(lǐng)你的磁盤(pán)空間,你可以把她備份到磁帶上,或則刪除上一次完整備份前的所有日志文件。 5、初始化參數文件 initSID.ora或init.ora文件,因為版本的不一樣,其位置也可能會(huì )不一樣。在8i中,通常位于$ORACLE_HOME/admin//Pfile下,初始化文件記載了許多數據庫的啟動(dòng)參數,如內存,控制文件,進(jìn)程數等,在數據庫啟動(dòng)的時(shí)候加載(Nomount時(shí)加載),初始化文件記錄了很多重要參數,對數據庫的性能影響很大,如果不是很了解,不要輕易亂改寫(xiě),否則會(huì )引起數據庫性能下降。 6、其他文件 i . 密碼文件 用于Oracle 的具有sysdba權限用戶(hù)的認證. ii. 日志文件 報警日志文件(alert.log或alrt.ora) 記錄數據庫啟動(dòng),關(guān)閉和一些重要的出錯信息。數據庫管理員應該經(jīng)常檢查這個(gè)文件,并對出現的問(wèn)題作出即使的反應。你可以通過(guò)以下SQL 找到他的路徑select value from v$PARAMETER where name ="background_dump_dest"; 后臺或用戶(hù)跟蹤文件 系統進(jìn)程或用戶(hù)進(jìn)程出錯前寫(xiě)入的信息,一般不可能讀懂,可以通過(guò)ORACLE的TKPROF工具轉化為可以讀懂的格式。對于系統進(jìn)程產(chǎn)生的跟蹤文件與報警日志文件的路徑一樣,用戶(hù)跟蹤文件的路徑,你可以通過(guò)以下SQL找到他的路徑select value from v$PARAMETER where name ="user_dump_dest"; 三、ORACLE邏輯結構 1、 表空間(tablespace) 表空間是數據庫中的基本邏輯結構,一系列數據文件的集合。一個(gè)表空間可以包含多個(gè)數據文件,但是一個(gè)數據文件只能屬于一個(gè)表空間。 2、 段(Segment) 段是對象在數據庫中占用的空間,雖然段和數據庫對象是一一對應的,但段是從數據庫存儲的角度來(lái)看的。一個(gè)段只能屬于一個(gè)表空間,當然一個(gè)表空間可以有多個(gè)段。 表空間和數據文件是物理存儲上的一對多的關(guān)系,表空間和段是邏輯存儲上的一對多的關(guān)系,段不直接和數據文件發(fā)生關(guān)系。一個(gè)段可以屬于多個(gè)數據文件,關(guān)于段可以指定擴展到哪個(gè)數據文件上面。 段基本可以分為以下四種 數據段(Data Segment) 索引段(Index Segment) 回滾段(Rollback Segment) 臨時(shí)段(Temporary Segment) 3、區間(Extent) 關(guān)于Extent的翻譯有多種解釋?zhuān)械淖g作擴展,有的譯作盤(pán)區,我這里通常譯為區間。在一個(gè)段中可以存在多個(gè)區間,區間是為數據一次性預留的一個(gè)較大的存儲空間,直到那個(gè)區間被用滿(mǎn),數據庫會(huì )繼續申請一個(gè)新的預留存儲空間,即新的區間,一直到段的最大區間數(Max Extent)或沒(méi)有可用的磁盤(pán)空間可以申請。 在ORACLE8i以上版本,理論上一個(gè)段可以無(wú)窮個(gè)區間,但是多個(gè)區間對ORACLE卻是有性能影響的,ORACLE建議把數據分布在盡量少的區間上,以減少ORACLE的管理與磁頭的移動(dòng)。 4、Oracle數據塊(Block) ORACLE最基本的存儲單位,他是OS數據塊的整數倍。ORACLE的操作都是以塊為基本單位,一個(gè)區間可以包含多個(gè)塊(如果區間大小不是塊大小的整數倍,ORACLE實(shí)際也擴展到塊的整數倍)。 5、基本表空間介紹 a. 系統表空間 主要存放數據字典和內部系統表基表 查看數據數據字典的SQL select * from dict 查看內部系統表的SQL select * from v$fixed_view_definition DBA對系統的系統表中的數據字典必須有一個(gè)很深刻的了解,他們必須準備一些基礎的SQL語(yǔ)句,通過(guò)這些SQL可以立即了解系統的狀況和數據庫的狀態(tài),這些基本的SQL包括 系統的剩余空間 系統的SGA 狀態(tài)系統的等待 用戶(hù)的權限 當前的用戶(hù)鎖 緩沖區的使用狀況等 在成為DBA 的道路上我們不建議你過(guò)分的依賴(lài)于OEM/Quest 等優(yōu)秀的數據庫管理工具,因為他們不利于你對數據數據字典的理解,SQL語(yǔ)句可以完成幾乎全部的數據庫管理工作。 大量的讀少量的寫(xiě)是該表空間的一個(gè)顯著(zhù)的特點(diǎn)。 b. 臨時(shí)表空間. 臨時(shí)表空間顧名思義是用來(lái)存放臨時(shí)數據的,例如排序操作的臨時(shí)空間,他的空間會(huì )在下次系統啟動(dòng)的時(shí)候全部被釋放。 c. 回滾段表空間 i. 回滾段在系統中的作用 當數據庫進(jìn)行更新插入刪除等操作的時(shí)候,新的數據被更新到原來(lái)的數據文件,而舊的數據(Before Image)就被放到回滾段中,如果數據需要回滾,那么可以從回滾段將數據再復制到數據文件中。來(lái)完成數據的回滾。在系統恢復的時(shí)候, 回滾段可以用來(lái)回滾沒(méi)有被commit 的數據,解決系統的一至性。 回滾段在什么情況下都是大量的寫(xiě),一般是少量讀,因此建議把回滾段單獨出來(lái)放在一個(gè)單獨的設備(如單獨的磁盤(pán)或RAID),以減少磁盤(pán)的IO爭用。 ii. 回滾段的工作方式 一個(gè)回滾表空間可以被劃分成多個(gè)回滾段. 一個(gè)回滾段可以保存多個(gè)會(huì )話(huà)的數據. 回滾段是一個(gè)圓形的數據模型 假設回滾段由4 個(gè)區間組成,他們的使用順序就是區間1à區間2à區間3à區間4à區間1。也就是說(shuō),區間是可以循環(huán)使用的,當區間4到區間1的時(shí)候,區間1里面的會(huì )話(huà)還沒(méi)有結束, 區間4用完后就不能再用區間1,這時(shí)系統必須分配區間5,來(lái)繼續為其他會(huì )話(huà)服務(wù)服務(wù)。 我們分析一個(gè)Update 語(yǔ)句的完成 ①. 用戶(hù)提交一個(gè)Update 語(yǔ)句 ②. Server Process 檢查內存緩沖. 如果沒(méi)有該數據塊的緩沖,則從磁盤(pán)讀入 i. 如果沒(méi)有內存的有效空間,DBWR被啟動(dòng)將未寫(xiě)入磁盤(pán)的臟緩沖寫(xiě)入磁盤(pán) ii. 如果有有效空間,則讀入 ③. 在緩沖內更新數據 i. 申請一個(gè)回滾段入口,將舊數據寫(xiě)如回滾段 ii. 加鎖并更新數據 iii. 并在同時(shí)將修改記錄在Redo log buffer中 |
聯(lián)系客服