共計 7353 個字符,預計需要花費 19 分鐘才能閱讀完成。
這篇文章主要介紹了如何解決 oracle 啟動時的幾個小問題,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
oracle 在啟動時和啟動過程中經常會出現這樣那樣的錯誤,簡單記錄下碰到過的問題,方便備用。
1、啟庫先起監聽,發現監聽啟動失敗
一般常見是 /etc/hosts 里面配置的主機名稱對應 IP 和你的實際 IP 不符,改了就 OK 了。還要檢查 HOSTNAME 和 /etc/sysconfig/network 里的主機名,都改一致保險。對應的還可檢查下:listener 和 tnsnames 里面的 HOST 名或 IP,保持一致。有時只有把 listener 和 tnsnames 里面的 HOST 配成主機名,且 hosts 文件里的主機名對應 IP 正確才會啟動正常。2、手動修改 SPFILE 文件報錯
手動用 VI 命令修改 oracle 里面的 SPFILE***.ORA 文件,數據庫就起不來了,報錯 ORA-27046: file size is not a multiple of logical block size 。原因是動態服務器參數文件(SPFILE)是一個二進制文件,是不可以手工修改的,如果手工改了,該文件就成為了無效文件。可以通過以下方法解決:1、將 SPFILE 中的參數拷貝到 init***.ora 文件中
strings spfileCP05PV1DB.ora
查看到后拷貝到 init***.ora 中
(控制文件也可 strings)2、刪除 DATABASE 目錄下的 SPFILE***.ORA 文件。3、啟動數據庫 (現在應該可以成功啟動)4、SQL create spfile from pfile 生成 spfile(pfile 文件可自己編寫)使用 startup 命令啟動數據庫,,Oralce 將會按照以下順序在缺省目錄中 (9i,10i 在 oracle_home/database 目錄下)搜索參數文件:(1)spfile***.ora 文件 (2)如果沒有 spfile***.ora 文件就用 spfile.ora 文件(3) 如果沒有 spfile.ora 文件就用 init***.ora(4)如果沒有 init***.ora 文件就用 pfile.ora
所以上面我們采取的解決方法是將破壞的 spfile 中的參數復制到 init***.ora 中,然后刪除 spfile 文件,這樣啟動時就會用 init***.ora 文件啟動,然后用 create spfile from pfile 命令生成 spfile
注意如果要修改 spfile 中的參數,絕對不能手工修改 spfile 文件,要使用下面命令:alter system set parameter=Value scope=spfile|both|memory 例如:alter system set db_cache_size=24M scope=both; 來修改
3、路徑和名字問題
SQL startup
ORA-48108: invalid value given for the diagnostic_dest init.ora parameter
ORA-48140: the specified ADR Base directory does not exist [/home/oracle/102/dbs/ ORACLE_BASE]
ORA-48187: specified directory does not exist
Linux Error: 2: No such file or directory
Additional information: 1
查看 $ORACLE_HOME/dbs 下的 init 文件 (我的 SID 名為 oracleprod),即 initoracleprod.ora,發現該文件中的 ORACLE_BASE 沒有更改過來,當然啟動不了了,修改本文件里的所有 ORACLE_BASE 為絕對路徑。結合網上其他技術大拿的經驗,并刪除 diagnostic_dest 這行記錄。然后再啟動數據庫
SQL startup nomount
SQL alert database mount
此時出錯,ORA-00205: error in identifying control file, check alert log for more info
還是查看 $ORACLE_HOME/dbs/initoracleprod.ora 中的內容,發現 control_files = (ora_control1, ora_control2) 有問題,修改為 control_files = (/u01/oradata/orcl/control01.ctl , /u01/flash_recovery_area/orcl/control02.ctl)
注:上面的 control_files 以機器上實際路徑為準。然后再啟動 Oracle,即可以了。第二,在上面的過程中,還可能會碰到如 ORA-09925: Unable to create audit trail file 這樣的問題,均于 ORACLE_BASE 有關,修改之即可。另外,在解決上述問題過程中,還出現了像如下一樣的錯誤:SQL conn sys
SQL show parameter
SP2-0640: Not connected
SQL conn / as sysdba
ERROR:
ORA-09925: Message 9925 not found; product=RDBMS; facility=ORA
Linux-x86_64 Error: 30: Read-only file system
Additional information: 9925
ORA-01075: you are currently logged on
SQL
如果出現上面的問題,無法手動停止 Oracle,于是找到 pmon 進程,然后再 kill 之,即可關停 Oracle.
4、pfile 與 spfile 啟動問題
在一個節點啟動數據庫:SQL startup;
ORA-01506: missing or illegal database name
因前面是從 PFILE 啟動,再生成 SPFILE 的,可能是生成文件出錯。[root@rac2 dbs]# strings spfileracdb2.ora
*.SPFILE= +DATA/racdb/spfileracdb.ora
拷貝 RAC1 節點的 spfileracdb1.ora 為 spfileracdb2.ora
問題解決。還有一個現象就是路徑錯也會導致這個錯誤。比如 /u01/app/oracle/admin/CP05PV1DB 改錯了 /u01/app/oracle/admin/CP05MV1DB, 導致無法識別數據庫名
SQL startup mount
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file E:\oracle\product\10.2.0\db_1/dbs/spfileocl.ora
ORA-27046: file size is not a multiple of logical block size
OSD-04012: ??????????????
O/S-Error: (OS 3516) ?????????????? Windows ??????????
嘗試將 SPFILEORCL.ORA 的備份文件改名,啟動數據庫還是報同樣的錯誤,而不是以前的錯誤,有些不知所措 幸好是自己的本機 實在不行就重裝了,于是開始在 google 上繼續找答案。找了一會就找了的方法 真的要感謝互聯網。真是一個好東西。解決方法如下:C:\Documents and Settings\Administrator sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 2 月 18 23:42:25 2016
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL connect /as sysdba
已連接到空閑例程。SQL create spfile= E:\oracle\product\10.2.0\db_1\dbs\SPFILEORCL.ORA from pfil
= E:\oracle\product\10.2.0\admin\orcl\pfile\init.ora.132009183928
文件已創建。SQL startup
ORACLE 例程已經啟動。Total System Global Area 167772160 bytes
Fixed Size 1247900 bytes
Variable Size 62915940 bytes
Database Buffers 100663296 bytes
Redo Buffers 2945024 bytes
數據庫裝載完畢。數據庫已經打開。至此問題得到解決。6、另一例 spfile 問題
SQL create pfile from spfile;
create pfile from spfile*
ERROR at line 1:
ORA-01565: error in identifying file ?/dbs/spfile@.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 = dir 來先創建 spfile 文件,再啟動 Oracle
從缺省的 pfile 或數據庫初始化的 pfile 中來啟動數據庫后,有很多參數不一致,可能會導致一些功能不可用,需要調整
建議定期備份參數文件
7. 更多有關參數文件的詳細描述,請參閱:Oracle 參數文件
-- 本示例直接數據庫了初始化數據庫時的 pfile 來啟動數據庫
-- 啟動后收到了有關控制文件的錯誤提示
SQL startup pfile= /u01/app/oracle/admin/orcl/pfile/init.ora.2292010214348
ORACLE instance started.
Total System Global Area251658240 bytes
Fixed Size1218796 bytes
Variable Size83887892 bytes
Database Buffers163577856 bytes
Redo Buffers2973696 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 DATABASEMOUNT
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_
NAMETYPEVALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_timeinteger7
control_filesstring/u01/app/oracle/oradata/orcl/c
ontrol01.ctl, /u01/app/oracle/
oradata/orcl/control02.ctl, /u01/app/oracle/oradata/orcl/control03.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 Area251658240 bytes
Fixed Size1218796 bytes
Variable Size83887892 bytes
Database Buffers163577856 bytes
Redo Buffers2973696 bytes
Database mounted.
Database opened.
SQL ho ls /u01/app/oracle/10g/dbs/
alert_orcl.logcore_5372init.orainitorcl.oraorapworcl
core_5360hc_orcl.datinitdw.oralkORCL
-- 從 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.loghc_orcl.datinitorcl.oraspfileorcl.ora
core_5360init.oralkORCL
core_5372initdw.oraorapworcl
SQL shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL startup-- 從 spfile 啟動
ORACLE instance started.
Total System Global Area251658240 bytes
Fixed Size1218796 bytes
Variable Size83887892 bytes
Database Buffers163577856 bytes
Redo Buffers2973696 bytes
Database mounted.
Database opened.
實際上可以先 create spfile from pfile = dir , 再從 spfile 啟動,使用 alter system 修改相關的參數比直接修改 pfile 似乎
更簡單些,比如上面的例子中需要去掉一個控制文件。當然此類問題是仁者見仁,智者見者。總之一條,定期備份參數文件是相當有必要的!
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“如何解決 oracle 啟動時的幾個小問題”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!
正文完