ora-01102问题的解决
server掉电关机,今早数据库不能正式打开,提示ora-01102错误
SQL> startup
ORACLE instance started.
Total System Global Area  252776884 bytes
Fixed Size                   450996 bytes
Variable Size             218103808 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
ORA-01102: cannot mount database in EXCLUSIVE mode
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> exit
经检查发现用于锁内存的文件lk<sid>文件没有被删除,删除后,数据库成功open。
另:
出现1102错误可能有以下几种可能:
一、在HA系统中,已经有其他节点启动了实例,将双机共享的资源(如磁盘阵列上的裸设备)占用了;
二、说明Oracle被异常关闭时,有资源没有被释放,一般有以下几种可能,
1、 Oracle的共享内存段或信号量没有被释放;
2、 Oracle的后台进程(如SMON、PMON、DBWn等)没有被关闭;
3、 用于锁内存的文件lk<sid>和sgadef<sid>.dbf文件没有被删除。
如果怀疑是共享内存没有被释放,可以用以下命令查看:
[oracle@ ~]$ ipcs - s
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status
0x00000000 0          oracle    640        4194304    17       
0x00000000 32769      oracle    640        33554432   17       
0x00000000 65538      oracle    640        33554432   17       
0x00000000 98307      oracle    640        33554432   17       
0x00000000 131076     oracle    640        33554432   17
0xd0dccdb8 425987     oracle10g 640        154   
然后它ID号清除共享内存段:
$ipcrm –m 425987
 对于信号量,可以用以下命令查看:
------ Semaphore Arrays --------
key        semid      owner      perms      nsems
0x1466c384 98304      oracle    640        162
0x1466c385 131073     oracle    640        162
0x1466c386 163842     oracle    640        162
0xd0dccdb8 425987     oracle10g 640        154
0xebf842f8 950276     oracle    640        162
0xebf842f9 983045     oracle    640        162
0xebf842fa 1015814    oracle    640        162
根据信号量ID,用以下命令清除信号量:
$ipcrm -s 425987
如果是Oracle进程没有关闭,用以下命令查出存在的oracle进程:
ps -ef|grep ora
然后 kill -9 <PID>
当发生1102错误时,可以按照以下流程检查、排错:
1.如果是HA系统,检查其他节点是否已经启动实例;
2.检查Oracle进程是否存在,如果存在则杀掉进程;
3.检查信号量是否存在,如果存在,则清除信号量;
4.检查共享内存段是否存在,如果存在,则清除共享内存段;
5.检查锁内存文件lk<sid>和sgadef<sid>.dbf是否存在,如果存在,则删除。