標籤:oracle必知 oracle
Oracle資料庫的兩種串連方式:專用伺服器串連 和 共用伺服器串連
一、Oracle資料庫組成:
oracle server 是由:執行個體和資料庫組成;
oracle資料庫由:資料檔案 重做記錄檔 臨時檔案 控制檔案 參數檔案 密碼檔案等組成 (其中最重要的就是資料檔案和重做記錄檔)
oracle執行個體是由:系統全域區SGA的共用記憶體塊以及大量後台進程構成。
SGA包括:資料庫緩衝區快取、日誌緩衝區、共用池、還有(大池、Java池、流池)
後台進程:DBWR(資料庫寫進程);LGWR(日誌寫進程);CKPT(檢查點);SMON(系統監控進程);PMON(進程監控);ARCH(歸檔進程);RECO恢複;LCKN封鎖;等
PGA:使用者會話還需要伺服器端的記憶體,此記憶體不共用,也稱為程式全域區PGA,每個會話都有自己的PGA。
-----從Oracle12C起,全域暫存資料表所產生的undo可以存放在暫存資料表空間中。
《控制檔案》
控制檔案是一個相當小的檔案(極端情況下能增長到64MB),它儲存了資料庫需要的一些檔案的位置,還記錄了一些其他資訊,如:檢查點的有關資訊,資料庫名、資料庫建立是時間戳記、歸檔重做日誌的曆史以及RMAN資訊等。
《重做日誌》
重做日誌分為線上重做日誌redo和歸檔重做日誌。
online Redo log files--線上重做日誌,又稱聯機重做日誌,指Oracle以SQL指令碼的形式即時記錄資料庫的資料更新,換句話說,即時儲存已執行的SQL指令碼到線上記錄檔中(按特定的格式)。
注意:線上重做日誌最重要的目標就是在執行個體失敗後我們能夠恢複已經提交的事務;
Archive Redo log files--歸檔重做日誌,簡稱歸檔日誌,指當條件滿足時,Oracle將線上重做日誌以檔案形式儲存到硬碟(持久化)。
SGA和PGA
PGA是使用者進程區,也可以這麼理解,如果並發500 那麼就需要分配500M的PGA
PGA是進程專用的記憶體區
《重做緩衝區》
---實際上,LGWR進程會在以下任何一種情況發生時把緩衝區資料重新整理輸出到磁碟:
1、每3秒一次
2、發生提交或復原請求時
3、要求LGWR切換記錄檔時
4、重做緩衝區用滿三分之一,或者緩衝重做日誌資料達到1MB時;
資料需要寫到線上重做日誌時,在它們被寫到磁碟之前,需要在重做緩衝區中臨時緩衝這些資料;
重做日誌緩衝區的預設大小是由log_buffer參數控制;
《塊緩衝區快取block buffer cache》
Oracle將資料庫塊寫到磁碟之前,或從磁碟上讀取資料庫塊之後,就會把這些資料庫Block Storage在塊緩衝區快取中;
塊緩衝區快取不能太小,要不然 我們的查詢就會永遠也執行不完。也不能太大,因為又會搶佔其他進程的資源;
資料庫中只有一種塊大小:2KB 4KB 8KB 16KB 32KB中的一種;如果要修改資料庫塊,在安裝資料庫的時候 在init.ora檔案中指定:db_block_size=16384 即可,16384是16K
《共用池shared pool》
共用池就是Oracle緩衝一些程式資料的地方,在解析一個查詢時,解析得到的結果就緩衝在那裡。在完成解析整個查詢的任務之前,Oracle會搜尋共用池,看看這個工作是否完成;
共用池的特點是有大量小的記憶體塊,一般為4KB或更小。我們的目標是使用小塊的記憶體來避免片段問題,如果大小各不同 很可能出現片段問題。
《大池large pool》
大池是用於被大塊記憶體的分配,而共用池無法處理這麼大的記憶體塊。
《JAVA池》
JAVA池目的是支援在資料庫中運行JAVA,如果用JAVA編寫一個預存程序,Oracle會在處理代碼時使用Java池的記憶體。
《流池》
流池被用來緩衝隊列訊息,而且流池對於:goldengate streams等很重要,這些情境必須要有流池;
---SGA自動管理時,statistics_level參數必須被設定為typical或者all,因為如果統計資訊收集功能沒有啟用,資料庫就沒有相關的記錄來判斷各個組件所需的記憶體大小。
二、Oracle資料庫進程
一個Oracle執行個體主要有3類進程:伺服器處理序 後台進程 從屬進程
---通過v$bgprocess視圖可以查看資料庫所有可能的後台進程
select paddr,name,description from v$bgprocess order by paddr desc;
通過查詢v$process中pname不為空白的記錄,來查看系統中正在啟動並執行後台進程;
注意:後台進程也分為兩類:一類是有特定任務的進程,另一種是能夠執行各種其他任務的進程(如工具進程)
---在12C中查看啟動的後台進程:
select paddr,name,description from v$bgprocess where paddr <>‘00‘ order by paddr desc;
(在12C中將啟動大約22個後台進程,而在11GR2中 只有17個後台進程)
1、PMON進程監視器
進程監視器(process monitor)負責在串連出現異常終止後進行清理工作。(例如:一個專用伺服器失敗或者出於某種原因被結束掉,就要由PMON進程負責善後並釋放資源。PMON會復原未提交的工作,釋放鎖,並釋放之前為失敗進程分配的SGA資源)
注意:在Oracle12C之前,PMON還負責處理註冊監聽的任務,從Oracle12C開始 改由專門的監聽註冊後台進程來註冊執行個體和服務到監聽器
2、LREG監聽註冊進程
從Oracle12C開始,LREG進程負責將資料庫執行個體和服務註冊到監聽器中;
3、SMON系統監視器
SMON進程用來做所有系統級的任務。SMON所做的工作包括如下幾種:
①:清理暫存資料表空間:(並不是說完全不需要手動清理的)
②:合并空閑資料表空間:(只有在使用資料字典的資料表空間適用)
③:針對原來停用檔案恢複活動的事務:
④:執行RAC中失敗節點的執行個體恢複:
⑤:清理OBJ$:(OBJ$是一個底層的資料字典,資料庫中幾乎每個對象(表 索引 觸發器 視圖等)都在其中對應一個條目,很多時候,有些條目表示的可能是已經刪除的對象,或者表示not there不在哪裡的對象)
⑥:管理撤銷段:SMON會負責實施撤銷段的自動上下線以及收縮撤銷段;
⑦:復原段離線:
4、RECO分散式資料庫恢複
reco有一個非常核心的任務:由於兩階段交易認可(2pc)期間的崩潰或連結丟失等原因,有些事務可能會保持在準備狀態,這個進程就是要恢複這些事務;
5、CKPT檢查點進程
實施檢查點主要是DBWn進程的工作,CKPT僅僅是協助實際運行檢查點的進程,來更新資料檔案的檔案頭;
6、DBWn資料庫塊寫入器
資料庫塊寫入器是負責將髒塊寫入磁碟的後台進程;
DBWn的效能至關重要,如果它寫出塊的速度不夠快,不能很快的釋放緩衝區,就會看到free buffer waits和write complete waits這兩個等待事件的數量和等待事件在增加;其實我們可以配置多個DBWn進程,實際上在Oracle11G可以配置36個,在Oracle12C則多達100個;
select name,description from v$bgprocess where description like ‘db writer process%‘; ----來查看資料庫有幾個DBWn進程
7、LGWR日誌寫入器:
LGWR進程負責將SGA中重做日誌緩衝區的內容重新整理輸出到磁碟;
8、ARCn歸檔進程
該進程的任務是:當LGWR將一個線上重做記錄檔填滿時,就將其複製到另一個位置,此後這些歸檔的重做記錄檔就可以用於完成介質恢複;
9、DIAG診斷進程
該進程在以前的版本中專用語RAC環境中,從Oracle11G開始 利用ADR(進階診斷庫),它會負責監視實列的整體狀況,而且會捕獲處理實列失敗時的所需資訊;
10、FBDA閃回資料歸檔進程
11、DBRM資料庫總管進程
DBRM進程會去實施那些為一個資料庫執行個體配置的資源計劃;
12.還有一些其他進程:
LMON 鎖監視器
LMD 鎖管理器守護
LMSn 鎖管理器伺服器
LCK0 鎖進程
本文出自 “笨小孩的dba之路” 部落格,請務必保留此出處http://fengfeng688.blog.51cto.com/4896812/1933413
Oracle必知基礎總結