1.1 现象描述
启动Oracle失败,系统显示如下错误信息:
SQL> startup
ORA-32004: obsolete and/or deprecated parameter(s) specified
ORACLE instance started.
Total System Global Area 2137886720 bytes
Fixed Size 2122920 bytes
Variable Size 1191185240 bytes
Database Buffers 939524096 bytes
Redo Buffers 5054464 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode
1.2 可能原因
异常关闭Oracle时,存在以下几种没有释放资源的可能原因:
Oracle的后台进程(如SMON、PMON、LWGW、DBWn等)没有关闭。
用于锁内存的文件“lk”和“sgadef.dbf”没有删除。
Oracle的共享内存段或信号量没有释放。
1.3 定位思路
如果是HA系统,检查其他节点是否已经启动实例。
检查Oracle进程是否存在,如果存在则删除进程。
检查锁内存文件“lk”和“sgadef.dbf”是否存在,如果存在,则删除锁内存文件。
检查共享内存段是否存在,如果存在,则清除共享内存段。
检查信号量是否存在,如果存在,则清除信号量。
1.4 处理步骤
以oracle用户登录数据库所在机器。
检查数据库在备节点上的状态。
确定备节点的实例处于关闭状态。
检查Oracle进程是否启动。
% ps -ef | grep pmon
如果进程启动,则关闭。
% kill -9Oracle进程ID
以sysdba用户连接数据库。
% sqlplus / as sysdba
以abort模式退出数据库。
SQL> shutdown abort;
重新启动数据库。
SQL> startup
如果数据库启动成功,则结束操作。
如果数据库启动失败,则执行7。
退出SQLPLUS。
SQL> quit
检查锁内存文件“lk”和“sgadef.dbf”是否被删除。
a. 进入“$ORACLE_HOME/dbs”目录。
% cd $ORACLE_HOME/dbs
b. 检查“sgadef.dbf”是否存在。
% ls sgadef*
§ 如果“sgadef.dbf”文件不存在,系统提示如下信息:
sgadef* not found
§ 如果“sgadef.dbf”文件存在,则删除此文件。
% rm sgadef*
c. 检查“lk”是否存在。
% ls lk*
§ 如果“lk”不存在,系统提示如下信息:
lk* not found
§ 如果“lk ”文件存在,则删除此文件。
% rm lk*
d. 重新启动数据库。
SQL> startup mount;
说明:
§ 如果数据库启动成功,则结束操作。
§ 如果数据库启动失败,则执行以下操作。
以root用户登录数据库所在机器。
栓查共享内存段是否存在。如果存在,则删除。
. 查看共享内存段。
# ipcs -map
系统显示如下信息时,表示Oracle共享内存段存在。
------ Shared Memory Creator/Last-op --------
shmid owner cpid lpid
786444 root 6490 6438
819213 root 6549 6438
1409040 oracle 31502 16728
a. 根据ID号清除共享内存段。
# ipcrm –m 1409040
说明:
1409040是共享内存段ID,以系统实际查询值为准。
检查信号量是否存在。如果存在,则删除。
. 查看信号量。
# ipcs -s
系统显示如下信息时,表示Oracle信号量存在。
key semid owner perms nsems
0x17ff6454 360448 oracle 640 154
a. 清除oracle的信号量。
# ipcrm -s 360448
说明:
360448是信号量ID,以系统实际查询值为准。
b. 再次查询确认。
# ipcs -s
删除成功,系统显示如下信息:
------ Semaphore Arrays --------
key semid owner perms nsems
重新启动数据库。
SQL> startup
数据库启动成功,系统显示如下信息:
ORACLE instance started.
Total System Global Area 2137886720 bytes
Fixed Size 2122920 bytes
Variable Size 1191185240 bytes
Database Buffers 939524096 bytes
Redo Buffers 5054464 bytes
Database mounted.
Database opened.