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是否存在,如果存在,则删除。