【DB筆試面試530】在Oracle中,有哪些重要後台進程?

  • 2019 年 10 月 10 日
  • 筆記

題目部分

在Oracle中,有哪些重要後台進程?

答案部分

對於後台進程,首先需要掌握3個概念:後台進程、服務器進程和用戶進程,它們之間的關係如下圖:

圖 3-10 Oracle的進程結構

1、USER PROCESS(用戶進程)

用戶進程指的是Oracle客戶端進程,是連接到 Oracle DB的應用程序或工具。例如,常用的Oracle的SQL*Plus就是最常用的客戶端進程。用戶進程可以位於數據庫服務器計算機上,也可以不位於該計算機上。

2、SERVER PROCESS(服務器進程)

服務器進程指的是與客戶端連接的服務器端的後台進程。對於每個前台的用戶進程,後台都有一個服務器進程與之對應。服務器主要是通過它和用戶進程進行聯繫、溝通及進行數據的交換。

Oracle DB創建服務器進程以處理連接到實例的用戶進程的請求。用戶進程代表連接到Oracle DB的應用程序或工具。它可以與Oracle DB在同一台計算機上,也可以在遠程客戶機上利用網絡來訪問Oracle DB。用戶進程首先與一個監聽程序進程通信,在專用環境中該進程會創建一個服務器進程。所創建的代表每個用戶的應用程序的服務器進程可以執行以下一項或多項操作:

l 對通過應用程序發出的SQL語句進行語法分析並運行語句。

l 從磁盤上的數據文件中將必要的數據塊讀取到SGA的共享數據庫緩衝區中(如果這些數據塊目前尚未在SGA中)。

l 返回結果,使應用程序可以處理信息後台進程。

可以通過命令「ps -ef|grep LOCAL」來查看所有的服務器進程,如下所示:

[oracle@edsir4p1-PROD1 ~]$ ps -ef|grep LOCAL  oracle    4306     1  0 08:10 ?        00:00:00 oraclePROD1 (LOCAL=NO)  oracle    4466  4465  0 08:12 ?        00:00:00 oraclePROD1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))  oracle    4685  4680  0 08:14 ?        00:00:00 oraclePROD1 (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))  oracle    4698     1  2 08:14 ?        00:00:00 oraclePROD1 (LOCAL=NO)  oracle    7314     1  0 03:00 ?        00:00:37 oraclePROD1 (LOCAL=NO)  oracle    7973     1  0 03:00 ?        00:00:01 oraclePROD1 (LOCAL=NO)  oracle   10762     1  0 03:34 ?        00:00:10 oraclePROD1 (LOCAL=NO)  

查詢結果分為LOCAL=NO和LOCAL=YES這兩類,它們的含義如下所示:

LOCAL=NO:非本地連接,即網絡連接,它是通過Listener連接到服務器的。客戶端的應用程序通過用戶進程向服務器的監聽發送請求,服務器的監聽接收後,再與數據庫連接,執行相關操作,再把結果返回給客戶端。這是通過監聽的流程。

LOCAL=YES:本地連接。本地連接不走監聽,所以,在服務監聽沒有啟動的情況下,通過數據庫服務器本地的sqlplus還是可以連上數據庫的。

3、BACKGROUND PROCESSES(後台進程)

後台進程是Oracle的程序,在Oracle實例啟動的時候啟動,用來管理數據庫的讀寫,恢復和監視等工作,例如PMON、SMON等進程。後台進程是Oracle實例的核心。後台進程可以通過命令「ps -ef|grep ora_」來查詢。

服務器進程和後台進程可以統稱為數據庫進程,主要運行Oracle DB服務器代碼。每個服務器進程和後台進程都具有自己的PGA。

4、守護程序和應用程序進程

守護程序和應用程序進程包括網絡監聽程序和Oracle守護程序,例如ohasd、ocssd、cssdagent、oraagent、orarootagent。

在UNIX操作系統上,Oracle的後台進程對應於操作系統進程,也就是說,一個Oracle後台進程將啟動一個操作系統進程;在Windows操作系統上,Oracle的後台進程對應於操作系統線程,打開任務管理器,只能看到一個ORACLE.EXE的進程,但是通過另外的工具,就可以看到包含在ORACLE.EXE進程中的線程。

Oracle的後台進程較多,單實例數據庫的基本後台進程如下圖所示:

下面的表格中列出了一些常見的數據庫後台進程及其作用。

表 3-11 Oracle中的常見進程

真題1、Note the following functionalities of various background processes:

1.Record the checkpoint information in data file headers.

2.Perform recovery at instance startup.

3.Cleanup unused temporary segments.

4.Free the resources used by a user process when it fails.

5.Dynamically register database services with listeners.

6.Monitor sessions for idle session timeout.

Which option has the correct functionalities listed for a background process?()

A、Archiver Process(ARCn):1,2,5B、System Monitor Process(SMON):1,4,5

C、Process Monitor Process(PMON):4,5,6D、Database Writer Process(DBWn):1,3,4

答案:C。

本題描述中的1,將檢查點記錄在文件頭屬於CKPT的作用,2中在數據庫啟動的時候執行恢復操作屬於SMON的作用,3中清理未使用的臨時段也屬於SMON的作用,4中釋放用戶的資源屬於PMON的作用,5中動態註冊數據庫屬於PMON的作用,6中監控會話的空閑時間屬於PMON的作用。

本題中,對於選項A,1和2不屬於ARCn的作用。所以,選項A錯誤。

對於選項B,4和5不屬於SMON的作用。所以,選項B錯誤。

對於選項C,4、5和6都是PMON的作用。所以,選項C正確。

對於選項D,1、3和4都不是DBWn的作用。所以,選項D錯誤。

所以,本題的答案為C。

真題2、PMON清理失敗進程的頻率是多長?

答案:PMON(Process Monitor Process)主要的作用有3點:①在進程失敗後執行清除工作:回滾事務、釋放鎖、釋放其它資源。②註冊數據庫。③檢測會話的空閑連接時間。PMON負責處理異常結束的進程相關資源的釋放。PMON周期性地被喚醒,這個間隔主要由隱含參數「_PKT_PMON_INTERVAL」進行控制,默認為50厘秒(cs即centisecond,表示百分之一秒,1秒=100厘秒)。例如,可以通過命令「alter system set "_PKT_PMON_INTERVAL"=5;」將該參數設置為5厘秒(cs)。另外,也可以通過查找出PMON進程的PID號,然後執行命令「oradebug wakeup orapid」來手動喚醒PMON進程。需要注意的是,這裡的orapid是Oracle進程的PID,不是OS的PID。PMON進程的orapid一般為2,可以使用命令「SELECT PID, SPID FROM V$PROCESS P WHERE P.PROGRAM LIKE '%PMON%';」來查詢。可以用事件「alter system set events '10246 trace name context forever,level 4';」來查看PMON的相關操作。

  SYS@LHRDB> SELECT a.INDX,    2         a.KSPPINM NAME,    3         a.KSPPDESC,    4         b.KSPPSTVL    5  FROM   x$ksppi  a,    6         x$ksppcv b    7  WHERE  a.INDX = b.INDX    8  and lower(a.KSPPINM) like  lower('%¶meter%');  Enter value for parameter: _PKT_PMON_INTERVAL  old   8: and lower(a.KSPPINM) like  lower('%¶meter%')  new   8: and lower(a.KSPPINM) like  lower('%_PKT_PMON_INTERVAL%')   INDX NAME                   KSPPDESC                             KSPPSTVL  ----- ---------------------- ------------------------------------ --------------------     61 _pkt_pmon_interval     PMON process clean-up interval (cs)  50  SYS@LHRDB > alter system set "_PKT_PMON_INTERVAL"=50;  System altered.  SYS@orclasm > ! oerr ora 10246  10246, 00000, "print trace of PMON actions to trace file"  // *Cause:  // *Action:  SYS@orclasm > SELECT PID, SPID FROM V$PROCESS P WHERE P.PROGRAM LIKE '%PMON%';         PID SPID  ---------- ------------------------           2 4014  SYS@orclasm > oradebug wakeup 2  Statement processed.  

& 說明:

Oracle中還有一些其它的進程,具體分析可以參考我的BLOG:http://blog.itpub.net/26736162/viewspace-2121305

本文選自《Oracle程序員面試筆試寶典》,作者:李華榮。