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上的。
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/30496894/viewspace-1825214/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Restart啟動資料庫例項故障一例( Oracle ASM儲存Spfile解析)OracleREST資料庫ASM
- oracle asm 儲存限制OracleASM
- Oracle ASM spfile in a disk groupOracleASM
- Oracle OCP(42):ASM 儲存結構簡介OracleASM
- oracle自動儲存管理(ASM)的優點OracleASM
- oracle10gR1 asm儲存簡單示例OracleASM
- Oracle 在asm前使用udev繫結共享儲存OracleASMdev
- ASM下遷移spfileASM
- ASM Spfile Is Not Used when ASM Instance StartsASM
- asm 儲存線上遷移ASM
- oracle asm自動儲存使用及管理說明(下)OracleASM
- oracle asm自動儲存使用及管理說明(上)OracleASM
- 安裝oracle 11g 使用ASM儲存 詳細OracleASM
- 利用KFED工具從儲存中讀出spfile資訊
- 將FileSystem轉換為ASM儲存ASM
- windows 下 asm儲存啟動故障WindowsASM
- oracle 11.2.0.3 rac資料庫線上新增ASM儲存空間Oracle資料庫ASM
- oracle 11.2.0.3 單機 asm 儲存打psu 10補丁OracleASM
- 【ASM】ASM啟動無法找到spfile問題原因ASM
- MySQL Innodb 儲存結構 & 儲存Null值 解析MySqlNull
- VMWARE+RHEL3+ORACLE10g+ 自動儲存管理 (ASM) 筆記OracleASM筆記
- 【ASM】自動儲存管理的新特性ASM
- Oracle Spfile and pfileOracle
- ASM 翻譯系列第三十五彈:ASM 253號檔案——ASM spfileASM
- 遷移ocr/votedisk/asm spfile所在磁碟組ASM
- ASM儲存使用RMAN複製控制檔案ASM
- 自動儲存管理ASM日常維護(一)ASM
- mysql儲存過程案例解析MySql儲存過程
- 解析分級儲存管理(HSM)
- VSAN儲存結構解析+儲存資料恢復案例資料恢復
- Oracle儲存過程Oracle儲存過程
- Oracle 儲存型別Oracle型別
- oracle儲存研究方法Oracle
- Oracle儲存單位Oracle
- Oracle11g RAC+ASM安裝前儲存規劃注意事項OracleASM
- 【Oracle】-【show_space和show_space_asm】-執行儲存過程報錯OracleASM儲存過程
- 使用自動儲存管理 (ASM)建立資料庫ASM資料庫
- 在ASM下建立spfile 出現DB_UNKOWNASM