Oracle程式簡介

不一樣的天空w發表於2017-04-06

Oracle 程式類別

http://www.cnblogs.com/sopost/archive/2009/10/27/2190152.html
http://www.cnblogs.com/sopost/archive/2009/10/27/2190152.html

n        Oracle例項主要有3類程式:

?         伺服器程式(server process):這些程式根據客戶的請求來完成工作。我們已經對專用伺服器和共享伺服器有了一定的瞭解。它們就是伺服器程式。

?         後臺程式(background process):這些程式隨資料庫而啟動,用於完成各種維護任務,如將塊寫至磁碟、維護線上重做日誌、清理異常中止的程式等。

?         從屬程式(slave process):這些程式類似於後臺程式,不過它們要代表後臺程式或伺服器程式完成一些額外的工作。

專用伺服器(dedicated server)連線,採用專用伺服器連線時,會在伺服器上得到針對這個連線的一個專用程式。資料庫連線與伺服器上的一個程式或執行緒之間存在一對一的對映。

共享伺服器(shared server)連線,採用共享伺服器連線時,多個會話可以共享一個伺服器程式池,其中的程式由Oracle例項生成和管理。你所連線的是一個資料庫排程器(dispatcher),而不是特意為連線建立的一個專用伺服器程式。

 

n        連線與會話

連線並不是會話的同義詞,在一條連線上可以建立0個、一個或多個會話。各個會話是單獨而且獨立的,即使它們共享同一條資料庫物理連線也是如此。一個會話中的提交不會影響該連線上的任何其他會話。實際上,還可以有連線而無相應的會話。另外,一個會話可以有連線也可以沒有連線。使用高階Oracle Net特性(如連線池)時,客戶可以刪除一條物理連線,而會話依然保留(但是會話會空閒)。客戶在這個會話上執行某個操作時,它會重新建立物理連線。

連線(connection):連線是從客戶到Oracle例項的一條物理路徑。連線可以在網路上建立,或者透過IPC機制建立。通常會在客戶程式與一個專用伺服器或一個排程器之間建立連線。

會話(session):會話是例項中存在的一個邏輯實體。這就是你的會話狀態(session state),也就是表示特定會話的一組記憶體中的資料結構。提到“資料庫連線”時,大多數人首先想到的就是“會話”。你要在伺服器中的會話上執行SQL、提交事務和執行儲存過程。

 

專用伺服器模式中連線與會話的例子:如果一個使用者連線上資料庫進行操作,操作時也開啟set autotrace on statistics 則會建立一個跟蹤統計的會話,此時一個連線有兩個會話。如果使用者執行命令disconnect,(其實這個命令真正的意思應該是“destroy_all_session”,因為使用者並沒有真正斷開連線,如果要真正斷開連線,則應該執行“exit“命令。)另一個使用者在另一個視窗中開啟另一個會話查詢系統會話檢視v$session則不會看到之前的會話,但仍有一個程式,即相應地有一條物理連線。這說明可以有連線而沒有會話。之前的使用者可以使用connect命令(真正的意思應該是create_session)在剛才的連線上再建立新會話。

 

如果是共享伺服器模式,一個會話可能由多個服務程式輪流為之服務,一個程式可能為多個會話服務。簡單地說,連線和會話之間有一種多對多的關係。

1. 什麼時候使用專用伺服器?

因為存在一對一的對映,所以不必擔心長時間執行的事務會阻塞其他事務。其他事務只透過其自己的專用程式來處理。因此,在非OLTP環境中,也就是可能有長時間執行事務的情況下,應該只考慮使用這種模式。專用伺服器是Oracle的推薦配置,它能很好地擴縮。只要伺服器有足夠的硬體(CPURAM)來應對系統所需的專用伺服器程式個數,專用伺服器甚至可以用於數千條併發連線。

某些操作必須在專用伺服器模式下執行,如資料庫啟動和關閉,所以每個資料庫中可能同時有專用伺服器和共享伺服器,也可能只設定一個專用伺服器。

 

2. 什麼時候使用共享伺服器?

對於共享伺服器,則有一種多對一的關係:多個客戶對應一個共享伺服器。共享伺服器的首要原則:要確保事務的持續時間儘量短。事務可以頻繁地執行,但必須在短時間內執行完(這正是OLTP系統的特點)。

共享伺服器只適用於OLTP系統,這種系統的特點是事務短而且頻繁。共享伺服器對資料倉儲很不適用,因為在資料倉儲中,可能會執行耗時1分鐘、2分鐘、5分鐘甚至更長時間的查詢。

如果你的系統中90%都是OLTP,只有10%“不那麼OLTP”,那麼可以在同一個例項上適當地混合使用專用伺服器和共享伺服器。

許多高階連線特性都要求使用共享伺服器。如果你想使用Oracle Net連線池,就必須使用共享伺服器。如果你想在資料庫之間使用資料庫連結集合(database link concentration),也必須對這些連線使用共享伺服器。

共享伺服器主要為我們做3件事:減少作業系統程式/執行緒數,刻意地限制併發度,以及減少系統所需的記憶體。

使用共享伺服器時,UGASGA中分配。這說明,轉變為共享伺服器時,必須能準確地確定需要多少UGA記憶體,並適當地在SGA中分配(透過LARGE_POOL_SIZE引數)。所以,共享伺服器配置中對SGA的需求通常很大。這個記憶體一般要預分配,從而只能由資料庫例項使用。

注意 對於大小可以調整的SGA,隨著時間的推移確實可以擴大或收縮這個記憶體,但是在大多數情況下,它會由資料庫例項所“擁有”,其他程式不能使用。

 

 

後臺程式

 

可以使用一個V$檢視檢視所有可能的Oracle後臺程式,確定你的系統中正在使用哪些後臺程式:select paddr, name, description from v$bgprocess order by paddr desc

 

有兩類後臺程式:有一箇中心(focused)任務的程式(如前所述)以及完成各種其他任務的程式(即工具程式)。

 

主要的Oracle後臺程式:

1. PMON:程式監視器(Process Monitor

這個程式負責在出現異常中止的連線之後完成清理。PMON會回滾未提交的工作,並釋放為失敗程式分配的SGA資源。PMON還負責監視其他的Oracle後臺程式,並在必要時(如果可能的話)重啟這些後臺程式。PMON還會為例項做另一件事,這就是向Oracle TNS監聽器註冊這個例項。例項啟動時,PMON程式會詢問公認的埠地址(除非直接指定),來檢視是否啟動並執行了一個監聽器。

 

2. SMON:系統監視器(System Monitor

SMON程式要完成所有“系統級”任務。是一種資料庫“垃圾收集器”。SMON所做的工作包括:

l         清理臨時空間:例如,建立一個索引時,建立時為索引分配的區段標記為TEMPORARY。如果出於某種原因CREATE INDEX會話中止了,SMON就要負責清理。其他操作建立的臨時區段也要由SMON負責清理。

l         合併空閒空間:如果你在使用字典管理的表空間,SMON要負責取得表空間中相互連續的空閒區段,並把它們合併為一個更大的空閒區段。

l         針對原來不可用的檔案恢復活動的事務:這類似於資料庫啟動時SMON的作用:SMON會恢復一些失敗的活動事務。

l         執行RAC中失敗節點的例項恢復:在一個Oracle RAC配置中,叢集中的一個資料庫例項失敗時,為該失敗例項完成所有資料的恢復。

l         清理OBJ$OBJ$是一個低階資料字典表,SMON程式刪除這些不再需要的行。

l         收縮回滾段:如果有設定,SMON會自動將回滾段收縮為所設定的最佳大小。

l         “離線”回滾段。

除此之外,它還會做許多其他的事情,如將DBA_TAB_MONITORING檢視中的監視統計資訊重新整理輸出,將SMON_SCN_TIME表中的SCN-時間戳對映資訊重新整理輸出等。

 

3. RECO:分散式資料庫恢復(Distributed Database Recovery

RECO有一個很中心的任務:由於兩段提交(two-phase commit2PC)期間的崩潰或連線丟失等原因,有些事務可能會保持準備狀態,這個程式就是要恢復這些事務。可疑的分散式事務可能導致寫入器阻塞讀取器(Oracle中只有此時會發生“寫阻塞讀”的情況)。

 

4. CKPT:檢查點程式(Checkpoint Process

檢查點程式並不像它的名字所暗示的那樣真的建立檢查點,建立檢查點主要是DBWn的任務。CKPT只是更新資料檔案的檔案首部,以輔助真正建立檢查點的程式(DBWn)。

 

5. DBWn:資料庫塊寫入器(Database Block Writer

資料庫塊寫入器(DBWn)是負責將髒塊寫入磁碟的後臺程式。DBWn會寫出緩衝區快取中的髒塊,通常是為了在快取中騰出更多的空間(釋放緩衝區來讀入其他資料),或者是為了推進檢查點(將線上重做日誌檔案中的位置前移,如果出現失敗,Oracle會從這個位置開始讀取來恢復例項)。

 

6. LGWR:日誌寫入器(Log Writer

LGWR程式負責將SGA中重做日誌緩衝區的內容重新整理輸出到磁碟。如果滿足以下某個條件,就會做這個工作:

l         3秒會重新整理輸出一次

l         任何事務發出一個提交時

l         重做日誌緩衝區1/3滿,或者已經包含1 MB的緩衝資料

 

7. ARCn:歸檔程式(Archive Process

ARCn程式的任務是:當LGWR將線上重做日誌檔案填滿時,就將其複製到另一個位置。

 

8. 其他中心程式

自動儲存管理後臺(Automatic Storage Management BackgroundASMB)程式。

重新平衡(RebalanceRBAL)程式。

 

以下程式是RAC環境所特有的,如果不是RAC環境,則看不到這些程式。

鎖監視器(Lock monitorLMON)程式:LMON監視叢集中的所有例項,檢測是否有例項失敗。這有利於恢復失敗例項持有的全域性鎖。

鎖管理器守護(Lock manager daemonLMD)程式。

鎖管理器伺服器(Lock manager serverLMSn)程式。

鎖(Lock, LCK0)程式。

可診斷性守護(Diagnosability daemon, DIAG)程式。

 

5.2.2  工具後臺程式

 

1. CJQ0Jnnn程式:作業佇列

Jnnn程式會不斷地來來去去,也就是說,如果配置了最多1 000Jnnn程式,並不會看到真的有1 000個程式隨資料庫啟動。相反,開始時只會啟動一個程式,即作業佇列協調器(CJQ0),它在作業佇列表中看到需要執行的作業時,會啟動Jnnn程式。如果Jnnn程式完成其工作,並發現沒有要處理的新作業,此時Jnnn程式就會退出,也就是說,會消失。

 

2. QMNCQnnn:高階佇列

QMNC程式對於AQ表來說就相當於CJQ0程式之於作業表。Qnnn程式對於QMNC程式就相當於Jnnn程式與CJQ0程式的關係。QMNC程式要通知Qnnn程式需要完成什麼工作,Qnnn程式則會處理這些工作。

引數AQ_TM_PROCESSES 可以指定最多建立10個這樣的程式(分別名為Q000,…,Q009),以及一個QMNC程式。如果AQ_TM_PROCESSES設定為0,就沒有QMNCQnnn程式。不同於作業佇列所用的Jnnn程式,Qnnn程式是持久的。如果將 AQ_TM_PROCESSES設定為10,資料庫啟動時可以看到10Qnnn程式和一個QMNC程式,而且在例項的整個生存期中這些程式都存在。

 

3. EMNn:事件監視器程式(Event Monitor Process

EMNn程式是AQ體系結構的一部分,用於通知對某些訊息感興趣的佇列訂購者。

 

4. MMAN:記憶體管理器(Memory Manager

這個程式是Oracle 10g 中新增的,自動設定SGA大小特性會使用這個程式。

 

5. MMONMMNLMnnn:可管理性監視器(Manageability Monitor

這些程式用於填充自動工作負載儲存庫(Automatic Workload RepositoryAWR),這是Oracle 10g中新增的一個特性。MMNL程式會根據排程從SGA將統計結果重新整理輸出至資料庫表。MMON程式用於“自動檢測”資料庫效能問題,並實現新增的自調整特性。Mnnn程式類似於作業佇列的JnnnQnnn程式;MMON程式會請求這些從屬程式代表它完成工作。Mnnn程式本質上是臨時性的,它們將根據需要來來去去。

 

6. CTWR:修改跟蹤程式(Change Tracking Process

這是Oracle 10g資料庫中新增的一個可選程式。CTWR程式負責維護新的修改跟蹤檔案。

 

7. RVWR:恢復寫入器(Recovery Writer

這個程式也是Oracle 10g資料庫中新增的一個可選程式,負責維護閃回恢復區中塊的“前”映像,要與FLASHBACK DATABASE命令一起使用。

 

5.3  從屬程式

從屬程式(slave process)。Oracle中有兩類從屬程式:I/O從屬程式和並行查詢從屬程式。

 

5.3.1  I/O從屬程式

 

I/O從屬程式用於為不支援非同步I/O的系統或裝置模擬非同步I/O。採用這種方式,可以得到更高的吞吐量,這是因為會由I/O從屬程式來等待慢速的裝置,而原來的呼叫程式得以脫身,可以做其他重要的工作來收集下一次要寫的資料。

I/O從屬程式在Oracle中有兩個用途。DBWnLGWR可以利用I/O從屬程式來模擬非同步I/O,另外RMAN寫磁帶時也可能利用I/O從屬程式。

 

有兩個引數控制著I/O從屬程式的使用:

BACKUP_TAPE_IO_SLAVES:這個引數指定RMAN是否使用I/O從屬程式將資料備份、複製或恢復到磁帶上。這個引數是一個布林值,而不是所用從屬程式的個數(這可能出乎你的意料)。

DBWR_IO_SLAVES:這個引數指定了DBW0程式所用I/O從屬程式的個數。

DBWR I/O從屬程式的名字是I1nnLGWR I/O從屬程式的名字是I2nn,這裡nn是一個數。

 

5.3.2  並行查詢從屬程式

使用並行查詢時,會看到名為Pnnn的程式,這些就是並行查詢從屬程式。處理一條並行語句時,伺服器程式則稱為並行查詢協調器(parallel query coordinator)。作業系統上伺服器程式的名字並不會改變,如果提到了協調器程式,你應該知道這就是原來的伺服器程式。



=====
補充:

後臺程式

後臺程式用來執行保證執行所需的實際維護任務。如:某個後臺程式維護緩衝區快取,根據需要將塊寫出到資料檔案。

另個程式負責線上重做日誌檔案寫滿時將它自己複製到一個歸檔目標。

可以透過查詢v$bgprocess檢視看伺服器當前後臺程式

SQL> select paddr,name,description from v$bgprocess where paddr!='00';  
  
PADDR            NAME  DESCRIPTION  
---------------- ----- ----------------------------------------------------------------  
00000001EB1F5920 PMON  process cleanup  
00000001EC226B30 VKTM  Virtual Keeper of TiMe process  
00000001EB1F69A0 GEN0  generic0  
00000001F0269448 DIAG  diagnosibility process  
00000001EC227BB0 DBRM  DataBase Resource Manager  
00000001EB2137A0 VKRM  Virtual sKeduler for Resource Manager  
00000001F02683C8 PSP0  process spawner 0  
00000001EB1F7A20 DIA0  diagnosibility process 0  
00000001F026A4C8 MMAN  Memory Manager  
00000001EC228C30 DBW0  db writer process 0  
00000001EB1F8AA0 DBW1  db writer process 1  
00000001EB1FFE20 ARC0  Archival Process 0  
00000001F02728C8 ARC1  Archival Process 1  
00000001EC231030 ARC2  Archival Process 2  
00000001EB200EA0 ARC3  Archival Process 3  
00000001F026B548 LGWR  Redo etc.  
00000001EC229CB0 CKPT  checkpoint  
00000001EB1F9B20 SMON  System Monitor Process  
00000001EB1FCCA0 SMCO  Space Manager Process  
00000001F026C5C8 RECO  distributed recovery  
  
PADDR            NAME  DESCRIPTION  
---------------- ----- ----------------------------------------------------------------  
00000001EB201F20 CJQ0  Job Queue Coordinator  
00000001F0273948 QMNC  AQ Coordinator  
00000001EC22AD30 MMON  Manageability Monitor Process  
00000001EB1FABA0 MMNL  Manageability Monitor Process 2 

根據版本的不同,後臺程式數、名稱、型別等都可能不同.

中心後臺程式:

PMON(程式監視器):負責在出現異常中止的連線後完成清理.PMON還會向 TNS監聽器註冊通訊,向它傳遞相關的引數.

SMON(系統監視器):完成所有的系統級任務.包括以下內容:

清理臨時空間,合併空閒空間,針對原來不可用的檔案恢復活動的事務,執行RAC中失敗節點的例項恢復,清理OBJ$,收縮回滾段,‘離線’回滾段.

RECO(分散式資料庫恢復):基於2PC分散式協議,允許多個不同的修改實現原子提交,但是在真正提交前,出現網路失敗等錯誤,事務成為一個可疑的分散式事務.此時

就需要RECO來負責聯絡事務協調器來發現協調的結果。在這之前事務會保持未提交狀態.當恢復網路或者錯誤解決後,RECO可能會提交事務,也可能將事務回滾.

注:可疑分散式事務會導致寫阻塞讀的情況,即可疑分散式事務不能存在太長時間,DBA可自行手動提交或回滾.

CKPT(檢查點程式):建立檢查點主要是DBWn的任務.CKPT主要是更新資料檔案的檔案首部,從而輔助真正的建立檢查點的程式.

DBWn(資料庫塊寫入器):負責將髒塊(修改過的塊)寫入磁碟的後臺程式,它會寫出緩衝區快取的髒塊,從而釋放相應的空間.可以配置多個DBWn(上面有2個DBW0和DBW1),

最好的情況是DBWn使用非同步I/O將塊寫入磁碟.採用非同步I/O,DBWn會收集要寫入的塊,交給,然後立即返回,並收集下一批要寫的塊,作業系統完成寫檔案操作之後,它會非同步地通知DBWn.

LGWR(日誌寫入器):它負責將SGA中重做日誌緩衝區的內容重新整理輸出到磁碟.一般在下面幾個情況時候,LGWR就會執行重新整理操作:

1.每隔3秒會自動重新整理一次

2.任何事務發出一個提交時

3.重做日誌緩衝區1/3滿,或者包含1MB的緩衝資料的時候.

ARCn(歸檔程式):當LGWR將線上重做日誌寫滿時,歸檔程式就將其複製到另一個位置.ARCn一般將線上重做日誌至少複製到兩個位置.一般用於硬碟等介質損壞時資料庫的恢復.

DIAG(診斷性程式):它會負責監視例項的整體狀況,捕獲處理例項失敗時所需的資訊並記錄.

FBDA(閃回資料歸檔程式):此程式為oracle 11g r1版本新增程式.主要用於閃回資料,它主要維護隨時間對錶中每行所做的改變,而實現歷史資料查詢.它將讀取事務生成的UNDO,並回滾事務做出的改變,然後將回滾的這些行記錄儲存在閃回資料歸檔中.

DBRM(資料庫資源管理器程式):為資料庫例項配置資源計劃.

GEN0(通用任務執行程式):主要是分擔另外某個程式的阻塞處理。


可選後臺程式:

  • ASMB(自動儲存管理後臺):該程式出現在ASM的資料庫例項中.它負責與管理儲存的ASM例項通訊,向ASM例項提供更新的統計資訊,並向ASM例項提供一個"心跳".
  • RBAL(重新平衡程式):該程式也在使用了ASM的資料庫例項中執行,向ASM磁碟組增加或去除磁碟時,它負責處理平衡請求,也就是重新分佈負載請求.

RAC環境後臺程式:

  • LMON(鎖監視器):監視叢集中的所有例項,檢測例項是否有失敗.在例項離開或重新加入叢集時重新配置鎖和其他資源。
  • LMD(鎖管理器守護程式):它為全域性快取服務(保持塊緩衝區在例項間一致)處理鎖管理器服務請求.
  • LMSn(鎖管理器伺服器程式):主要維持SGA塊緩衝區快取在各個RAC例項間相互保持一致.
  • LOCK(鎖程式):與LMD相似,但它處理所有全域性資源的請求.

工具後臺程式

  • CJQO和Jnnn(作業佇列程式):透過一種稱為快照的資料庫物件來提供複製特性,作業佇列就是重新整理快照時使用的內部機制.
  • QMNC和Qnnn(高階佇列程式):QMNC會監視高階佇列.並告訴從佇列中刪除等待訊息的"出隊程式":已經有一個訊息變為可用.它們還要負責佇列傳播.
  • EMNC(事件監視器程式):它是AQ體系結構中的一部分,用於通知對某些訊息感興趣的佇列.
  • DMnn和DWnn(資料泵主程式/工作程式):資料泵是oracle 10g r1中新增的特性,主要用來替代EXP/IMP。

其他後臺程式

  • PSPO(程式生成器程式):它主要負責生成各個後臺程式.
  • VKTM(虛擬時間管理器程式):為oracle例項實現一個一致的、細粒度的時鐘.
  • SMCO(空間管理協調器程式):協調資料庫的主動空間管理。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2136684/,如需轉載,請註明出處,否則將追究法律責任。

相關文章