在Oracle中有很多的東西值得我們大家學習的地方,在這裡我們主要描述的是Oracle SMON進程,也包括介紹歸檔進程ARCH等相關方面的內容。在Oracle數據庫中有兩個進程非常的渺小,但是其作用卻是非常的巨大。由於其比較小而往往被數據庫管理員所忽視。
筆者這次就給大家提醒提醒,不要忽視了這兩個進程的作用。如果利用的好的話,會減少系統管理員不少的工作。
Oracle SMON進程中系統監視進程SMON
這個進程對於Oracle數據庫來說,可以利用一句話來概括,即人小鬼大。其負責的內容並不是很多,但是對於數據的安全與數據庫的性能卻有很關鍵的作用。如隨著表空間中的數據不斷的建立、刪除、更新等等,在表空間中難免會產生碎片。由於這些碎片的存在,數據庫的性能會逐漸的降低。而現在系統監視進程SMON的作用,就可以解決這些碎片。
Oracle SMON進程會將各個表空間的空閒碎片合並在一起,讓數據庫系統更加容易分配。從而提高數據庫的性能。另外,在數據庫運行的過程中,會因為斷電或者其他的原因而發生故障。此時由於數據高速緩存中的髒緩存塊還沒有來得及寫入到數據文件中,從而導致數據的丟失。
在數據庫啟動的時候,系統監視進程OracleSMON會在下一次啟動例程的時候,自動讀取重做日志文件並對數據庫進行恢復。也就是說,進行將已提交的事物寫入數據文件(已經寫入到日志文件中而沒有寫入到數據文件中的數據)、回退未提交的事務操作。可見,Oracle SMON進程是一個比較小但是卻非常重要的角色。
在管理這個進程的時候,筆者認為主要需要注意兩個問題。一是其啟動的時機。一般情況下,例程重新啟動的時候,會啟動這個系統監視進程。然後在這個例程運行期間,這個進程也會被系統定期的喚醒,然後其會檢查是否有工作需要其完成。最重要的是,在有需要的時候,數據庫管理員可以通過其他進程來啟動這個OracleSMON系統系統監視進程,來完成一些特定的工作。
第二需要注意表空間配置對這個進程的影響。在表空間管理中,有一個參數叫做PCTINCREASE。如果將這個參數設置為0的話,則這個SMON系統監視進程對於這個表空間的作用就要打折扣了。在設置為0的情況下,SMON進程就不會對這個表空間中的空閒碎片進行整理、合並操作。
也就是說,需要數據庫管理員通過數據的導出導入等手工操作,才能夠解決表空間的碎片問題。顯然這會增加數據庫管理員的工作量。為此筆者建立,除非有特別的需要,不要將這個參數設置為0。讓Oracle SMON進程自動對表空間中的碎片進行管理,自動合並表空間中的空閒碎片。
不過如果某個表空間這個參數設置為0的話,不會影響到系統監視進程的其他用途,如不會影響到在例程非正常關閉時對數據的恢復操作。即即使這個參數設置為0 ,在有需要的時候其仍然可以利用重做日志文件中的記錄來恢復相關的數據。
歸檔進程ARCH
在重做日志文件管理中有歸檔與非歸檔兩種模式。在日志進行切換時,如果不對原先的日志文件進行歸檔,而直接覆蓋的話,就叫做非歸檔模式。相反,在寫入下一個日志文件的時候,會先對目標日志文件進行歸檔,這就叫做歸檔模式。
歸檔進程ARCH就是負責在重做日志文件切換後將已經寫滿的重做日志文件復制到歸檔日志文件中,以防止循環寫入重做日志文件時將其覆蓋。所以說,只有數據庫運行在歸檔模式時,這個ARCH進程才會被啟動。
在任何一中操作模式下,重做日志文件都會被循環使用。所以當LGWR進程在進行日志切換,需要用到下一個日志文件時,則數據庫會被暫時的掛起,進行目標日志文件的歸檔工作。直到這個目標重做日志文件歸檔完畢後,數據庫才會恢復正常。所以說,歸檔日志的操作,有時候也會影響數據庫的性能,特別是當需要進行頻繁的大批量數據更改的時候。