關于RAC下spfile淺析_整理于_2014.4.17 第一篇:RAC下SPFILE文件修改 在RAC下spfile位置的修改與單節點環境不完全一致,有些地方需要特別注意,否則可能修改會失敗。 下面用一個例子說明:SPFILE放在ASM中一個不正確的目錄(+ARCH)中,現在想把它放在另外一個
在RAC下spfile位置的修改與單節點環境不完全一致,有些地方需要特別注意,否則可能修改會失敗。
下面用一個例子說明:SPFILE放在ASM中一個不正確的目錄(+ARCH)中,現在想把它放在另外一個目錄(+DBSYS)下。
以下是具體步驟:
SQL> show parameter spfile
NAME TYPE VALUE
----------------------------------------------- ------------------------------
spfile string +ARCH/dwrac/spfiledwrac.ora
由于在ASM中,不能直接cp,需要通過迂回的辦法實現。
sys@dwrac2> create pfile='/tmp/pfile.ora'from spfile;
File created.
sys@dwrac2> createspfile='+DBSYS/dwrac/spfiledwrac.ora' from pfile='/tmp/pfile.ora';
File created.
[oracle@dwdb04 dbs]$ vi initdwrac2.ora
SPFILE='+ARCH/dwrac/spfiledwrac.ora'
==>
SPFILE='+DBSYS/dwrac/spfiledwrac.ora'
sys@dwrac2> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
sys@dwrac2> startup
ORACLE instance started.
Total System Global Area 5.2429E+10 bytes
Fixed Size 2193872 bytes
Variable Size 3707766320 bytes
Database Buffers 4.8671E+10 bytes
Redo Buffers 48136192 bytes
Database mounted.
Database opened.
sys@dwrac2> show parameter spfile
NAME TYPE VALUE
------------------------------------ -----------------------------------------
spfile string +DBSYS/dwrac/spfiledwrac.ora
可以發現,spfile已經修改成功。
[oracle@dwdb02 dbs]$ srvctl stop instance-d dwrac -i dwrac1,dwrac2,dwrac3,dwrac4
[oracle@dwdb02 dbs]$ srvctl start instance-d dwrac -i dwrac1,dwrac2,dwrac3,dwrac4
[oracle@dwdb02 dbs]$ sqlplus "/assysdba"
sys@dwrac2> show parameter spfile
NAME TYPE VALUE
----------------------------------------------- ------------------------------
spfile string +ARCH/dwrac/spfiledwrac.ora
這是為什么呢?實際上在RAC環境中,我們更多時候是用srvctl來管理RAC資源,而srvctl的信息來自ocr,包括spfile的位置信息。我們剛才那樣做雖然修改了參數文件的位置,但是ocr并不知道,它還用原來的文件啟動數據庫。
我們可以用srvctl查看數據庫的配置信息來確認:
[oracle@dwdb01 dbs]$ srvctl config database-d dwrac -a
dwdb01 dwrac1 /oracle/product/10.2.0/db
dwdb02 dwrac2 /oracle/product/10.2.0/db
dwdb03 dwrac3 /oracle/product/10.2.0/db
dwdb04 dwrac4 /oracle/product/10.2.0/db
DB_UNIQUE_NAME: dwrac
DB_NAME: dwrac
ORACLE_HOME: /oracle/product/10.2.0/db
SPFILE: +ARCH/dwrac/spfiledwrac.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED
可以看到,SPFILE的位置指向是+ARCH。解決方法是通過srvctl修改SPFILE的位置。
[oracle@dwdb01 dbs]$ srvctl modify database-d dwrac -p '+DBSYS/dwrac/spfiledwrac.ora'
[oracle@dwdb01 dbs]$ srvctl config database-d dwrac -a
dwdb01 dwrac1 /oracle/product/10.2.0/db
dwdb02 dwrac2 /oracle/product/10.2.0/db
dwdb03 dwrac3 /oracle/product/10.2.0/db
dwdb04 dwrac4 /oracle/product/10.2.0/db
DB_UNIQUE_NAME: dwrac
DB_NAME: dwrac
ORACLE_HOME: /oracle/product/10.2.0/db
SPFILE: +DBSYS/dwrac/spfiledwrac.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED
[oracle@dwdb01 dbs]$ srvctl stop database-d dwrac
[oracle@dwdb01 dbs]$ srvctl start database-d dwrac
sys@dwrac2> show parameter spfile
NAME TYPE VALUE
----------------------------------------------- ------------------------------
spfile string +DBSYS/dwrac/spfiledwrac.ora
可以看到,此時Oracle是用新的spfile啟動的。
在RAC環境下修改spfile:
1. 需要修改$ORACLE_HOME/dbs下的相關文件,指向新文件
2. 需要用srvctl修改config信息,指向新文件
以下來自論壇:
在之前的文章《Oracle Restart啟動數據庫實例故障一例》(http://space.itpub.net/17203031/viewspace-774622)中,筆者解決了一個由于使用create pfilefrom spfile引起的Restart無法啟動數據庫實例的故障。
嚴格的說,筆者并沒有完全將其解決。主要體現在Spfile的使用和存放上。
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" encounteredthe 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
一起冷靜想想~
Pfile和spfile是參數文件經歷的兩個階段。在umount階段,Oracle是通過參數$ORACLE_HOME和$ORACLE_SID進行目錄定位,定位到$ORACLE_HOME/dbs或者$ORACLE_HOME/database,到里面尋找制定規則的參數文件。
Oracle首先會去尋找Spfile,之后才會去找Pfile。我們通過create spfile和create pfile可以實現兩者的轉化。
一個比較常見的問題案例是:如果我們把啟動參數改錯了,啟動不了了,那么怎么辦?標準的做法是通過create pfilefrom spfile,拿到一個文本格式的參數pfile。在里面修改啟動參數,糾正錯誤。啟動時候,使用startuppfile=xxx使用“指定的pfile”啟動數據庫實例,再通過create spfile from pfile將變化固化下來。
Oracle Restart提供的配置參數spfile其實是很詭異的。從直觀上看,好像是有startup數據庫實例,后面可以自己去指定參數文件,類似于startupspfile=xxx的作用。但是實際上,startup是不支持spfile這樣的參數的。
如果這個參數是用于指定,那么在Restart啟動的時候我們已經設置爭取的spfile位置,指定位置上面也有文件。但是根本沒有效果,Oracle還是尋找參數文件。
那么,就只有一種可能性:即使Oracle使用Restart啟動,也不是依靠指定的spfile,還是按照原有的規則運行。
網絡上有一種方法,說的是如果我們需要指定一個spfile啟動文件的時候,應該怎么做。答案是建立一個空的pfile文件,里面直接指定SPFILE參數的文件位置。
綜合幾種思路,我們可以設想到Spfile保存在ASM里面,同時讓Restart和sqlplus啟動時候可以訪問到ASMSpfile的方法。
首先是創建出ASM上的spfile。注意:創建spfile的時候一定是從pfile創建,所以需要轉換一下。
SQL> startuppfile=/u01/app/oracle/product/11.2.0/db_1/dbs/initora11g.ora
ORACLE instance started.
Total System Global Area 263639040bytes
Fixed Size 1344312bytes
Variable Size 134221000bytes
Database Buffers 125829120bytes
Redo Buffers 2244608bytes
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 887Sep 29 09:31 initora11g.ora.bk
-rw-r----- 1 oracle asmadmin 24Sep 12 12:58 lkORA11G
-rw-r----- 1 oracle oinstall 1536 Sep 12 13:11 orapwora11g
-rw-r----- 1 oracle asmadmin 2560 Oct 18 09:57spfileora11g.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 41Oct 18 10:07 initora11g.ora
-rwxrwx--- 1 oracle oinstall 887Sep 29 09:31 initora11g.ora.bk
-rw-r----- 1 oracle asmadmin 24Sep 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
故障徹底解決。
綜合上面的實驗,我們可以看到ASM下Spfile使用的方法。ASM下的Spfile并不是拋棄原有的啟動規則,而是借助原有的pfile進行了目標轉接。之后筆者查看MOS中的對應方案,官方推薦的也是這樣的做法。
這樣就需要一個前提,就是dbs或者database目錄中不能包括spfile。如果包括了,Oracle設置的轉接機制就被替換掉了。
另一個問題是我們一直看到的錯誤提示信息,提示參數文件initora11g.ora格式不能識別。筆者的理解是,原始的文件是筆者使用create pfilefrom spfile創建出來的,默認的SPFILE=XXX的內容被覆蓋。而Oracle Restart不能識別這種非轉接內容文件,所以報錯。
Oracle Restart是11gR2中推出的重要高可用(HighAvailability)特性。在Single Instance情況下,Clusterware形成一個可用性維護框架,Oracle組件服務都是在這個維護管理框架上進行管理。
Oracle Restart從職責上負責兩方面的功能,一個是Oracle各個服務組件的自動啟動。鑒于組件間復雜的依賴關系,使用Restart自動的進行啟動順序調節是比較好的一種策略。另一個功能是高可用支持,如果某一個組件意外被終止運行,比如異常中斷,Oracle Restart是可以定期的檢查“治下”組件的生存情況,一旦檢查出問題就會進行自動的啟動。
目前單實例Oracle使用Oracle Restart支持的組件內容有:監聽器Listener、Oracle實例和數據庫、ASM實例、ASM磁盤組、數據庫服務Service和ONS(OracleNotification Service)。
本篇記錄筆者遇到的一個故障場景,不甚復雜,和行業大牛們大作不敢相比。權當思路記錄,留待需要的朋友不時之需。
在一臺11gR2的Oracle上,筆者部署了單實例ASM實例和磁盤組結構,并且在上面部署了SingleInstance Oracle。由于是測試使用,筆者在上面進行過一些測試和實驗,今天啟動服務器之后,發現問題。
grid@SimpleLinux simplelinux]$ uptime
13:58:13 up 2:24, 1 user, load average: 0.03, 0.02, 0.00
[grid@SimpleLinux simplelinux]$ ps -ef |grep pmon
grid 3212 1 0 11:35 ? 00:00:01 asm_pmon_+ASM
grid 27724 27685 0 13:58 pts/0 00:00:00 grep pmon
根據標準的Oracle Restart配置,ASM實例、ASM磁盤組和數據庫實例都是在Restart管理范圍,應該是隨著服務器啟動而自動啟動。但是從實際情況看,ASM實例已經自動啟動,數據庫實例沒有啟動。
同RAC結構一樣,Restart也是借助服務器啟動過程中,以ohasd為首的高可用守護進程進行步步啟動動作。
這種情況下,查看日志信息是最好的選擇,看看那個環節出現問題。
[grid@SimpleLinux simplelinux]$ pwd
/u01/app/grid/product/11.2.0/grid/log/simplelinux
[grid@SimpleLinux simplelinux]$ ls -l |grep alert
-rw-rw---- 1 grid oinstall 14494Oct 17 11:35 alertsimplelinux.log
對grid和clusterware的日志,都是保留在$ORACLE_HOME/log下的目錄從中。Alert
[ohasd(2744)]CRS-2767:Resource staterecovery not attempted for 'ora.diskmon' as its target state is OFFLINE
2013-10-17 11:35:34.373
[cssd(3130)]CRS-1601:CSSD Reconfigurationcomplete. Active nodes are simplelinux .
2013-10-17 11:35:50.094
[/u01/app/grid/product/11.2.0/grid/bin/oraagent.bin(3072)]CRS-5010:Updateof 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"
2013-10-17 11:35:55.645
[/u01/app/grid/product/11.2.0/grid/bin/oraagent.bin(3072)]CRS-5010:Updateof 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"
2013-10-17 11:35:55.806
[ohasd(2744)]CRS-2807:Resource'ora.ora11g.db' failed to start automatically.
我們定位到了問題片段,從上面標紅的內容看。Clusterware在啟動dismon服務之后,試圖啟動數據庫,也就是ora.ora11g.db。在訪問一個參數文件(注意是pfile)過程中,發現問題。
進一步檢查指出的oraagent_grid.log日志,也沒有過多的信息提示。
2013-10-17 11:35:50.049:[ora.ora11g.db][3013430160] {0:0:2} [start] sclsnInstAgent::sUpdateOratab fileupdated with dbName ora11g value /u01/app/oracle/product/11.2.0/db_1:N
2013-10-17 11:35:50.049:[ora.ora11g.db][3013430160] {0:0:2} [start] sclsnInstAgent::sUpdateOratab CSSunlock
2013-10-17 11:35:50.090:[ora.ora11g.db][3013430160] {0:0:2} [start] (:CLSN00014:)Failed to open file/u01/app/oracle/product/11.2.0/db_1/dbs/initora11g.ora
2013-10-17 11:35:50.091: [ AGENT][3013430160] {0:0:2}UserErrorException: Locale is
2013-10-17 11:35:50.091:[ora.ora11g.db][3013430160] {0:0:2} [start] clsnUtils::error Exception type=2string=
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"
從信息上看,是對pfile沒有能夠打開。
從日志信息上,看到是不能夠打開文本參數控制文件。初步猜測是文件權限原因,下面進行檢查。
[grid@SimpleLinux oraagent_grid]$ cd/u01/app/oracle/product/11.2.0/db_1/dbs/
[grid@SimpleLinux dbs]$ ls -l
total 20
-rw-rw---- 1 oracle asmadmin 1544 Sep 1212:58 hc_ora11g.dat
-rw-r--r-- 1 oracle oinstall 2851 May15 2009 init.ora
-rw-r----- 1 oracle oinstall 887 Sep 29 09:31 initora11g.ora
-rw-r----- 1 oracle asmadmin 24 Sep 12 12:58 lkORA11G
-rw-r----- 1 oracle oinstall 1536 Sep 1213:11 orapwora11g
[grid@SimpleLinux dbs]$ id oracle
uid=500(oracle) gid=500(oinstall)groups=500(oinstall),501(dba),502(oper),602(asmdba)
[grid@SimpleLinux dbs]$ id grid
uid=501(grid) gid=500(oinstall)groups=500(oinstall),501(dba),600(asmadmin),601(asmoper),602(asmdba)
權限內容是oracle用戶讀寫、組用戶讀。從權限上看,grid和oracle讀取和修改的問題不算特別嚴重。但是還是進行測試嘗試。
[oracle@SimpleLinux dbs]$ chmod 770initora11g.ora
[oracle@SimpleLinux dbs]$ ls -l
total 20
-rw-rw---- 1 oracle asmadmin 1544 Sep 1212:58 hc_ora11g.dat
-rw-r--r-- 1 oracle oinstall 2851 May15 2009 init.ora
-rwxrwx--- 1 oracle oinstall 887 Sep 29 09:31 initora11g.ora
-rw-r----- 1 oracle asmadmin 24 Sep 12 12:58 lkORA11G
-rw-r----- 1 oracle oinstall 1536 Sep 1213:11 orapwora11g
嘗試啟動數據庫。
[grid@SimpleLinux ~]$ srvctl start database-d ora11g
PRCR-1079 : Failed to startresource ora.ora11g.db
CRS-5010: Update of configurationfile "/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 configurationfile "/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
啟動失敗。那么,試著使用傳統sqlplus命令行方式啟動是否可行?
[oracle@SimpleLinux ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.3.0 Production onThu Oct 17 14:17:11 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup
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> quit
Disconnected from Oracle Database 11gEnterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, Automatic StorageManagement, OLAP, Data Mining
and Real Application Testing options
[oracle@SimpleLinux ~]$ ps -ef | grep pmon
grid 3212 1 0 11:35 ? 00:00:02 asm_pmon_+ASM
oracle 27979 1 0 14:17 ? 00:00:00 ora_pmon_ora11g
oracle 28106 27921 0 14:17 pts/0 00:00:00 grep pmon
[oracle@SimpleLinux ~]$ srvctl statusdatabase -d ora11g
Database is running.
啟動成功,使用sqlplus命令行可以啟動,但是Oracle Restart啟動就會失敗。那么問題在哪兒?
從直觀上看,Oracle Restart啟動的時候是希望訪問到參數文件pfile。從直觀的感覺上,好像被替代很長時間的pfile為什么會被提及。利用已經啟動的數據庫實例,看一下當前使用的是什么參數文件。
SQL> show parameter spfile
NAME TYPE VALUE
----------------------------------------------- ------------------------------
spfile string
SQL>
當前啟動是利用pfile啟動的,剛剛我們對$ORACLE_HOME/dbs的檢索也沒有看到spfile文件。Oracle啟動過程中,是默認先根據環境變量“拼湊”的路徑查找spfile,之后才是pfile。系統spfile參數為空,說明當前使用的是pfile。
但是,對應到Oracle Restart里面的啟動信息,似乎有些差別。
[grid@SimpleLinux ~]$ srvctl configdatabase -d ora11g
Database unique name: ora11g
Database name: ora11g
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:
明顯出現不同。這個時候,筆者想起之前進行過實驗,在ASM環境下進行spfile和pfile的生成操作。懷疑是這個過程中,存在Restart和實例信息的不匹配。
想出了第二種修復策略。
SQL> create spfile from pfile;
File created.
SQL> startup force
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 /u01/app/oracle/product/11.2.0
/db_1/dbs/spfileora11g.ora
設置恢復現有的spfile作為啟動參數文件。試圖讓Restart和實例信息一致。
[oracle@SimpleLinux ~]$ srvctl modifydatabase -d ora11g-p /u01/app/oracle/product/11.2.0/db_1/dbs/spfileora11g.ora
[oracle@SimpleLinux ~]$ srvctl configdatabase -d ora11g
Database unique name: ora11g
Database name: ora11g
Oracle home:/u01/app/oracle/product/11.2.0/db_1
Oracle user: oracle
Spfile: /u01/app/oracle/product/11.2.0/db_1/dbs/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 tmp]$ srvctl startdatabase -d ora11g
PRCR-1079 : Failed to start resourceora.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
第二次修復嘗試以失敗告終,Oracle Restart依然尋找那個pfile。但是筆者獲得了方向,就是系統問題在于Restart中對數據庫啟動參數文件的不一致。
Oracle Restart是一個很復雜的體系,在沒有經驗和資料的情況下,筆者也不能證明說是Oracle Bug之類的。
一種思路可以進行嘗試。對于Oracle Restart,各種組件都是在上面可插拔的。根據需要,我們可以進行動態的配置注冊過程。從之前的情況看,數據庫本身是沒有問題的,應該就是配置過程中的故障。那么,modify配置是有問題的。可不可以將database ora11g剔除出Restart體系,之后再添加過來。
Srvctl的add和remove命令可以幫助我們實現功能。而且在add過程中,只有-o參數是強制的,輸入ORACLE_HOME目錄。
[oracle@SimpleLinux dbs]$ srvctl removedatabase -d ora11g
Remove the database ora11g? (y/[n]) y
[oracle@SimpleLinux dbs]$ srvctl add database -d ora11g -o/u01/app/oracle/product/11.2.0/db_1
[oracle@SimpleLinux dbs]$ srvctl configdatabase -d ora11g
Database unique name: ora11g
Database name:
Oracle home: /u01/app/oracle/product/11.2.0/db_1
Oracle user: oracle
Spfile:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Database instance: ora11g
Disk Groups:
Services:
Spfile為空。試著重新啟動。
[oracle@SimpleLinux dbs]$ srvctl start database -d ora11g
[oracle@SimpleLinux dbs]$ ps -ef | greppmon
grid 3215 1 0 14:47 ? 00:00:00 asm_pmon_+ASM
oracle 5265 1 0 15:22 ? 00:00:00 ora_pmon_ora11g
oracle 5386 3578 0 15:22 pts/0 00:00:00 grep pmon
[oracle@SimpleLinux dbs]$ srvctl configdatabase -d ora11g
Database unique name: ora11g
Database name:
Oracle home:/u01/app/oracle/product/11.2.0/db_1
Oracle user: oracle
Spfile:
Domain:
Start options: open
Stop options: immediate
Database role: PRIMARY
Management policy: AUTOMATIC
Database instance: ora11g
Disk Groups: DATA,RECO
Services:
啟動成功!最后嘗試看看reboot系統時,能否自動啟動。
--重新啟動系統
[root@SimpleLinux simplelinux]# ps -ef | grep pmon
grid 3213 1 015:27 ? 00:00:00 asm_pmon_+ASM
oracle 3270 1 015:27 ? 00:00:00 ora_pmon_ora11g
root 3336 3042 015:27 pts/0 00:00:00 grep pmon
[grid@SimpleLinux ~]$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 17-OCT-2013 15:32:07
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNRfor Linux: Version 11.2.0.3.0 - Production
Start Date 17-OCT-2013 15:27:06
Uptime 0 days 0hr. 5 min. 0 sec
Trace Level off
Security ON: LocalOS Authentication
SNMP OFF
Listener Parameter File /u01/app/grid/product/11.2.0/grid/network/admin/listener.ora
Listener Log File /u01/app/grid/diag/tnslsnr/SimpleLinux/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=SimpleLinux.localdomain)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
Instance "+ASM", statusREADY, has 1 handler(s) for this service...
Service "ora11g" has 1 instance(s).
Instance"ora11g", status READY, has 1 handler(s) for this service...
Service "ora11gXDB" has 1 instance(s).
Instance "ora11g",status READY, has 1 handler(s) for this service...
The command completed successfully
SQL> show parameter spfile
NAME TYPE VALUE
------------------------------------ -----------------------------------------
spfile string /u01/app/oracle/product/11.2.0/db_1/dbs/spfileora11g.ora
問題解決。
從直觀的感覺看,這應該是Restart和原有命令協調的一個故障。原有create pfile之后,Restart似乎不能夠支持pfile的啟動了。另外,在修復過程中,我們始終看到不能對spfile修改參數生效,也是一個疑惑點。
能夠肯定的是,在添加數據庫ora11g的時候,沒有明確指定啟動spfile的位置,那么應該是進入了自動檢索目錄spfile-pfile的過程。所以系統得到修復。
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com