Oracle資料庫例項啟動步驟分析

張衝andy發表於2017-01-12
Oracle資料庫例項啟動時,分成nomount、mount和open的三個階段,下面的例項分析來展示不同階段時,系統到底做了哪些工作

1、nomout階段,該階段啟動的前提是有引數檔案,若沒有引數檔案,系統無法啟動,在該過程中,系統分配記憶體、開啟後臺程式,同時更新alter日誌檔案

例項nomount之前的狀態:

--無例項程式
[oracle@secdb1 admin]$ echo $ORACLE_SID
PROD
[oracle@secdb1 admin]$ ps -ef|grep PROD
oracle   14890  6310  0 21:12 pts/1    00:00:00 grep PROD
--alter日誌資訊
[oracle@secdb1 bdump]$ ls -lrt
total 48
-rw-r----- 1 oracle oinstall  1113 Mar  4 23:15 prod_lgwr_7319.trc
-rw-r----- 1 oracle oinstall   779 Mar  5 19:42 prod_mmnl_7329.trc
-rw-r--r-- 1 oracle oinstall 40910 Mar  5 21:08 alert_PROD.log

此時啟動例項到nomount狀態
[oracle@secdb1 admin]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 5 21:15:50 2014
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup nomount
ORACLE instance started.
Total System Global Area  314572800 bytes
Fixed Size                  1219184 bytes
Variable Size             100664720 bytes
Database Buffers          209715200 bytes
Redo Buffers                2973696 bytes
SQL> 

此時檢視程式和日誌資訊
[oracle@secdb1 bdump]$ ls -lrt
total 52
-rw-r----- 1 oracle oinstall  1113 Mar  4 23:15 prod_lgwr_7319.trc
-rw-r----- 1 oracle oinstall   779 Mar  5 19:42 prod_mmnl_7329.trc
-rw-r--r-- 1 oracle oinstall 42513 Mar  5 21:15 alert_PROD.log  ----------------日誌檔案已經更新

[oracle@secdb1 bdump]$ ps -ef|grep PROD  ----------------------------系統中出現後臺程式
oracle   14946     1  0 21:15 ?        00:00:00 ora_pmon_PROD
oracle   14948     1  0 21:15 ?        00:00:00 ora_psp0_PROD
oracle   14950     1  0 21:15 ?        00:00:00 ora_mman_PROD
oracle   14952     1  0 21:15 ?        00:00:00 ora_dbw0_PROD
oracle   14954     1  0 21:15 ?        00:00:00 ora_lgwr_PROD
oracle   14956     1  0 21:15 ?        00:00:00 ora_ckpt_PROD
oracle   14958     1  0 21:15 ?        00:00:00 ora_smon_PROD
oracle   14960     1  0 21:15 ?        00:00:00 ora_reco_PROD
oracle   14962     1  0 21:15 ?        00:00:00 ora_mmon_PROD
oracle   14964     1  0 21:15 ?        00:00:00 ora_mmnl_PROD
oracle   14965 14942  0 21:15 ?        00:00:00 oraclePROD (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))
oracle   14988  5989  0 21:17 pts/3    00:00:00 grep PROD

如果在$ORACLE_HOME/dbs目錄下無引數檔案,啟動例項是現象如下:
[oracle@secdb1 dbs]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 5 21:21:19 2014
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
Connected to an idle instance.
SQL> startup nomount
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/10.2.0/db_1/dbs/initPROD.ora'
SQL> quit
引數尋找的優先順序 spfileSID.ora----initSID.ora

在該階段,可以進行資料庫的建立、控制檔案的建立

2、mount,在該階段,啟動條件是需要有控制檔案,如果控制檔案丟失或者損壞,啟動將會報錯。此時系統會開啟控制檔案、檢查資料檔案、日誌檔案的名稱和位置,
但此時不檢查檔案到底是否存在不存在

mount之前:
SQL> select * from v$controlfile;
no rows selected

SQL> select * from v$datafile;
select * from v$datafile
              *
ERROR at line 1:
ORA-01507: database not mounted

mount之後

SQL> alter database mount;
Database altered.
SQL> select name from v$controlfile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/PROD/disk1/control01.ctl
/u01/app/oracle/oradata/PROD/disk2/control02.ctl

SQL> select file#,name from v$datafile;


     FILE#  name
--------------------------------------------------------------------------------
         1  /u01/app/oracle/oradata/PROD/disk1/system01.dbf
         2  /u01/app/oracle/oradata/PROD/disk1/undotbs01.dbf
         3 /u01/app/oracle/oradata/PROD/disk1/sysaux01.dbf
在該階段,可以進行資料庫的完全恢復、修改資料庫的歸檔模式、移動和重命令資料檔案
SQL> archive log list  ---檢視資料庫歸檔模式
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u01/app/oracle/product/10.2.0/db_1/dbs/arch
Oldest online log sequence     3
Current log sequence           5

SQL> alter database archivelog; ---修改成歸檔模式
SQL> alter database noarchivelog;---修改成非歸檔模式

如果控制檔案丟失,系統報錯,現象如下:

SQL> startup mount
ORACLE instance started.
Total System Global Area  314572800 bytes
Fixed Size                  1219184 bytes
Variable Size             100664720 bytes
Database Buffers          209715200 bytes
Redo Buffers                2973696 bytes
ORA-00205: error in identifying control file, check alert log for more info

3、open階段,該階段主要是開啟資料檔案、日誌檔案,在開啟的過程中對資料檔案和日誌檔案進行一致性檢查,如果不一致,則SMON程式繼續例項恢復,如果檔案丟失,開啟失敗。
SQL> alter database open;
Database altered.

--如何資料檔案丟下,開啟失敗
SQL> startup mount;
ORACLE instance started.
Total System Global Area  314572800 bytes
Fixed Size                  1219184 bytes
Variable Size              79693200 bytes
Database Buffers          230686720 bytes
Redo Buffers                2973696 bytes
Database mounted.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/app/oracle/oradata/PROD/disk1/system01.dbf'



4、小結
    
 啟動時分成三個步驟,1、nomount階段,該階段是例項啟動,根據引數檔案進行系統分配記憶體,啟動後臺程式。mount階段,根據控制檔案來進行資料檔案和日誌檔案的名稱和位置檢查,把例項和資料庫連線起來。open階段,就是資料庫開啟階段,開啟是就需要檢查檔案是否正常,有沒有發生檔案丟失或者不一致的情況,丟失則報錯,不一致則進行例項恢復。

jiangkch

20140305

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

轉:http://blog.itpub.net/393784/viewspace-1101878/

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31383567/viewspace-2132365/,如需轉載,請註明出處,否則將追究法律責任。

相關文章