因数据库磁盘存储空间不足,操作LVM分区意外导致服务器系统宕机,修复完成后启动oracle数据库,发现报错:
[oracle@rac05 ~]$ sqlplus / as sysdba;
SQL\*Plus: Release 11.2.0.3.0 Production on Fri Nov 11 17:17:49 2022
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
`SQL> startup;
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/11.2.0.3/dbs/initorcl1.ora'`
宕机数据库为集群中的第二台服务器。
排查思路
检查文件是否存在
在查看报错路径下的文件时,发现缺失initorcl1.ora文件。
[oracle@rac05 ~]$ cd /u01/app/oracle/11.2.0.3/dbs/
[oracle@rac05 dbs]$ ll
total 24
-rw-rw---- 1 oracle oinstall 1544 Nov 10 12:36 hc_orcl2.dat
-rw-r--r-- 1 oracle oinstall 2851 Dec 17 2015 init.ora
-rw-r----- 1 oracle oinstall 35 Dec 23 2015 initorcl2.ora
-rw-r----- 1 oracle oinstall 1536 Dec 23 2015 orapworcl2
查看参数
在第一台正常的服务器上查看信息。
[oracle@rac04 ~]$ sqlplus / as sysdba;
SQL> show parameter instance_name;
NAME TYPE VALUE
*** ** * ** ***
instance_name string orcl1
SQL\> show parameter pfile;
NAME TYPE VALUE
*** ** * ** ***
spfile string +DATA/orcl/spfileorcl.ora
SQL\> show parameter spfile;
NAME TYPE VALUE
*** ** * ** ***
`spfile string +DATA/orcl/spfileorcl.ora`
检查数据库SID
第一台集群服务器的SID
[oracle@rac04 ~]$ echo $ORACLE_SID
orcl1
参考其他项目数据库SID格式,确认第二台集群数据库的SID与第一台重复。
[oracle@rac05 ~]$ echo $ORACLE_SID
orcl1
解决办法
Oracle 默认会在 $ORACLE_HOME/dbs
目录中打开格式为 "spfile"+ $ORACLE_SID + ".ora"
的参数文件。如果找不到,它会尝试打开"init"+$ORACLE_SID+".ora"
。
由于已经发现第二台数据库的SID重复,因此只需修改第二台的SID配置。
查看启动参数文件
[oracle@rac05 dbs]$ cat initorcl2.ora
SPFILE='+DATA/orcl/spfileorcl.ora'
查看基本信息
[oracle@rac04 ~]$ sqlplus / as sysdba;
SQL\*Plus: Release 11.2.0.3.0 Production on Fri Nov 11 17:47:16 2022
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL\> show parameter instance_name;
NAME TYPE VALUE
*** ** * ** ***
instance_name string orcl1
SQL\> show parameter pfile;
NAME TYPE VALUE
*** ** * ** ***
spfile string +DATA/orcl/spfileorcl.ora
SQL\> show parameter spfile;
NAME TYPE VALUE
*** ** * ** ***
`spfile string +DATA/orcl/spfileorcl.ora`
修改SID
修改oracle用户
编辑oracle用户的.bash_profile
文件,修改ORACLE_SID
和ORACLE_UNQNAME
(如有)配置内容。
[oracle@rac05 ~]$ cat .bash_profile
# .bash_profile
Get the aliases and functions
=============================
if \[ -f \~/.bashrc \]; then
. \~/.bashrc
fi
User specific environment and startup programs
==============================================
PATH=$PATH:$HOME/bin
`export PATH
export ORACLE_SID=orcl2
export ORACLE_UNQNAME=orcl2
export ORACLE_BASE=/u01/app/oracle/
export ORACLE_HOME=/u01/app/oracle/11.2.0.3
export PATH=$ORACLE_HOME/bin:$PATH:$ORA_CRS_HOME/bin
export TEMP=/tmp
export TMPDIR=/tmp
export NLS_LANG=american_america.AL32UTF8
export NLS_DATE_FORMAT='yyyy-mm-dd hh24:mi:ss'
umask 022`
修改grid用户
编辑grid用户的.bash_profile
文件,修改ORACLE_SID
配置内容。
[grid@rac05 ~]$ cat .bash_profile
# .bash_profile
Get the aliases and functions
=============================
if \[ -f \~/.bashrc \]; then
. \~/.bashrc
fi
User specific environment and startup programs
==============================================
PATH=$PATH:$HOME/bin
`export PATH
export ORACLE_SID=+ASM2
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/11.2.0.3
export PATH=$ORACLE_HOME/bin:$PATH:/usr/local/bin/:.
export TEMP=/tmp
export TMP=/tmp
export TMPDIR=/tmp
umask 022
[grid@rac05 ~]$ echo $ORACLE_SID
+ASM2`
修改完成后Oracle数据库会自动启动,如未自动启动,则手动启动。