1. 程式人生 > 資料庫 >oracle資料庫例項後臺程序

oracle資料庫例項後臺程序

我們在記憶體中做操作,但是記憶體中所做的操作應該及時寫到磁碟去,所以怎麼保證記憶體的操作寫入磁碟呢?

 

後臺程序介紹

      • 程序用於執行特定的任務,不同的程序完成的任務不同
      • oracle的程序分為三大類
        • 使用者程序:客戶端用於連線資料庫的程式
        • 伺服器程序:伺服器端響應使用者操作請求的程式
        • 後臺程序:維護DB Server正常執行以及一些特定功能所需要的程序,隨著例項啟動而啟動
      • oracle的使用者程序就是客戶端連線資料庫的程式
      • 當客戶端程式發出連線請求,使用者程序啟動,當斷開連線,使用者程序釋放
      • 伺服器程序就是伺服器端響應使用者操作請求的程序,同用戶程序一樣,連線開始,伺服器程序分配,連線斷開,伺服器程序釋放
      • 後臺程序用於執行DB SERVER中特定的任務,根據程序的功能,後臺程序被分為必要的和可選兩種
        • 必要的後臺程序是系統執行必須的,有五種
          • DBWn資料寫程序
          • PMON程序監視器
          • CKPT檢查點
          • LGWR日誌寫程序
          • SMON系統監視器
        • 可選的後臺程序更多一些,主要被用於實現或增強某方面的特殊功能

 

如何檢視後臺程序

[oracle@WHOST ~]$ ps -ef|grep gaga01

oracle     2704      1 0 17:46 ?        00:00:00 ora_pmon_gaga01

oracle     2706      1 0 17:46 ?        00:00:00 ora_psp0_gaga01

檢視5個重要的後臺程序

[oracle@WHOST ~]$ ps -ef|grep gaga01|egrep "pmon|smon|dbw0|lgwr|ckpt"

oracle     2704      1 0 17:46 ?        00:00:00 ora_pmon_gaga01

[oracle@WHOST ~]$

grep和egrep的用法參考如下部落格:

 

在資料字典中查詢後臺程序

SQL> desc v$bgprocess

 

正在使用的後臺程序查詢:

SQL> SELECT name,description FROM v$bgprocess WHERE paddr<>'00';

 

 

  1. 程序
  2. ,程序
  3. ARCH/ARCN

 

1、DBWN,LGWR,CKPT程序

DBWN

DBWN資料庫寫的條件

  • 發聲檢查點
  • 髒快取到達限制
  • 沒有自由的快取
  • 超時發生
  • RAC Ping請求
  • 表空間離線
  • 表空間只讀
  • 表被刪除或截斷
  • 開始備份表空間

 

32bit--->dbw0---dbw9(最多可以跑10個)

64bit--->dbw0---dbw9,dbwa-dbwj(最多可以跑20個)

具體跑多少個,由引數db_writer_processes決定

如果設定db_writer_processes修改為22個,但是最終還是最多能開20個

SQL> show parameter db_w

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_writer_processes                  integer     8

 

SQL> alter system set db_writer_processes=20 scope=spfile;

 

System altered.

 

SQL> show parameter db_w

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ----------------------                                                                --------

db_writer_processes                  integer     8

 

SQL> startup force

ORACLE instance started.

 

Total System Global Area 1653518336 bytes

Fixed Size                  2253784 bytes

Variable Size            1073744936 bytes

Database Buffers          570425344 bytes

Redo Buffers                7094272 bytes

Database mounted.

Database opened.

SQL> show parameter db_w

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ----------------------                                                                --------

db_writer_processes                  integer     20

 

 

SQL> select count(name) from v$bgprocess where paddr<>'00' and name like'DBW%';

 

COUNT(NAME)

-----------

         20

 

SQL> select name from v$bgprocess where paddr<>'00';

 

NAME

-----

DBW0

….

DBW9

DBWa

…..

DBWj

LGWR

LGWR寫的條件

  • 提交的時候
  • 達到三分之一滿
  • 日誌的大小到1M
  • 每隔三秒
  • 在DBWn程序寫之前
  • 按照順序迴圈寫
  • 一般情況下LGWR程序只有一個

Log buffer-->lgwr--logfile

CKPT

CKPT是觸發檢查點

 

他是保證資料庫裡面的資料庫檔案、控制檔案、日誌檔案中的三大要素實現同步的特殊程序,必須正常.

 

作用:

 

給訊號給DBWN:給dbwn發訊號,要求dbwn寫資料,把資料緩衝區中髒資料通過DBWN寫入資料檔案.

更新資料檔案頭:把資料檔案頭的SN號更新

更新控制檔案資訊,如版本號.

 

這個時候控制檔案、日誌檔案、資料檔案就完全記錄資料庫裡面的狀態和資料,保證不會丟,他們的狀態是一致性的.

 

CKPT觸發DBWN,DBWN觸發會要求LGWR寫日誌,保證記憶體中的資料全部寫入全部的資料檔案、控制檔案、日誌檔案中.

 

CKPT中最重要的是:SCN系統變更號,system change number,SCN是標誌資料庫一致性判斷的依據,只有SCN號相同,這些檔案才一致性.

 

CKPT中所對應的檔案,LGWR所對應的檔案都不要有問題

 

2,SMON,PMON程序

系統監控程序SMON

系統監控程序SMON(重要)

  • 例項恢復
    • 前滾所有重做日誌中的改變
    • 開啟資料庫為了使用者能訪問
    • 回滾沒有提交的事務

 

  • 連線自由空間

Coalesce every three seconds

  • 釋放臨時表空間

Dellocated

程序監控程序PMON

清除失敗的程序:

回滾事務rollback

釋放鎖

釋放其他資源

重啟死調的dispatchers

動態註冊監聽器

 

3,可選後臺程序:歸檔日誌程序ARCH/ARCN

歸檔日誌程序ARCH/ARCN

 

歸檔日誌程序可能是最重要的一個可選後臺程序,因為如果oracle資料庫的資料檔案丟失或損壞,一般資料庫要進行完全恢復,oracle資料庫應執行在歸檔方式.

 

在oracle資料庫中,重做日誌檔案被劃分為若干個組,當一個組重做日誌的檔案被寫滿後,oracle就開始寫下一組重做日誌,這杯稱為日誌切換.

切換是以迴圈的方式進行的,即當最後一組寫滿後,又開始寫第一組,因此如果只有重做日誌檔案,即oracle資料庫執行在非歸檔方式下,當遇到資料檔案丟失或損壞時,oracle系統很難保證完全恢復資料庫中的資料,因為此時所需的重做記錄可能因重做日誌迴圈使用而被覆蓋掉了.

 

在歸檔方式下,ARCn程序把切換後的重做日誌檔案複製到歸檔日誌檔案,可以把歸檔日誌檔案堪稱是重做日誌檔案的備份,但歸檔日誌檔案是離線的,即除了在進行復制時,oracle資料庫在正常執行時是不會關注歸檔日誌檔案的,oracle系統確保一組重做日誌檔案的歸檔操作完成之前不會重新使用該組做日誌,在oracle資料庫中歸檔操作一般是自動進行的,利用這些歸檔日誌檔案,oracle系統就能確保在遇到資料檔案丟失或損壞後可以完全恢復資料庫中的資料.

 

Ho ps -ef|grep gaga01|grep arc

 

Select log_mode from v$database;

archive log list;

 

切日誌:

Alter system switch logfile

日誌切完後就會歸檔

 

檢視歸檔到什麼地方呢?

Show parameter db_rec;

SQL> show parameter db_rec;

 

NAME                                 TYPE        V          ALUE

------------------------------------ ----------- -          -----------------------------

db_recovery_file_dest                string      /          u01/app/oracle/fast_recovery_

                                                 a          rea

db_recovery_file_dest_size           big integer 4          182M

db_recycle_cache_size                big integer 0

 

/u01/app/oracle/fast_recovery_area/GAGA01/archivelog/2017_07_11

 

 

 

SQL> ho ls /u01/app/oracle/fast_recovery_area/GAGA01/archivelog/2017_07_11

o1_mf_1_43_dp7klx7w_.arc

 

 

歸檔程序有多少個,由於show parameter log_archive_max_processes引數來決定,這個引數最多可設定到30個

 

 

我們在記憶體中做操作,但是記憶體中所做的操作應該及時寫到磁碟去,所以怎麼保證記憶體的操作寫入磁碟呢?

以下說明了後臺程序的作用:

比如DBWR後臺程序:

  • DBWR會將data buffer cache中已提交標識的資料寫入到資料檔案data file物理磁碟中去。也就是說,在data buffer cache中標記已提交的資料會通過DBWR後臺進行寫入到資料檔案中去。
  • 但是,redo log buffer是記錄所有塊更改的資訊的,如果redo log buffer沒有把塊更改的變化資訊記錄下來,DBWR是不會將提交的資料寫入到資料檔案中去。
  • 也就是說,當data buffer cache中的更改的資料標記了提交,並且redo log buffer將更改的資訊記錄下來後,DBWR才會將提交了得資料寫入到資料檔案中。

DBWn(Database Writer Process)

  • n是指ORACLE可以啟動多個Database Writer Process
  • 記憶體中有很多髒資料,有很多資料在修改,一個Database Writer Process不夠用,就會啟多個Database Writer Process
  • DBWn是資料庫後臺寫入程序,負責把buffer cache內的髒資料(當buffer cache被修改了,就會標成髒資料)寫入資料庫.DBWn的主要工作是把髒資料寫入磁碟以保證buffer cache是乾淨的.
  • 使用者程序會產生髒資料,空餘的緩衝區會減少.如果空閒的緩衝區太少,使用者程序從磁碟讀取block進緩衝區的時候就找不到空餘的位置了.DBWn管理buffer cache保證使用者程序始終可以找到空閒的位置.

 

在什麼觸發DBWR程序的條件:

1.當髒緩衝區的數量超過了所設定的限額。

2.當所設定的時間間隔到了。

3.當有程序需要資料庫高速緩衝區卻找不到空閒的緩衝區時。當server process在buffer cache中無法找到可用的buffer時,呼叫該程序,保證使用者程序始終可以在buffer cache中找到空閒的位置;

4.當校驗點發生時。 接收到CKPT(檢查點,checkpoint)程序的指令後,呼叫該程序,將資料寫入到磁碟中。

5.當某個表被刪除或被截斷時。

6.當某個表空間被設定為只讀狀態時。

7.當使用類似於alter tablespace users begin backup的命令對某個表空間進行聯機備份時。

8.當某個臨時表空間被設定為只離線狀態或正常狀態時。

為了保證redo log buffer記憶體中越來越大,所以需要將記憶體中的log寫入磁碟中,釋放記憶體空間。

LGWR(Log Writer Process)

LGWR程序在啟動例項時啟動

 

LGWR是把log_buffer中的日誌條目(ORACLE把客戶提交的SQL語句轉換成ORACLE能夠識別、通過它可以重構資料的一種日誌格式)寫入到日誌檔案中.

 

LGWR儲存日誌條目,迅速釋放log_buffer空間,只要該日誌條目寫入到日誌檔案,所佔的記憶體空間就釋放.所以log_buffer的功能就是臨時的存放日誌條目,迴圈的使用,如果log_buffer滿了,就無法接受新的事務,就會發生例項掛起現象.

 

LGWR的作用:

將日誌快取區的資料從記憶體寫到磁碟的redo檔案裡,完成資料庫物件建立、更新等操作過程中的記錄。

 

LGWR程序:

LGWR是將redo log buffer中的日誌寫入到物理磁碟的redo log files裡面。

記憶體中的日誌會定時寫入磁碟redo log files中。這些日誌記錄的作用是為了恢復。

 

這麼多程序在寫,那麼如何保證程序之間協調工作呢?CKPT

  • CheckPoint Process(CKPT) 保證資料同步。

只有觸發CKPT後,才會觸發DBWR寫相關資料,DBWR被觸發時LGWR也會觸發。

所以這個時候,CKPT觸發時,LGWR就會寫日誌,日誌寫完後DBWR就會寫資料。

 

什麼時候會觸發CKPT呢?

  • 人為執行commit操作
  • 系統定時執行了一些操作

 

檢查點,把記憶體中的資料寫到磁碟上

  • 會啟動DBWn來寫髒資料(SIGNALLING DBWn at CKPT.)
  • 完後會更新DATAFILE的HEADER和控制檔案的HEADER.而HEADER中有同步所需要的資訊,即CHECKPOINT的資訊.
  • 在ORACLE中,正常情況下,所有檔案必須同期性地同步;靠CHECKPOINT來完成.

 

 

 

 

SMON系統監控程序:資源的維護和管理,索引合併等

SMON(System Monitor Process)

SMON是Oracle資料庫至關重要的一個後臺程序,SMON 是System Monitor 的縮寫,意即:系統監控。

作用:

  • 例項恢復
    • 前滾Rolls forward changes in redo logs
    • Opens database for user access
    • 回滾Rolls back uncommitted transactions
  • 回收空間Coalesces free space
  • 釋放臨時表Deallocates temporary segments

 

 

 

PMON程序監控程序:程序之間的監控和維護

  • Process Monitor Process(PMON)
    • 回滾事務
    • 釋放鎖及其它資源
    • 重啟死掉的排程器.(在共享伺服器中用).
    • 在監聽器中註冊服務資訊

 

PMON SMON DBWR LGWR CKPT 這5個程序為核心程序,不能關閉