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