SPFILE 錯誤導致資料庫無法啟動(ORA-01565)

beatony發表於2011-07-29
SPFILE 錯誤導致資料庫無法啟動(ORA-01565)
分類: Oracle 故障處理 1098人閱讀 評論(2) 舉報

--==========================================

--SPFILE 錯誤導致資料庫無法啟動(ORA-01565)

--==========================================

 

SPFILE錯誤導致資料庫無法啟動

    SQL> startup

    ORA-01078: failure in processing system parameters

    ORA-01565: error in identifying file '/u01/app/oracle/10g/dbs/spfileorcl.ora'

    ORA-27046: file size is not a multiple of logical block size

    Additional information: 1

   

分析:

    從錯誤的提示來看,第一行說系統引數出錯

    第二行詳細指出了spfileorcl.ora出現了錯誤

    再看第三行,google了一下ORA-27046,原來是spfileorcl.ora檔案被損壞,導致spfile檔案不可讀

    spfile檔案損壞的時候,如果嘗試使用create pfile from spfile,也將收到同樣的錯誤

    由於告警日誌alert_orcl.log之前被清空,故此時未能看到更詳細的錯誤提示

 

解決辦法:

    由於spfile為二進位制檔案,因此修復比較困難,所以考慮從備份的spfile中恢復

    1.spfile備份是否存在,如存在則恢復到原始位置,如放在預設位置,則為$ORACLE_HOME/dbs,Windows平臺為%ORACLE_HOME%/database

    2.spfile備份檔案不存在,也可以從pfile啟動,啟動時指定pfile引數

    3.spfile備份檔案不存在,pfile也不存在,則從告警日誌alert_orcl.log中最後一次正常啟動中使用strings命令提取相關引數來手動創

        pfile,然後從pfile啟動,啟動時指定pfile引數。

        注意從告警日誌中複製過來的內容有些需要加單引號,一是所有的路徑需要使用單引號括起來,其次是和db_name,db_domain等等

    4.spfile備份檔案不存在,pfile也不存在,也不願從告警日誌中手動建立pfile,則可以使用資料庫初始化時的pfile來啟動,預設位置為

        $ORALCE_BASE/admin/$ORACLE_SID/pfile

    5.也可以在SQLplus下直接使用create spfile from pfile = '

' 來先建立spfile檔案,再啟動Oracle

    6.注意

        從預設的pfile或資料庫初始化的pfile中來啟動資料庫後,有很多引數不一致,可能會導致一些功能不可用,需要調整

        建議定期備份引數檔案

    7.更多有關引數檔案的詳細描述,請參閱:Oracle

 

解決示例

    --本示例直接資料庫了初始化資料庫時的pfile來啟動資料庫

    --啟動後收到了有關控制檔案的錯誤提示

    SQL> startup pfile='/u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348'

    ORACLE instance started.

 

    Total System Global Area  251658240 bytes

    Fixed Size                  1218796 bytes

    Variable Size              83887892 bytes

    Database Buffers          163577856 bytes

    Redo Buffers                2973696 bytes

    ORA-00205: error in identifying control file, check alert log for more info

   

    --從告警日誌中檢視控制檔案的資訊,告警日誌提示control03.ctl不存在

    SQL> ho tail -n 100 /u01/app/oracle/admin/orcl/bdump/alert_orcl.log

    Thu Jul 29 16:52:44 2010

    ALTER DATABASE   MOUNT

    Thu Jul 29 16:52:44 2010

    ORA-00202: control file: '/u01/app/oracle/oradata/orcl/control03.ctl'

    ORA-27037: unable to obtain file status

    Linux Error: 2: No such file or directory

 

    --檢視控制檔案相關的引數資訊中定義了control03.ctl

    SQL> show parameter control_

 

    NAME                                 TYPE        VALUE

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

    control_file_record_keep_time        integer     7

    control_files                        string      /u01/app/oracle/oradata/orcl/c

                                                     ontrol01.ctl, /u01/app/oracle/

                                                     oradata/orcl/control02.ctl, /u

                                                     01/app/oracle/oradata/orcl/con

                                                     trol03.ctl

 

    SQL> ho ls /u01/app/oracle/oradata/orcl/control03.ctl   --檢視control03.ctl物理檔案不存在

    ls: /u01/app/oracle/oradata/orcl/control03.ctl: No such file or directory

                                                     

    --修改pfile檔案

    SQL> ho vim /u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348

 

       --刪除這段,/u01/app/oracle/oradata/orcl/control03.ctl   內容

 

    --從修改後的pfile檔案啟動

    SQL> startup pfile='/u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348'

    Total System Global Area  251658240 bytes

    Fixed Size                  1218796 bytes

    Variable Size              83887892 bytes

    Database Buffers          163577856 bytes

    Redo Buffers                2973696 bytes

    Database mounted.

    Database opened.

 

    SQL> ho ls /u01/app/oracle/10g/dbs/

    alert_orcl.log  core_5372    init.ora    initorcl.ora  orapworcl

    core_5360       hc_orcl.dat  initdw.ora  lkORCL       

 

    --pfile檔案中建立spfile

    SQL> create spfile from pfile = '/u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348';

 

    File created.

 

    --檢視spfileorcl.ora已生成

    SQL> ho ls /u01/app/oracle/10g/dbs/

    alert_orcl.log  hc_orcl.dat  initorcl.ora  spfileorcl.ora

    core_5360       init.ora     lkORCL      

    core_5372       initdw.ora   orapworcl

 

    SQL> shutdown immediate;

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

 

    SQL> startup   --spfile 啟動

    ORACLE instance started.

 

    Total System Global Area  251658240 bytes

    Fixed Size                  1218796 bytes

    Variable Size              83887892 bytes

    Database Buffers          163577856 bytes

    Redo Buffers                2973696 bytes

    Database mounted.

    Database opened.

 

    實際上可以先create spfile from pfile = '

', 再從spfile啟動,使用alter system 修改相關的引數比直接修改pfile似乎

    更簡單些,比如上面的例子中需要去掉一個控制檔案。當然此類問題是仁者見仁,智者見者。

    總之一條,定期備份引數檔案是相當有必要的!

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

相關文章