SMON進程、PMON進程、LGWR/ARCH


SMON 進程:system monitor instance monitor 系統監控、實例監控進程

   說明及作用:在實例關閉時,會清理臨時段,整理空閑空間free space;

   實例非正常關閉后,啟動實例時,做instance recovery ;

SMON如何判斷是否需要實例恢復: --在數據庫mount狀態,可以通過last_change#是否未Null;

select name,checkpoint_change#,last_change# from v$datafile;

--數據庫在一致性關庫的時候會觸發ckpt,完全檢查點,控制文件會記錄相應的值;

 

前滾,通過redo日志查詢到離數據庫最近的一次檢查點SCN為起始點,通過應用redo往前滾走到redo日志的最后一刻,重演操作,也就是將數據庫的臟塊還原,隨后應用Undo,回滾事物的方式將未提交的事物回滾,確保事務一致性后,數據庫open;

 

PMON:SMON是實例級別的管理,那么 進程誰管理呢?

PMON:  process cleanup 進程清理

   說明:用戶連接數據庫,會產生一個會話分配一個server process提供服務,以及分配一個Uga,正常情況下,會話退出,釋放資源。但是如果異常退出呢?比如客戶端死機,server process 不會正常退出,持有的資源還在不斷消耗,PMON進程會監控進程,一旦發現后,釋放資源,回滾事物:鎖、內存等消耗釋放

              監控進程,將Instance注冊到listener,Oracle自動的,如果數據庫多個實例,然而監聽程序就一個,需要將實例注冊到監聽中,讓其識別;如果配置的是動態監聽,數據庫啟動,需要等待Pmon進程去注冊,可能需要等待一段時間,可以通過命令手工注冊:alter system register;

 

 

 

LGWR: 日志寫進程:

   說明:從log buffer 寫入redo log files文件中;

   在單實例環境下,只有一個Log buffer,因此設置多個lgwn進程沒有意義,日志是串行寫進程,順序寫;

   12c可以有00-99個lgwr進程;

觸發條件:1.commit提交,commit操作只涉及到了LGWR進程,提示commit成功,只表明log buffer 寫入了log file文件且在redo undo中事物標記commit提交標識;

                  2. 每3s

                  3、1/3滿:存儲的數據,在Log buffer中存儲三分之一就觸發條件;

                  4、 1M累計

                  5、 DBWR寫臟塊前  寫入redo log file 文件中,ORACLE 一定要記住,日志先行’

 

ARCN   歸檔進程,作為日志文件的補充;

       Oracle如何保證恢復的完全恢復,就是應用redo 日志來解決的恢復問題;

     Oracle的日志文件有個特點: 循環覆蓋寫,最少一個單實例數據庫所需的redo file文件最少兩組,A寫滿,切換B,如果B寫滿,在循環使用A, 如果是非歸檔模式下,則覆蓋文件;

      在生成環境下,為了確保數據0丟失,因此保留日志文件是非常有必要的,因此會開啟歸檔,開啟歸檔后,在A切換B之后,立刻馬上,A寫滿的日志文件會在ARCN的進程引導下按照歸檔文件命名規則,生成一個歸檔文件;

SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /picclife/app/oracle/product/11.2.0/dbhome_1/dbs/arch

SQL> startup force mount;        --設置歸檔,需要數據庫一致性關閉數據,並啟動到mount狀態

ORA-00265: instance recovery required, cannot set ARCHIVELOG mode

SQL>alter database open;

SQL> shutdown immediate;

SQL> startup mount;

SQL> alter database archivelog;

SQL> archive log list; Database log mode              Archive Mode

SQL> alter database open;

 

--開啟歸檔后,歸檔進程的數量

SQL> show parameter arch

log_archive_max_processes            integer     4  --歸檔進程數量

 

--查詢當前狀態:

select dest_id,dest_name,status,binding,name_space,destination,log_sequence from v$archive_dest where status='VALID';

     1 LOG_ARCHIVE_DEST_1                VALID       OPTIONAL  SYSTEM   /u01/guidang/   0

    2 LOG_ARCHIVE_DEST_2                VALID       OPTIONAL  SYSTEM /picclife/app/oracle/product/11.2.0/dbhome_1/dbs/arch/                  0

 

 

---參數,標識數據庫,歸檔文件命名規則

log_archive_format                   string      %t_%s_%r.dbf

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /picclife/app/oracle/product/11.2.0/dbhome_1/dbs/arch

SQL> show parameter log_arch

NAME                                 TYPE        VALUE

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

log_archive_config                   string

log_archive_dest                     string

log_archive_dest_1                   string

log_archive_dest_2                   string

SQL> show parameter db_recovery

NAME                                 TYPE        VALUE

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

db_recovery_file_dest                string

db_recovery_file_dest_size           big integer 0

 

--更改歸檔路徑: 

如下,設置了兩個歸檔參數,兩個歸檔互為備份,Location本地,server遠程

mkdir -p /xxx目錄,權限需要注意,chown -R oracle.oinstall
alter system set log_archive_dest_1="location=/u01/guidang/";

SQL> alter system set log_archive_dest_2="location=/picclife/app/oracle/product/11.2.0/dbhome_1/dbs/arch/";

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM