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.