lob移表空间 oracle_Oracle数据库(1)Oracle体系结构概述(一)
Oracle數(shù)據(jù)庫的體系結(jié)構(gòu)主要包括:物理存儲(chǔ)結(jié)構(gòu)、邏輯存儲(chǔ)結(jié)構(gòu)、內(nèi)存結(jié)構(gòu)和實(shí)例進(jìn)程結(jié)構(gòu)。了解了Oracle的體系結(jié)構(gòu),就可以對(duì)Oracle數(shù)據(jù)庫有一個(gè)整體認(rèn)識(shí),這樣有利于后續(xù)Oracle的學(xué)習(xí)。下面我們分別來了解邏輯存儲(chǔ)結(jié)構(gòu)、物理存儲(chǔ)結(jié)構(gòu)、內(nèi)存結(jié)構(gòu)和實(shí)例集成結(jié)構(gòu)。
一、邏輯存儲(chǔ)結(jié)構(gòu)
邏輯存儲(chǔ)結(jié)構(gòu)是Oracle數(shù)據(jù)庫存儲(chǔ)結(jié)構(gòu)的核心內(nèi)容,對(duì)Oracle的所有操作都會(huì)涉及邏輯存儲(chǔ)結(jié)構(gòu)。邏輯存儲(chǔ)結(jié)構(gòu)是從邏輯的角度分析數(shù)據(jù)庫的構(gòu)成,是對(duì)數(shù)據(jù)庫存儲(chǔ)結(jié)構(gòu)在邏輯概念上的劃分。Oracle數(shù)據(jù)庫(Database)從邏輯存儲(chǔ)結(jié)構(gòu)上講,主要包括表空間(Tablespace)、段(Segment)、區(qū)(Extent)和數(shù)據(jù)塊(Block)。這四者存在關(guān)系為:多個(gè)數(shù)據(jù)塊組成一個(gè)區(qū);多區(qū)組成一個(gè)段;多個(gè)段組成一個(gè)表空間。一個(gè)Oracle數(shù)據(jù)庫(數(shù)據(jù)庫本身也屬于邏輯結(jié)構(gòu))由多個(gè)表空間組成,Oracle數(shù)據(jù)庫的邏輯存儲(chǔ)結(jié)構(gòu)可以表示為下圖:
圖1
1、表空間(Tablespace)
在Oracle數(shù)據(jù)庫中,最大的邏輯存儲(chǔ)結(jié)構(gòu)是表空間(Tablespace),表空間與物理上的數(shù)據(jù)文件相對(duì)應(yīng),一個(gè)表空間可以對(duì)應(yīng)多個(gè)數(shù)據(jù)文件,但是一個(gè)數(shù)據(jù)文件只能對(duì)應(yīng)一個(gè)表空間。一個(gè)表空間的大小等于構(gòu)成該表空間的所有數(shù)據(jù)文件大小的綜和。我們?cè)跀?shù)據(jù)庫中創(chuàng)建的所有內(nèi)容都存儲(chǔ)在表空間中,如果我們沒有指定表空間,那么我們?cè)跀?shù)據(jù)庫中創(chuàng)建的內(nèi)容將會(huì)存儲(chǔ)在默認(rèn)的表空間中。
我們創(chuàng)建數(shù)據(jù)庫時(shí),系統(tǒng)會(huì)自動(dòng)創(chuàng)建一些表空間,這些表空間說明如下:
SYSTEM:系統(tǒng)表空間,包含數(shù)據(jù)字典(描述數(shù)據(jù)庫自身結(jié)構(gòu)、所有對(duì)象、用戶及角色的的表)。SYSTEM表空間是數(shù)據(jù)庫中數(shù)據(jù)字典所處的位置。如果沒有SYSTEM表空間,那么數(shù)據(jù)庫就無法運(yùn)作 。創(chuàng)建數(shù)據(jù)庫后,需要?jiǎng)?chuàng)建存儲(chǔ)數(shù)據(jù)的其他表空間。
SYSAUX:輔助系統(tǒng)表空間,用于減少系統(tǒng)表空間的負(fù)荷,提高系統(tǒng)的作業(yè)效率。
TEMP:臨時(shí)表空間,用于存儲(chǔ)臨時(shí)臨時(shí)數(shù)據(jù)。
EXAMPLE:實(shí)例表空間,存放實(shí)例數(shù)據(jù)庫模式對(duì)象信息及其培訓(xùn)資料等。
UNIDOTBSI:重做表空間,存放數(shù)據(jù)庫中有關(guān)重做的相關(guān)信息和數(shù)據(jù),當(dāng)用戶對(duì)數(shù)據(jù)庫表進(jìn)行修改,包括INSERT、UPDATE和DELETE操作時(shí),Oracle系統(tǒng)自動(dòng)使用重做表空間,來臨時(shí)存放修改前的數(shù)據(jù)?當(dāng)所做的修改完成,并提交之后,系統(tǒng)會(huì)根據(jù)需要保留修改前數(shù)據(jù)的時(shí)間長短,來釋放重做表空間的部分空間。
USERS:用戶表空間,存放永久性用戶對(duì)象的數(shù)據(jù)和私有信息,因此,也稱為數(shù)據(jù)表空間,每個(gè)數(shù)據(jù)庫都應(yīng)該有一個(gè)用戶表空間,以便在創(chuàng)建用戶的時(shí)候,將其分配給用戶。除了Oracle系統(tǒng)默認(rèn)創(chuàng)建表空間,用戶可以根據(jù)應(yīng)用系統(tǒng)的規(guī)模,及其所要存放對(duì)象的情況,創(chuàng)建多個(gè)表空間,以區(qū)分用戶數(shù)據(jù)和系統(tǒng)數(shù)據(jù)。?
通過sql語句可以查看表空間,如下圖:
select * from dba_tablespaces;圖2
2、段(Segment)
在Oracle數(shù)據(jù)庫中,段是一組盤區(qū),這個(gè)盤區(qū)組成了被Oracle視為一個(gè)單位的數(shù)據(jù)庫對(duì)象,一個(gè)段存儲(chǔ)了一個(gè)數(shù)據(jù)庫對(duì)象(比如一張表,一個(gè)索引都屬于一個(gè)數(shù)據(jù)庫對(duì)象。對(duì)于數(shù)據(jù)量大的表可能進(jìn)行分區(qū)處理,當(dāng)段的區(qū)滿時(shí),系統(tǒng)會(huì)分配另一個(gè)區(qū),因此,段的數(shù)據(jù)區(qū)在磁盤上可能是不連續(xù)的,一個(gè)也可能會(huì)由多個(gè)段組成)。所以,段一般是數(shù)據(jù)庫終端用戶將處理的最小存儲(chǔ)單位。
按照段中存儲(chǔ)存儲(chǔ)數(shù)據(jù)的特征,可以將段分為5種類型:數(shù)據(jù)段、索引段、臨時(shí)段、LOB段和回退段。
通過sql語句可以查看數(shù)據(jù)段類型情況,如下圖:
select distinct(segment_type) from dba_segments;圖3
數(shù)據(jù)段:用于存儲(chǔ)表中的數(shù)據(jù),在Oracle中,如果用戶在表空間創(chuàng)建一個(gè)表,那么系統(tǒng)會(huì)自動(dòng)在該表空間中創(chuàng)建一個(gè)數(shù)據(jù)段,而且數(shù)據(jù)段的名稱和表的名稱相同。如果創(chuàng)建的是分區(qū)表,系統(tǒng)會(huì)為每個(gè)分區(qū)分配一個(gè)數(shù)據(jù)段。
索引段:用于存儲(chǔ)表中的索引信息。在Oracle中,如果用戶創(chuàng)建了一個(gè)索引,則系統(tǒng)會(huì)為該索引創(chuàng)建一個(gè)索引段,并且索引段的名稱與索引的名稱相同。如果創(chuàng)建的是分區(qū)索引,那么系統(tǒng)會(huì)為每個(gè)分區(qū)索引創(chuàng)建一個(gè)索引段。
臨時(shí)段:用于存儲(chǔ)臨時(shí)數(shù)據(jù),在Oracle中,排序或者匯總時(shí)產(chǎn)生的臨時(shí)數(shù)據(jù)都存儲(chǔ)在臨時(shí)段中,該段由系統(tǒng)在用戶的臨時(shí)表空間中自動(dòng)創(chuàng)建,并在排序或匯總結(jié)束時(shí)自動(dòng)消除。
LOB段:用于存儲(chǔ)表中大型數(shù)據(jù)對(duì)象。在Oracle中,大型數(shù)據(jù)對(duì)象類型主要有CLOB和BLOB。
回退段:用于存儲(chǔ)用戶數(shù)據(jù)被修改之前的值。在Oracle中,如果需要對(duì)用戶的數(shù)據(jù)進(jìn)行回退操作,也就是恢復(fù)操作,就要使用回退段。每個(gè)Oracle數(shù)據(jù)庫都應(yīng)該至少有一個(gè)回退段,供數(shù)據(jù)恢復(fù)使用。
3、區(qū)(Extent)
在Oracle中,區(qū)(Extent)是磁盤空間分配的最小單位。區(qū)由一個(gè)或者多個(gè)數(shù)據(jù)塊組成,而一個(gè)或多個(gè)區(qū)又組成一個(gè)段。
段的增大是通過增加區(qū)的個(gè)數(shù)來實(shí)現(xiàn)的,但是在一個(gè)數(shù)據(jù)段中,區(qū)的個(gè)數(shù)并不是無限制的。在創(chuàng)建時(shí)可以使用MIN_EXTENTS和MAX_EXTENTS來定義區(qū)的個(gè)數(shù),其中參數(shù)MIN_EXTENTS表示段中最少可分配的區(qū)的個(gè)數(shù),MAX_EXTENTS參數(shù)表示一段中最多可以分配的區(qū)的個(gè)數(shù)。
通過數(shù)據(jù)字典DBA_TABLESPACES可以了解表空間信息,以及表空間的最大與最小區(qū)個(gè)數(shù)。
select min_extents,max_extents,tablespace_name from dba_tablespaces;圖4
4.塊(Block)
塊(Block)是用來管理存儲(chǔ)空間的基本單位,也是最小的邏輯存儲(chǔ)單位。Oracle數(shù)據(jù)庫是以塊為單位進(jìn)行邏輯讀寫(I/O)操作的。
在創(chuàng)建數(shù)據(jù)庫時(shí),初始化參數(shù)DB_BLOCK_SIZE用來指定一個(gè)數(shù)據(jù)塊的大小。數(shù)據(jù)庫創(chuàng)建之后,將不能修改數(shù)據(jù)塊的大小。
可以通過sql/plus使用如下sql語句查看塊的大小。
show parameter db_block_size在數(shù)據(jù)庫塊中可以存儲(chǔ)的數(shù)據(jù)有表數(shù)據(jù)、索引數(shù)據(jù)和簇?cái)?shù)據(jù)等。雖然數(shù)據(jù)塊可以存儲(chǔ)不同類型的數(shù)據(jù),但是,每個(gè)數(shù)據(jù)庫的結(jié)構(gòu)相同。結(jié)構(gòu)如下圖所示:
| 塊頭部 |
| 表目錄 |
| 行目錄 |
| 空閑空間 |
| 行空間 |
圖5
由上圖可知,一個(gè)數(shù)據(jù)庫主要由:塊頭部、表目錄、行目錄、空閑空間和行空間五部分組成。
塊頭部:包含塊中的一般屬性信息,例如數(shù)據(jù)塊的物理地址、所屬段的類型等。
表目錄:如果數(shù)據(jù)塊中存儲(chǔ)的是某個(gè)表的數(shù)據(jù)(表中一行或多行記錄),則關(guān)于該表的信息將存放在表目錄中。
行目錄:用于存儲(chǔ)數(shù)據(jù)塊中有效的行信息。
空閑空間:數(shù)據(jù)塊中還沒有使用的存儲(chǔ)空間。
行空間:表或者索引的數(shù)據(jù)存儲(chǔ)在行空間中,所以行空間是數(shù)據(jù)塊中已經(jīng)使用的存儲(chǔ)空間。
塊頭部、表目錄和行目錄3者共同組成數(shù)據(jù)塊的頭部信息區(qū)。塊頭部信息區(qū)中并沒有存儲(chǔ)實(shí)際的數(shù)據(jù)庫數(shù)據(jù),只是用來引導(dǎo)Oracle系統(tǒng)讀取數(shù)據(jù)的,如果頭部信息區(qū)受損,則該數(shù)據(jù)塊將消失,快中存儲(chǔ)的數(shù)據(jù)也將丟失。由于塊頭部、表目錄和行目錄所組成的頭部信息區(qū)并不存儲(chǔ)實(shí)際數(shù)據(jù),所以一個(gè)數(shù)據(jù)塊的容量實(shí)際上是空閑空間和行空間容量的總和。
二、物理結(jié)構(gòu)
Oracle數(shù)據(jù)庫在物理上是由存儲(chǔ)在磁盤中的操作系統(tǒng)文件所組成的,這些文件就是Oracle的物理存儲(chǔ)結(jié)構(gòu)。Oracle數(shù)據(jù)庫在物理上主要由數(shù)據(jù)文件(*.dbf)、控制文件(*.ctl)和重做日志文件(*.log)組成,參數(shù)文件(SPFILE.ORA)、密碼文件(PWD.ORA)等與Oracle有關(guān),但從技術(shù)上說不屬于數(shù)據(jù)庫的附屬文件。
下面介紹說明這些文件:
1、數(shù)據(jù)文件(Date File)
指存儲(chǔ)數(shù)據(jù)庫數(shù)據(jù)的文件。例如,表中的記錄和索引等都存在數(shù)據(jù)文件中。在讀取數(shù)據(jù)時(shí),如果用戶要讀取的數(shù)據(jù)不在內(nèi)存的數(shù)據(jù)緩沖區(qū)中,那么Oracle就從數(shù)據(jù)文件中把數(shù)據(jù)讀取出來,放到內(nèi)存的緩沖區(qū)中去,供用戶查詢;存儲(chǔ)數(shù)據(jù)時(shí),用戶修改或添加的數(shù)據(jù)會(huì)先保存在內(nèi)存的數(shù)據(jù)緩沖區(qū)中,然后由Oracle的后臺(tái)進(jìn)程DBWn將數(shù)據(jù)寫入數(shù)據(jù)文件。
數(shù)據(jù)文件一般有以下幾個(gè)特點(diǎn):
(1)一個(gè)表空間(數(shù)據(jù)庫存儲(chǔ)的邏輯單位)由一個(gè)或多個(gè)數(shù)據(jù)文件組成。
(2)一個(gè)數(shù)據(jù)文件僅與一個(gè)數(shù)據(jù)庫聯(lián)系,而一個(gè)數(shù)據(jù)庫通常包含多個(gè)數(shù)據(jù)文件。
(3)可以為數(shù)據(jù)文件設(shè)置某些特性以便它們?cè)跀?shù)據(jù)庫運(yùn)行空間不足時(shí)能夠自動(dòng)擴(kuò)展。
通過查詢數(shù)據(jù)字典DBA_DATA_FILES和V$DATAFILE來了解數(shù)據(jù)文件的信息和結(jié)構(gòu)。
desc dba_data_files;圖6
通過數(shù)據(jù)字典DBA_DATA_FILES,可以了解數(shù)據(jù)文件的名稱、大小以及標(biāo)識(shí)等信息。如上圖所示,其中部分字段解釋如下:
FILE_NAME:數(shù)據(jù)文件的名稱以及存放路徑。
FILE_ID:數(shù)據(jù)文件在數(shù)據(jù)庫中的ID號(hào)。
TABLESPACE_NAME:數(shù)據(jù)文件對(duì)應(yīng)的表空間名稱。
BYTES:數(shù)據(jù)文件的大小。
BLOCKS:數(shù)據(jù)文件所占用的數(shù)據(jù)塊數(shù)。
STATUS:數(shù)據(jù)文件的狀態(tài)。
AUTOEXTENSIBLE:數(shù)據(jù)文件是否可擴(kuò)展。
通過數(shù)據(jù)字典V$DATAFILE可以了解記錄的數(shù)據(jù)文件動(dòng)態(tài)信息,通過該數(shù)據(jù)字典可以了解數(shù)據(jù)文件的同步信息。如下:
圖7
上述圖7可以看出,FILE#為數(shù)據(jù)文件編號(hào);NAME為數(shù)據(jù)文件名稱;CHECKPOINT_CHANGE#為數(shù)據(jù)文件的同步號(hào),同步號(hào)隨著系統(tǒng)的運(yùn)行自動(dòng)修改,以維持所有數(shù)據(jù)文件的同步。
2、控制文件(Control File)
是一個(gè)很小的二進(jìn)制文件,用于描述數(shù)據(jù)庫的物理結(jié)構(gòu)。在Oracle數(shù)據(jù)庫中,控制文件相當(dāng)重要,它存放著數(shù)據(jù)庫中數(shù)據(jù)文件和日志文件的信息。一個(gè)Oracle數(shù)據(jù)庫通常包括對(duì)個(gè)控制文件,在數(shù)據(jù)庫使用過程中,數(shù)據(jù)庫需不斷更新控制文件,一旦控制文件受損,那么數(shù)據(jù)庫將無法正常工作。通常,在安裝Oracle數(shù)據(jù)庫時(shí)會(huì)自動(dòng)創(chuàng)建控制文件。
通過數(shù)據(jù)字典V$CONTROLFILE可以了解控制文件的信息,如下圖:
select name from v$controfile;圖8
Oracle數(shù)據(jù)系統(tǒng)一般會(huì)默認(rèn)創(chuàng)建3個(gè)包含相同信息的控制文件,目的為了當(dāng)其中一個(gè)控制文件受損時(shí),可以調(diào)用其他控制文件繼續(xù)工作。
3.重做日志文件(Redo Log File)
簡稱日志文件,是記錄數(shù)據(jù)庫中所有修改信息的文件。借助日志文件,我們可以保證數(shù)據(jù)的安全性,也可以實(shí)現(xiàn)數(shù)據(jù)庫的備份與恢復(fù)。
為了確保日志文件的安全,在實(shí)際應(yīng)用中,應(yīng)允許日志文件進(jìn)行鏡像。一個(gè)日志文件和它的所有鏡像文件構(gòu)成一個(gè)日志文件組,它們具有相同的信息。同一組的日志文件最好保存到不同的磁盤中,以避免物理損壞帶來的麻煩。
在日志文件組中,日志文件的鏡像個(gè)數(shù)受參數(shù)MAXLOGMEMBERS限制,最多可以有5個(gè)。
通過數(shù)據(jù)字典V$LOG可以了解系統(tǒng)當(dāng)前正在使用哪個(gè)日志文件組,如下圖:
select group#,members,status from v$log;圖9
通過上圖我們可以看到status狀態(tài)字段為cunrrent表示是系統(tǒng)當(dāng)前使用的日志文件組,當(dāng)1日志文件組的空間被占用完后,Oracle數(shù)據(jù)庫會(huì)自動(dòng)轉(zhuǎn)換到另一個(gè)日志文件組,不過我們可以使用alter system命令進(jìn)行手工日志切換,語句如下:
alter system switch logfile;Oracle數(shù)據(jù)庫中的日志文件組是循環(huán)使用的,當(dāng)所有日志文件組的空間都使用完后,系統(tǒng)會(huì)自動(dòng)切換到第一個(gè)日志文件組。第一個(gè)日志文件組中已經(jīng)有的信息將會(huì)被覆蓋,這取決于數(shù)據(jù)庫的運(yùn)行模式。
4、其他文件
除數(shù)據(jù)文件、控制文件和重做日志文件外,還有參數(shù)文件、備份文件、歸檔重做日志文件,以及警告、跟蹤日志文件等。
參數(shù)文件:用于記錄Oracle數(shù)據(jù)庫的基本參數(shù)信息,主要包括數(shù)據(jù)庫名和控制文件所在的路徑等。分為文本參數(shù)文件(Parameter File,PFLIE)和服務(wù)器參數(shù)文件(Server Parameter File,SPFILE)。
備份文件:文件受損時(shí),可借助備份文件對(duì)受損文件進(jìn)行恢復(fù)。
歸檔重做日志文件:用于對(duì)寫滿的日志文件進(jìn)行復(fù)制并保存,具體功能由歸檔進(jìn)程ARCn實(shí)現(xiàn),該進(jìn)程負(fù)責(zé)將寫滿的重做日志文件復(fù)制到歸檔日志目標(biāo)中。
警告、跟蹤日志文件:當(dāng)一個(gè)進(jìn)程發(fā)現(xiàn)了一個(gè)內(nèi)部錯(cuò)誤時(shí),它可以將關(guān)于錯(cuò)誤的信息存儲(chǔ)到它的跟蹤文件中。而警告文件則是一種特使的跟蹤文件,它包含錯(cuò)誤的時(shí)間說明,而隨之產(chǎn)生的跟蹤文件則記錄該錯(cuò)誤的詳細(xì)信息。
?三、進(jìn)程結(jié)構(gòu)
系統(tǒng)全局區(qū)(System Global Area,SGA)與Oracle進(jìn)程組合成為Oracle數(shù)據(jù)庫實(shí)例。其中,SGA是由Oracle為一個(gè)實(shí)例分配的一組共享內(nèi)存區(qū)域,而Oracle進(jìn)程則在系統(tǒng)啟動(dòng)后異步地為所有數(shù)據(jù)庫用戶執(zhí)行不同的任務(wù)。
1、集成結(jié)構(gòu)概述
我們經(jīng)常說數(shù)據(jù)庫實(shí)例,實(shí)例其實(shí)就是指的是數(shù)據(jù)庫的內(nèi)存結(jié)構(gòu)和進(jìn)程結(jié)構(gòu)。我們安裝數(shù)據(jù)庫軟件大量的是在安裝其內(nèi)存和進(jìn)程組件結(jié)構(gòu)。Oracle數(shù)據(jù)庫啟動(dòng)時(shí),首先啟動(dòng)Oracle數(shù)據(jù)庫實(shí)例,系統(tǒng)將自動(dòng)分配SGA,并啟動(dòng)多個(gè)后臺(tái)進(jìn)程。
Oracle數(shù)據(jù)庫實(shí)例的進(jìn)程分類:
1)用戶進(jìn)程
是連接到Oracle DB 的應(yīng)用程序或工具
2)數(shù)據(jù)庫進(jìn)程
服務(wù)器進(jìn)程:連接到Oracle實(shí)例,在用戶建立會(huì)話時(shí)啟動(dòng)
后臺(tái)進(jìn)程:在啟動(dòng)Oracle實(shí)例時(shí)啟動(dòng)
3)?守護(hù)程序/應(yīng)用程序進(jìn)程
網(wǎng)絡(luò)監(jiān)聽程序
? Gridinfrastructure 守護(hù)程序
從進(jìn)程角度一般可以把服務(wù)器模式分為兩種:
專用服務(wù)器:對(duì)于每個(gè)會(huì)話,專用服務(wù)器進(jìn)程提供服務(wù);
共享服務(wù)器:不必為每個(gè)連接都提供一個(gè)專用服務(wù)器進(jìn)程。分派程序會(huì)將多個(gè)傳入網(wǎng)絡(luò)會(huì)話請(qǐng)求定向到共享服務(wù)器進(jìn)程池。共享服務(wù)器進(jìn)程為所有客戶機(jī)請(qǐng)求提供服務(wù)。一般生產(chǎn)庫中都是共享模式;
2.oracle11g進(jìn)程結(jié)構(gòu)圖
系統(tǒng)中運(yùn)行的后臺(tái)進(jìn)程數(shù)量眾多,用戶可以通過V$BGPROCESS 視圖查詢關(guān)于后臺(tái)進(jìn)程的信息。
3.后臺(tái)進(jìn)程分類
(1)oracle實(shí)例的后臺(tái)進(jìn)程主要有以下幾種:
??數(shù)據(jù)庫寫進(jìn)程(DBWn)
? 日志寫進(jìn)程(LGWR)
? 檢查點(diǎn)進(jìn)程(CKPT)
? 系統(tǒng)監(jiān)視器進(jìn)程(SMON)
? 進(jìn)程監(jiān)視器進(jìn)程(PMON)
? 歸檔進(jìn)程(ARCn)
? 恢復(fù)器進(jìn)程(RECO)
? 封鎖進(jìn)程(LCKn)
? 調(diào)度進(jìn)程(Dnnn)
? 快照進(jìn)程(SNPn)
? 作業(yè)隊(duì)列協(xié)調(diào)程序(CJQ0)
? 作業(yè)從屬進(jìn)程(Jnnn)
? 隊(duì)列監(jiān)視器進(jìn)程(QMNn)
(2)各個(gè)進(jìn)程說明
? 1>?DBWn?進(jìn)程(Database Writer):
? 負(fù)責(zé)將數(shù)據(jù)庫緩沖區(qū)高速緩存中經(jīng)過修改的緩沖區(qū)(灰數(shù)據(jù)緩沖區(qū))寫入磁盤。
在一個(gè)數(shù)據(jù)庫實(shí)例中,DBWn進(jìn)程最多可以啟動(dòng)36個(gè),進(jìn)程名分別為DBWn0、DBWn1、DBWn2、...DBWnj.
了解DBWn之前我們先了解幾個(gè)概念:
LRU(Least Recently Used,最近最少使用):數(shù)據(jù)緩沖的一種管理機(jī)制,只保留最近數(shù)據(jù),不保留舊數(shù)據(jù)。
DIRTY:表示“臟列”或者“弄臟了的數(shù)據(jù)”,實(shí)際上就是指被修改但是還沒有寫入數(shù)據(jù)文件的數(shù)據(jù)。
DBWn進(jìn)程工作過程:
當(dāng)一個(gè)用戶進(jìn)程產(chǎn)生后,服務(wù)器進(jìn)程查找內(nèi)存緩沖區(qū)是否存在用戶進(jìn)程所需的數(shù)據(jù)。
如果內(nèi)存中沒有需要的數(shù)據(jù),則服務(wù)器進(jìn)程從數(shù)據(jù)文件中讀取數(shù)據(jù)。這時(shí),服務(wù)器進(jìn)程從數(shù)據(jù)文件中讀取數(shù)據(jù)。這時(shí),服務(wù)器進(jìn)程會(huì)首先從LRU中查找是否有存放數(shù)據(jù)的空閑塊。
如果LRU中沒有空閑塊,則將LRU中的DIRTY數(shù)據(jù)塊移入DIRTY LIST(弄臟表)。
如果DIRTY LIST超長,則服務(wù)器進(jìn)程通知DBWn進(jìn)程將數(shù)據(jù)寫入磁盤,刷新緩沖區(qū)。
當(dāng)LRU中有空閑塊后,服務(wù)器進(jìn)程從磁盤的數(shù)據(jù)文件中讀取數(shù)據(jù)并存放到數(shù)據(jù)緩沖區(qū)中。
注:
需要DBWn進(jìn)程將修改修改后的緩沖區(qū)數(shù)據(jù)寫入磁盤數(shù)據(jù)文件的情況,并不只有DIRTY LIST一種,還有如下幾種:
當(dāng)一個(gè)服務(wù)器進(jìn)程將緩沖區(qū)數(shù)據(jù)移入DIRTY LIST,而DIRTY LIST超長時(shí),服務(wù)器進(jìn)程通知DBWn進(jìn)程將數(shù)據(jù)寫入磁盤。
當(dāng)一個(gè)服務(wù)器進(jìn)程在LRU中查找DB_LOCK_MAX_SCAN_CNT緩沖區(qū)時(shí),如果沒有找到空閑的緩沖區(qū),則停止查找并通知DBWn進(jìn)程將數(shù)據(jù)寫入磁盤
出現(xiàn)超時(shí)(每次3秒)。此時(shí)DBWn進(jìn)程對(duì)LRU表查找指定數(shù)目的緩沖區(qū),將所有找到的弄臟緩沖區(qū)寫入磁盤
當(dāng)出現(xiàn)檢查點(diǎn)時(shí),LGWR進(jìn)程指定修改緩沖區(qū)數(shù)據(jù),通知DBWn進(jìn)程將其寫入磁盤中。
DBWn進(jìn)程作用:
管理數(shù)據(jù)緩沖區(qū),以便用戶進(jìn)程總能找到空閑的緩沖區(qū)
將所有修改后的緩沖區(qū)數(shù)據(jù)寫入數(shù)據(jù)文件
使LRU算法將最近使用過的塊保留在內(nèi)存中
通過延遲寫來優(yōu)化磁盤I/O讀寫
DBWn進(jìn)程個(gè)數(shù):
DB_WRITER_PROCESSES 初始化參數(shù)指定了DBWn?進(jìn)程的數(shù)量。DBWn?進(jìn)程的最大數(shù)量為36。如果用戶在啟動(dòng)過程中未指定該進(jìn)程數(shù),Oracle DB 將根據(jù)CPU 和處理器組的數(shù)量來決定如何設(shè)置DB_WRITER_PROCESSES。注意n代表可以有多個(gè)此類進(jìn)程,但是如果是單處理器服務(wù)器,則配置n是沒用的。
通過show parameter db_writer_processes;命令可以來了解參數(shù)信息:
DBWn進(jìn)程最多可以啟動(dòng)20個(gè),所以DB_WRITER_PROCESSES參數(shù)的取值范圍是1-36.
?2>LGWR日志寫入進(jìn)程(Log Writer):
負(fù)責(zé)管理日志緩沖區(qū)的一個(gè)后臺(tái)進(jìn)程,用于將日志緩沖區(qū)中的日志數(shù)據(jù)寫入磁盤的日志文件中。
在數(shù)據(jù)庫運(yùn)行時(shí),對(duì)數(shù)據(jù)庫的修改操作將被記錄到日志信息中,這些日志信息首先保存在日志緩沖區(qū),當(dāng)日志信息達(dá)到一定量時(shí),由LGWR進(jìn)程將日志數(shù)據(jù)寫入日志文件。
需要LGWR進(jìn)程將緩沖區(qū)數(shù)據(jù)中的日志數(shù)據(jù)寫入磁盤的主要情況有如下幾種:
用戶進(jìn)程提交事務(wù)
日志緩沖區(qū)池已滿1/3
出現(xiàn)超時(shí)
DBWn進(jìn)程為檢查點(diǎn)清除緩沖區(qū)塊
一個(gè)實(shí)例只有一個(gè)日志寫入進(jìn)程
事務(wù)被寫入日志文件,并確認(rèn)提交
日志緩沖區(qū)是一個(gè)循環(huán)緩沖區(qū),當(dāng)LGER進(jìn)程將日志緩沖區(qū)中的日志寫入磁盤日志文件后,服務(wù)器進(jìn)程又可以將新的日志數(shù)據(jù)保存到日志緩沖區(qū)。如果系統(tǒng)需要清除日志緩沖區(qū),則LGWR進(jìn)程在一個(gè)事務(wù)提交前就將日志信息寫出,然后在用戶發(fā)出commit命令提交事務(wù)時(shí)將日志信息寫入日志緩沖區(qū)。該相應(yīng)的數(shù)據(jù)緩沖區(qū)改變是延遲的,直到更改有效時(shí)才將日志數(shù)據(jù)寫入數(shù)據(jù)文件。
LGWR進(jìn)程將日志信息同步地寫入在線日志文件組的多個(gè)日志成員文件中,如果日志文件組的某個(gè)成員文件被刪除或者不可用,則LGWR進(jìn)程可以將日志信息寫入該組的其他文件中,從而不影響數(shù)據(jù)庫的正常使用。
?3>CKPT檢查點(diǎn)進(jìn)程(Check Point):
一般在發(fā)生日志切換時(shí)產(chǎn)生。在系統(tǒng)運(yùn)行過程中,當(dāng)需要將修改后的數(shù)據(jù)寫回?cái)?shù)據(jù)文件并且產(chǎn)生日志切換時(shí)就會(huì)產(chǎn)生檢查點(diǎn)。檢查點(diǎn)保證所有修改過的數(shù)據(jù)庫緩沖區(qū)中的數(shù)據(jù)都被寫入磁盤數(shù)據(jù)文件中。
在Oracle數(shù)據(jù)庫中,提供了兩個(gè)參數(shù)控制檢查點(diǎn)的產(chǎn)生:一個(gè)是LOG_CHECKPOINT_TIMEOUT,用來設(shè)置檢查點(diǎn)產(chǎn)生的時(shí)間間隔;另一個(gè)是LOG_CHECKPOINT_INTERVAL,用來設(shè)置一個(gè)檢查點(diǎn)需要填充的日志文件塊的數(shù)目也就是每產(chǎn)生多少個(gè)日志數(shù)據(jù),自動(dòng)產(chǎn)生一個(gè)檢查點(diǎn)。
通過以下命令我們可以了解log_checkpoint_timeout參數(shù)信息:
show parameter log_checkpoint_timeout;? log_checkpoint_timeout參數(shù)默認(rèn)值為1800,單位為秒。
通過以下命令我們可以了解log_checkpoint_interval 參數(shù)值:
show parameter log_checkpoint_interval; log_checkpoint_interval參數(shù)值默認(rèn)為0.4>SMON系統(tǒng)監(jiān)視器進(jìn)程(System Monitor):
在實(shí)例啟動(dòng)時(shí)執(zhí)行實(shí)例恢復(fù),并負(fù)責(zé)清理不再使用的臨時(shí)段。在具有并行服務(wù)器選項(xiàng)的環(huán)境下,SMON進(jìn)程對(duì)有故障的CPU或者實(shí)例進(jìn)行實(shí)例恢復(fù)。SMON進(jìn)程被有規(guī)律的喚醒,檢查是否需要使用,其他進(jìn)程需要時(shí)也可以調(diào)用次進(jìn)程。5>PMON進(jìn)程監(jiān)視器進(jìn)程(Process Monitor):
用于在用戶進(jìn)程出現(xiàn)故障時(shí)執(zhí)行進(jìn)程恢復(fù)操作,并負(fù)責(zé)清理內(nèi)存存儲(chǔ)區(qū)和釋放該進(jìn)程所用的資源。改進(jìn)程周期性的檢查調(diào)度進(jìn)程和服務(wù)器進(jìn)程的狀態(tài),如果發(fā)現(xiàn)進(jìn)程已死,則重新啟動(dòng)它。PMON進(jìn)程被有規(guī)律的喚醒,檢查是否需要使用,其他進(jìn)程需要使用時(shí)也可以調(diào)用此進(jìn)程。6>ARCn歸檔進(jìn)程(Archive Process):
用于將寫滿的日志文件復(fù)制到歸檔日志文件中,防止日志文件組的循環(huán)使用將已有的日志數(shù)據(jù)覆蓋。
在一個(gè)數(shù)據(jù)庫實(shí)例中,ARCn進(jìn)程最多可以啟動(dòng)10個(gè),進(jìn)程名分別為:ARC0、ARC1、...ARC9.
oracle數(shù)據(jù)有歸檔(Archivelog)和非歸檔(Noarchivelog)兩種方式。只有在歸檔方式下才存在ARCn進(jìn)程。當(dāng)ARCn進(jìn)程在對(duì)一個(gè)日志文件進(jìn)程歸檔操作時(shí),其他任何進(jìn)程都不可以訪問這個(gè)日志文件。
允許啟動(dòng)的ARCn進(jìn)程個(gè)數(shù)由LOG_ARCHIVE_MAX_PROCESSES決定,我們可以通過下面的命令來了解該參數(shù)的具體信息。
show parameter log_archive_max_processes;從上面查詢結(jié)果可知,目前最多可以啟動(dòng)的ARCn進(jìn)程個(gè)數(shù)為4,該參數(shù)的取值范圍為1-10.
7>RECO恢復(fù)器進(jìn)程(Recovery):
存在于分布式數(shù)據(jù)庫系統(tǒng)中,用于自動(dòng)解決在分布式數(shù)據(jù)庫中出現(xiàn)的事務(wù)故障。當(dāng)一個(gè)節(jié)點(diǎn)的RECO進(jìn)程自動(dòng)地連接到包含有相應(yīng)數(shù)據(jù)的分布式事務(wù)的其他數(shù)據(jù)庫中時(shí),RECO進(jìn)程自動(dòng)維持分布式數(shù)據(jù)庫環(huán)境中的數(shù)據(jù)的一致性,任何在當(dāng)前已經(jīng)處理而其他數(shù)據(jù)庫中還未處理的事務(wù)將從每一個(gè)數(shù)據(jù)庫的事務(wù)表中刪除。
當(dāng)一個(gè)數(shù)據(jù)庫服務(wù)器的RECO進(jìn)程視圖與一個(gè)遠(yuǎn)程服務(wù)器建立通信時(shí),如果遠(yuǎn)程服務(wù)器不可用或者無法建立網(wǎng)絡(luò)鏈接,則RECO進(jìn)程將自動(dòng)在一個(gè)時(shí)間間隔之后再次鏈接。
8>LCKn封鎖進(jìn)程(Lock):
該進(jìn)程存在于并行服務(wù)器中,用于實(shí)現(xiàn)多個(gè)實(shí)例間的封鎖。在一個(gè)數(shù)據(jù)庫實(shí)例中,最多可以啟動(dòng)10個(gè)LCKn進(jìn)程,進(jìn)程名分別為:LCK0、LCK1...LCK9.
9>Dnnn調(diào)度進(jìn)程(Dispatchers):
存在于多線程服務(wù)器體系結(jié)構(gòu)中,用于將用戶進(jìn)程連接到服務(wù)器進(jìn)程。在一個(gè)數(shù)據(jù)庫實(shí)例中,Dnnn進(jìn)程可以啟動(dòng)多個(gè),進(jìn)程名分別為D001、D002、...Dnnn。
該進(jìn)程允許用戶進(jìn)程共享有限的服務(wù)器進(jìn)程,當(dāng)沒有調(diào)度進(jìn)程時(shí),每個(gè)用戶進(jìn)程需要一個(gè)專用的服務(wù)器進(jìn)程。在一個(gè)數(shù)據(jù)庫實(shí)例中,對(duì)每種網(wǎng)絡(luò)協(xié)議至少建立一個(gè)調(diào)度進(jìn)程。數(shù)據(jù)庫管理員根據(jù)操作系統(tǒng)中每個(gè)進(jìn)程可連接數(shù)目的限制,決定需要啟動(dòng)的調(diào)度進(jìn)程的數(shù)目,在實(shí)例運(yùn)行時(shí)可以增加或刪除調(diào)度進(jìn)程。
在實(shí)例啟動(dòng)時(shí),調(diào)度進(jìn)程為用戶連接到Oracle建立一個(gè)通信路徑,然后每一個(gè)調(diào)度進(jìn)程把連接請(qǐng)求的調(diào)度進(jìn)程的地址給予其他用戶。當(dāng)一個(gè)用戶進(jìn)程有連接請(qǐng)求時(shí),網(wǎng)絡(luò)接收器進(jìn)程分析請(qǐng)求并決定該用戶是否可以使用一個(gè)調(diào)度進(jìn)程。如果可以,則網(wǎng)絡(luò)接收器進(jìn)程返回該調(diào)度進(jìn)程的地址,將用戶進(jìn)程連接到該調(diào)度進(jìn)程,然后由調(diào)度進(jìn)程將用戶連接到服務(wù)器進(jìn)程。
10>SNPn快照進(jìn)程(Snapshot Process):
該進(jìn)程用于處理數(shù)據(jù)庫快照的自動(dòng)刷新,并通過DBMS_JOB程序包自動(dòng)運(yùn)行預(yù)定的數(shù)據(jù)庫存儲(chǔ)過程、SQL和PL\SQL程序等。
在oracle數(shù)據(jù)庫中我們可以通過參數(shù)JOB_QUEUE_PROCESS設(shè)置快照進(jìn)程的個(gè)數(shù)。通過以下命令我們可以了解JOB_QUEUE_PROCESS的參數(shù)信息:
show parameter job_queue_process;?11>CJQ0作業(yè)隊(duì)列協(xié)調(diào)進(jìn)程(Job Queue Processes):
一般由兩類進(jìn)程組成:
作業(yè)隊(duì)列協(xié)調(diào)進(jìn)程coordinator job queue process (CJQn),起到對(duì)作業(yè)隊(duì)列的監(jiān)控作用。
執(zhí)行作業(yè)的隊(duì)列進(jìn)程job queue processes (Jnnn),由CJQn完成調(diào)度產(chǎn)生。
作業(yè)隊(duì)列進(jìn)程用于批處理,執(zhí)行用戶job,可以將它們看做一個(gè)調(diào)度服務(wù),用于調(diào)度Oracle實(shí)例上如PL/SQL語句或存儲(chǔ)過程的job。提供開始的時(shí)間和調(diào)度的時(shí)間間隔,作業(yè)隊(duì)列進(jìn)程可以根據(jù)這個(gè)配置,自動(dòng)地周期性地執(zhí)行。
?????????作業(yè)隊(duì)列進(jìn)程可以被動(dòng)態(tài)地管理。可以允許作業(yè)隊(duì)列客戶端根據(jù)需要使用多個(gè)作業(yè)隊(duì)列進(jìn)程,當(dāng)一個(gè)作業(yè)隊(duì)列進(jìn)程進(jìn)入空閑狀態(tài)(idle)后,其使用的資源將被釋放。
?????????動(dòng)態(tài)的作業(yè)隊(duì)列進(jìn)程可以按指定的時(shí)間間隔運(yùn)行大量的作業(yè)。用戶的作業(yè)是由 CJQ 進(jìn)程交給作業(yè)隊(duì)列進(jìn)程執(zhí)行的。具體步驟如下:
1. 名為 CJQ0?的協(xié)調(diào)進(jìn)程(coordinator process)定期地從系統(tǒng)JOB$表中選擇需要運(yùn)行的job。被選出的作業(yè)將按照時(shí)間排序。
2. CJQ0進(jìn)程動(dòng)態(tài)地產(chǎn)生job隊(duì)列的slave進(jìn)程來運(yùn)行這些job,編號(hào)從J000-J999。
3. 作業(yè)隊(duì)列進(jìn)程執(zhí)行一個(gè)由 CJQ 進(jìn)程選出的作業(yè)。每個(gè)進(jìn)程每次只能執(zhí)行一個(gè)job。
4. 當(dāng)一個(gè)工作隊(duì)列進(jìn)程執(zhí)行完一個(gè)作業(yè)后,就能夠接受下一個(gè)作業(yè)。如果此時(shí)系統(tǒng)中已經(jīng)沒有需要被調(diào)度的作業(yè)了,此進(jìn)程將進(jìn)入休眠狀態(tài)(sleep state);此進(jìn)程還會(huì)定期地蘇醒(wake up)等待分配其他作業(yè)。如果在預(yù)設(shè)的時(shí)間內(nèi)沒有新的作業(yè),此進(jìn)程將終止。
初始化參數(shù)JOB_QUEUE_PROCESSES表示實(shí)例中可以并行執(zhí)行的最大作業(yè)隊(duì)列進(jìn)程數(shù)。但是,客戶端不應(yīng)該假設(shè)所有的作業(yè)隊(duì)列進(jìn)程都用于執(zhí)行job。
注意:
如果初始化參數(shù)JOB_QUEUE_PROCESSES被設(shè)置為?0,協(xié)調(diào)進(jìn)程(CJQ )將不會(huì)被啟動(dòng)。
12>其他進(jìn)程
Oracle 數(shù)據(jù)庫中還可能運(yùn)行其他后臺(tái)進(jìn)程。包括:
Memory Monitor Light (MMNL)進(jìn)程負(fù)責(zé)執(zhí)行輕量級(jí)的且頻率較高的和可管理性相關(guān)的后臺(tái)任務(wù),例如捕獲會(huì)話歷史信息,測量值計(jì)算等。它與AWR一起起作用,將需要的buffer統(tǒng)計(jì)信息寫入磁盤。
MMAN進(jìn)程負(fù)責(zé)執(zhí)行數(shù)據(jù)庫系統(tǒng)的內(nèi)部任務(wù)。
在使用了自動(dòng)存儲(chǔ)管理(Automatic Storage Management)的實(shí)例中,RBAL 進(jìn)程負(fù)責(zé)協(xié)調(diào)磁盤組間的負(fù)載平衡工作。她可以使多個(gè)實(shí)例同時(shí)訪問一個(gè) ASM 磁盤(global open)。最終由 ORBn 進(jìn)程實(shí)際執(zhí)行數(shù)據(jù)擴(kuò)展的負(fù)載均衡。實(shí)例中可以運(yùn)行多個(gè) ORBn 進(jìn)程,分別為ORB0,ORB1,以此類推。
當(dāng)數(shù)據(jù)庫實(shí)例使用 ASM 磁盤組時(shí),還要啟動(dòng) OSMB 進(jìn)程。此進(jìn)程負(fù)責(zé)和 ASM 實(shí)例(Automatic Storage Management instance)通信。
LMS(Global Cache Service)進(jìn)程,在RAC環(huán)境中存在,該進(jìn)程管理資源,并提供實(shí)例資源交互控制。
Change Tracking Writer (CTWR)進(jìn)程,是10g中的新進(jìn)程,用于對(duì)最近的改變的塊進(jìn)行跟蹤,讓RMAN可以更快地進(jìn)行增量備份。
總結(jié)
以上是生活随笔為你收集整理的lob移表空间 oracle_Oracle数据库(1)Oracle体系结构概述(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vidaa是什么牌子电视?
- 下一篇: 地下城与勇士织炎在哪里可以查到