Oracle Restart啟動資料庫例項故障一例( Oracle ASM儲存Spfile解析)
在之前的文章《Oracle Restart啟動資料庫例項故障一例》(http://space.itpub.net/17203031/viewspace-774622)中,筆者解決了一個由於使用create pfile from spfile引起的Restart無法啟動資料庫例項的故障。嚴格的說,筆者並沒有完全將其解決。主要體現在Spfile的使用和存放上。
1、問題簡述
Oracle Database安裝在ASM儲存的時候,預設都是使用ASM儲存Spfile引數檔案。與早期的pfile檔案不同,Spfile是具有二進位制格式,能夠支援部分引數的動態調整。所以,我們出現問題的時候,發現Restart的配置資訊中包括了ASM中的Spfile引數內容。
[oracle@SimpleLinux ~]$ srvctl config database -d ora11g
Database unique name: ora11g
Database name:
Oracle home: /u01/app/oracle/product/11.2.0/db_1
Oracle user: oracle
Spfile: +DATA/ORA11G/spfileora11g.ora
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Database instance: ora11g
Disk Groups: DATA,RECO
Services:
我們之前的修復方法,就是將spfile內容置空,讓資料庫例項啟動使用預設路徑$ORACLE_HOME/dbs的spfile和pfile引數進行檢索。
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ---------------------------------------------------------------
spfile string /u01/app/oracle/product/11.2.0/db_1/dbs/spfileora11g.ora
但是此時,我們在ASM路徑上是存在spfile上的。
SQL> asmcmd
ASMCMD> pwd
+DATA/ORA11G
ASMCMD> ls
CONTROLFILE/
DATAFILE/
ONLINELOG/
PARAMETERFILE/
TEMPFILE/
spfileora11g.ora
在這種情況下,如果配置了ASM目錄的spfile啟動標誌,啟動Restart會報錯。
[oracle@SimpleLinux ~]$ srvctl modify database -d ora11g -p +DATA/ora11g/spfileora11g.ora
[oracle@SimpleLinux ~]$ srvctl start database -d ora11g
PRCR-1079 : Failed to start resource ora.ora11g.db
CRS-5010: Update of configuration file "/u01/app/oracle/product/11.2.0/db_1/dbs/initora11g.ora" failed: details at "(:CLSN00014:)" in "/u01/app/grid/product/11.2.0/grid/log/simplelinux/agent/ohasd/oraagent_grid/oraagent_grid.log"
CRS-5017: The resource action "ora.ora11g.db start" encountered the following error:
CRS-5010: Update of configuration file "/u01/app/oracle/product/11.2.0/db_1/dbs/initora11g.ora" failed: details at "(:CLSN00014:)" in "/u01/app/grid/product/11.2.0/grid/log/simplelinux/agent/ohasd/oraagent_grid/oraagent_grid.log"
. For details refer to "(:CLSN00107:)" in "/u01/app/grid/product/11.2.0/grid/log/simplelinux/agent/ohasd/oraagent_grid/oraagent_grid.log".
CRS-2674: Start of 'ora.ora11g.db' on 'simplelinux' failed
2、分析和思考
一起冷靜想想~
Pfile和spfile是引數檔案經歷的兩個階段。在umount階段,Oracle是透過引數$ORACLE_HOME和$ORACLE_SID進行目錄定位,定位到$ORACLE_HOME/dbs或者$ORACLE_HOME/database,到裡面尋找制定規則的引數檔案。
Oracle首先會去尋找Spfile,之後才會去找Pfile。我們透過create spfile和create pfile可以實現兩者的轉化。
一個比較常見的問題案例是:如果我們把啟動引數改錯了,啟動不了了,那麼怎麼辦?標準的做法是透過create pfile from spfile,拿到一個文字格式的引數pfile。在裡面修改啟動引數,糾正錯誤。啟動時候,使用startup pfile=xxx使用“指定的pfile”啟動資料庫例項,再透過create spfile from pfile將變化固化下來。
Oracle Restart提供的配置引數spfile其實是很詭異的。從直觀上看,好像是有startup資料庫例項,後面可以自己去指定引數檔案,類似於startup spfile=xxx的作用。但是實際上,startup是不支援spfile這樣的引數的。
如果這個引數是用於指定,那麼在Restart啟動的時候我們已經設定爭取的spfile位置,指定位置上面也有檔案。但是根本沒有效果,Oracle還是尋找引數檔案。
那麼,就只有一種可能性:即使Oracle使用Restart啟動,也不是依靠指定的spfile,還是按照原有的規則執行。
網路上有一種方法,說的是如果我們需要指定一個spfile啟動檔案的時候,應該怎麼做。答案是建立一個空的pfile檔案,裡面直接指定SPFILE引數的檔案位置。
綜合幾種思路,我們可以設想到Spfile儲存在ASM裡面,同時讓Restart和sqlplus啟動時候可以訪問到ASM Spfile的方法。
3、配置ASM上SPFILE啟動
首先是建立出ASM上的spfile。注意:建立spfile的時候一定是從pfile建立,所以需要轉換一下。
SQL> startup pfile=/u01/app/oracle/product/11.2.0/db_1/dbs/initora11g.ora
ORACLE instance started.
Total System Global Area 263639040 bytes
Fixed Size 1344312 bytes
Variable Size 134221000 bytes
Database Buffers 125829120 bytes
Redo Buffers 2244608 bytes
Database mounted.
Database opened.
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> create spfile='+DATA/ORA11G/spfileora11g.ora' from pfile;
File created.
此時,我們在ASM裡面可以看到生成的spfile二進位制檔案。
ASMCMD> ls -l
Type Redund Striped Time Sys Name
Y CONTROLFILE/
Y DATAFILE/
Y ONLINELOG/
Y PARAMETERFILE/
Y TEMPFILE/
N spfileora11g.ora => +DATA/ORA11G/PARAMETERFILE/spfile.267.829130539
第二部是建立維護一個“轉發”引數檔案。
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
[oracle@SimpleLinux ~]$ cd $ORACLE_HOME
[oracle@SimpleLinux db_1]$ cd dbs
[oracle@SimpleLinux dbs]$ ls -l
total 28
-rw-rw---- 1 oracle asmadmin 1544 Sep 12 12:58 hc_ora11g.dat
-rw-r--r-- 1 oracle oinstall 2851 May 15 2009 init.ora
-rwxr-x--- 1 oracle oinstall 959 Oct 18 09:51 initora11g.ora
-rwxrwx--- 1 oracle oinstall 887 Sep 29 09:31 initora11g.ora.bk
-rw-r----- 1 oracle asmadmin 24 Sep 12 12:58 lkORA11G
-rw-r----- 1 oracle oinstall 1536 Sep 12 13:11 orapwora11g
-rw-r----- 1 oracle asmadmin 2560 Oct 18 09:57 spfileora11g.ora
在裡面要完成兩件事情,一個是將dbs目錄下面的spfile刪除。因為依據Oracle啟動的原則,是先找spfile,之後再找pfile。第二件是修改文字引數檔案,作為轉發。
[oracle@SimpleLinux dbs]$ mv spfileora11g.ora spfileora11g.ora.bk
[oracle@SimpleLinux dbs]$ cat initora11g.ora
SPFILE='+DATA/ora11g/spfileora11g.ora’ –注意:不能包括*字首或者SID字首
[oracle@SimpleLinux dbs]$ ls -l
total 28
-rw-rw---- 1 oracle asmadmin 1544 Sep 12 12:58 hc_ora11g.dat
-rw-r--r-- 1 oracle oinstall 2851 May 15 2009 init.ora
-rwxr-x--- 1 oracle oinstall 41 Oct 18 10:07 initora11g.ora
-rwxrwx--- 1 oracle oinstall 887 Sep 29 09:31 initora11g.ora.bk
-rw-r----- 1 oracle asmadmin 24 Sep 12 12:58 lkORA11G
-rw-r----- 1 oracle oinstall 1536 Sep 12 13:11 orapwora11g
-rw-r----- 1 oracle asmadmin 2560 Oct 18 09:57 spfileora11g.ora.bk
使用srvctl關閉和啟動資料庫。
[oracle@SimpleLinux dbs]$ srvctl start database -d ora11g
[oracle@SimpleLinux dbs]$ srvctl config database -d ora11g
Database unique name: ora11g
Database name:
Oracle home: /u01/app/oracle/product/11.2.0/db_1
Oracle user: oracle
Spfile: +DATA/ora11g/spfileora11g.ora
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Database instance: ora11g
Disk Groups: DATA,RECO
Services:
[oracle@SimpleLinux dbs]$ srvctl status database -d ora11g
Database is running.
資料庫中,spfile引數被設定為ASM路徑。
SQL> show parameter spfile;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string +DATA/ora11g/spfileora11g.ora
故障徹底解決。
4、結論
綜合上面的實驗,我們可以看到ASM下Spfile使用的方法。ASM下的Spfile並不是拋棄原有的啟動規則,而是藉助原有的pfile進行了目標轉接。之後筆者檢視MOS中的對應方案,官方推薦的也是這樣的做法。
這樣就需要一個前提,就是dbs或者database目錄中不能包括spfile。如果包括了,Oracle設定的轉接機制就被替換掉了。
另一個問題是我們一直看到的錯誤提示資訊,提示引數檔案initora11g.ora格式不能識別。筆者的理解是,原始的檔案是筆者使用create pfile from spfile建立出來的,預設的SPFILE=XXX的內容被覆蓋。而Oracle Restart不能識別這種非轉接內容檔案,所以報錯。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9034054/viewspace-1976661/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Restart啟動資料庫例項故障一例OracleREST資料庫
- Oracle ASM儲存Spfile解析OracleASM
- windows 下 asm儲存啟動故障WindowsASM
- Oracle資料庫例項啟動步驟分析Oracle資料庫
- Oracle 資料庫例項啟動關閉過程Oracle資料庫
- oracle dataguard資料同步故障處理一例Oracle
- Oracle單例項+ASM啟動與關閉Oracle單例ASM
- 由AIX系統故障導致系統重啟,使Oracle資料庫自動啟動例項AIOracle資料庫
- 又一例SPFILE設定錯誤導致資料庫無法啟動資料庫
- Window下安裝Oracle ASM單例項資料庫OracleASM單例資料庫
- 4.1.3 使用 Oracle Restart 元件啟停資料庫OracleREST元件資料庫
- Oracle例項和Oracle資料庫Oracle資料庫
- oracle資料庫與oracle例項Oracle資料庫
- oracle 資料庫例項Oracle資料庫
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-關於資料庫儲存結構Oracle資料庫
- 【02】Oracle資料庫的例項啟動關閉詳解Oracle資料庫
- 通過SQL*Plus遠端啟動Oracle資料庫例項SQLOracle資料庫
- oracle 11.2.0.3 rac資料庫線上新增ASM儲存空間Oracle資料庫ASM
- oracle asm 儲存限制OracleASM
- 建立ASM例項及ASM資料庫ASM資料庫
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-執行常見的資料庫儲存任務Oracle資料庫
- 一次儲存故障引起的資料庫啟動錯誤資料庫
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-關於其它儲存結構Oracle資料庫
- 基於asm的單例項資料庫啟動時報錯ORA-15032 ORA-15063一例ASM單例資料庫
- Oracle ASM spfile in a disk groupOracleASM
- 使用自動儲存管理 (ASM)建立資料庫ASM資料庫
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-管理還原資料Oracle資料庫
- oracle資料庫例項狀態Oracle資料庫
- ASM之建立ASM例項及ASM資料庫ASM資料庫
- oracle資料庫連線後,hang機一例Oracle資料庫
- ORACLE 11gR2 單例項資料庫自啟Oracle單例資料庫
- 【資料庫資料恢復】ASM例項不能掛載的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- 驗證11gR2 RAC中ASM例項通過gpnp profile獲得spfile資訊來啟動ASM例項ASM
- oracle 11gR2 asm例項 不能啟動處理方法OracleASM
- oracle 收集asm例項資訊OracleASM
- 2 Day DBA-管理Oracle例項-管理資料庫儲存結構-關於資料檔案Oracle資料庫
- Oracle例項和Oracle資料庫(Oracle體系結構)Oracle資料庫
- 建立ASM例項和資料庫ASM資料庫