在Oracle數據庫中數據庫進程是一個非常重要的概念,為了讓各位更加深入的了解Oracle數據庫中進程的相關概念,本文將進行逐層講解。
Oracle數據庫進程概述:
Database buffer cache主要用於存儲數據文件中的數據塊
數據庫高速緩存的數據塊是高速緩存與數據文件進行信息交換的基本單位。在Oracle數據庫8i以前,數據塊大小只有一種,而Oracle數據庫9i以後支持2K,4K,8KB,16KB及32KB五種。
用命令SQL>SHOW PARAMETER DB可以顯示當前數據庫的BUFFER CACHE
數據庫緩存和特點如下:
<1>.根據最近最少使用LRU.
<2>. 由DB_BLOCK_SIZE來指定大小.
<3>.Oracle使用時是以塊大小為單位進行數據存取的.
還包含以下一些獨立的子緩存:
<1>.DB_CACHE_SIZE.
<2>.DB_KEEP_CACHE_SIZE.
<3>.DB_RECYCLE_CACHE_SIZE.
注:可以用Alter system set db_cache_advice=on;設置成根據系統的建議來指定大小。
REDO LOG FILE主要是用於重做日志
用命令SQL>SHOW PARAMETER LOG_BUFFER。
SQL>ALTER SYSTEM SET LOG_BUFFER_SIZE=60M。
用來顯示或修改重做日志緩沖區的一些信息。
命令SQL>achive log list 可以查看數據庫當前的歸檔模式。
LARGE POOL:
與Java POOL一樣,都是作為系統可選的內存結構,由SGA來配置。
Java POOL:
當安裝或使用Java時才用到.
Oracle內存進程包括兩個,一個是SGA,一個是PGA.
(1).SGA在ORACLE實例啟動時分配,是Oracle實例的一個基本組件.
(2).PGA是在當服務器進程啟動時分配的.
進程結構:
<1>.USER PROCESS.用於用戶與Oracle SERVER交互的進程.
USER PROCESS必須與ORACLE建立連接後才可使用,不可與Oracle SERVER交互.
<2>.SERVER PROCESS.
SERVER PROCESS在用戶與服務之間建立連接後,為執行用戶命令的一個進程.
<3>.BACKGROUND PROCESS.
後台進程:DATABASE WRITER (DBWn)用來把DATA BUFFER CACHE中的髒數據寫回到數據庫中.
(注:髒數據是被改變的數據.)
在以下情況下它會寫數據庫:
<1>.在發生CHECKPOINT同步.
<2>.髒數據達到閥值.
<3>.DATABASE BUFFER CACHE 自由空間太少了.
<4>.TIMEOUT (3秒鐘.)
<5>.RAC PING REQUEST.
<6>.TABLESPACE OFFLINE.
<7>.TABLESPACE READONLY.
<8>.TABLE DROP OR TABLE TRUNCATE (表數據清空或表結構刪除).
<9>.TABLESPACE BEGIN BACKUP.
由SGA (包含DATABASE BUFFER CACHE,BACKGROUND PROCESS)-----> [ DBWn ]----> {data files,
control files, redo log file} ---->由此過程改變數據庫中的數據.
LOG WRITER (LGWR) 日志寫進程
在Oracle環境中
<1>.當COMMIT的時候.
<2>.當三分之一空間滿時.
<3>.當日志有1MB需要重做時.
<4>.每3秒
<5>.BEFORE DBWn WRITES.(寫數據前先寫日志).
REDO LOG BUFFER----->LGWR--->DBWn
|--------------------------------------> REDO LOG FILES
SYSTEM MONITOR (SMON)系統監控進程
主要任務:
(1).啟動過程(假定DATABASE重啟時)如果需要RECOVERY,則此進程會負責打開數據庫,及回滾沒有
提交的事務;以及rolls forward changes in the redo logs..這些統稱為:instance recovery.
(2).對每3秒就對系統自由空間的整理.(COALESCES FREE SPACE EVER 3 SEC.)
(3).清空臨時段空間(DEALLOCATES TEMPORARY SEGMENTS).
這個過程也是在系統啟動過程中完成的.
PROCESS MONITOR (PMON) 進程監控進程
主要用於回滾異常終止的或被用戶強制終止的事務.
<1>.rolling back the transaction.
<2>.releasing locks.釋放鎖.
<3>.releasing other resources.
<4>.restarts dead dispatchers.重啟死掉的調度器.(在共享服務器中用).
PMON (:Include in SGA)----------------------->PGA
CHECKPOINT (CKPT) 檢查點進程
用來在數據庫裡實現同步,實現之前會強制將髒數據從內在裡寫到物理文件裡.
<1>.會啟動DBWn來寫髒數據(SIGNALLING DBWn at CKPT.)
<2>.完後會更新DATAFILE的HEADER和控制文件的HEADER.而HEADER中有同步所需要的信息,即
CHECKPOINT的信息.
<3>.在Oracle中,正常情況下,所有文件必須同期性地同步;靠CHECKPOINT來完成.
CKPT(作為後台進程包含在實例中)------------------DATABASE
(data files,control files,redo log files.)
| |______DBWn
|________LGWR
Archive PROCESS (ARCn) :歸檔進程(可選進程),當設置歸檔模式後,可用來自動備份在線日志,(歸檔日志是重做日志的備份.)
<1>.Automatically archives online redo logs when archiverlog mode is set.
(設置歸檔模式後,將自動備份在線日志)
在處理SQL語句時,注意以下過程:
<1>.用以下進程連接到實例.
用戶進程(USER PROCESS).
服務器進程(SERVER PROCESS).
<2>.Oracle服務器進程組件的使用依賴於SQL語句的種類.
[1].查詢語句會返回行.
[2].DML語句會記錄這種改變.
[3].COMMIT保證了事務的RECOVERY.
<3>.並不是所有的SQL語句中所有的後台進程都會參與.
結論:
Oracle Server. Oracle服務器進程包含一些文件,進程和內存,在執行一條SQL語句時,並非所有這些都會用上,有些進程用於提高數據庫的性能;一些用於當發生軟件或硬件異常時恢復數據庫;或應用於完成其他一些維護數據庫的任務.ORACLE服務器包含ORACLE實例和ORACLE數據庫.Oracle Instance: Oracle實例是用於聯系後台進程和內在之間的活動,對數據庫進行數據存取前必須先啟動實例,每當實例啟動時,SGA就被分配給它並啟動了一些後台進程.後台進程執行10秒操作並監控有些進程以提供更好的性能.和可靠性.Oracle Database: 數據庫包含了系統文件,也稱數據庫文件,其提供了用以存儲數據庫信息的實際物理存儲區域,用數據文件保證了數據一致性,並在當實例發生失敗時恢復數據庫。
上文中為大家詳細介紹了關於Oracle數據庫進程的相關概念的知識,希望大家都能很熟練的掌握這些知識,讓這些知識存在於我們的大腦中,便於我們以後遇到類似的問題時的處理。