本文主要是介绍ora-01102问题的解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
ora-01102问题的解决
2012年10月5号周五,某网友测试数据库不能正式打开,提示ora-01102错误
SQL> startup
ORACLE instance started.
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
Fixed Size
Variable Size
Database Buffers
Redo Buffers
ORA-01102: cannot mount database in EXCLUSIVE mode
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> exit
经检查发现用于锁内存的文件lk文件没有被删除,删除后,数据库成功open。
另:
出现1102错误可能有以下几种可能:
一、在HA系统中,已经有 其他 节点启动了实例,将双机共享的资源(如磁盘阵列上的裸设备)占用了;
二、说明Oracle被异常关闭时,有资源没有被释放,一般有以下几种可能,
1、 Oracle的共享内存段或信号量没有被释放;
2、 Oracle的后台进程(如SMON、PMON、DBWn等)没有被关闭;
3、 用于锁内存的文件lk和sgadef.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
key
0x00000000 0
0x00000000 32769
0x00000000 65538
0x00000000 98307
0x00000000 131076
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
key
0x1466c384 98304
0x1466c385 131073
0x1466c386 163842
0xd0dccdb8 425987
0xebf842f8 950276
0xebf842f9 983045
0xebf842fa 1015814
根据信号量ID,用以下命令清除信号量:
$ipcrm -s 425987
如果是Oracle进程没有关闭,用以下命令查出存在的oracle进程:
ps -ef|grep ora
然后 kill -9
然后 kill -9
当发生1102错误时,可以按照以下流程检查、排错:
1.如果是HA系统,检查其他节点是否已经启动实例;
2.检查Oracle进程是否存在,如果存在则杀掉进程;
3.检查信号量是否存在,如果存在,则清除信号量;
4.检查共享内存段是否存在,如果存在,则清除共享内存段;
5.检查锁内存文件lk和sgadef.dbf是否存在,如果存在,则删除。
2.检查Oracle进程是否存在,如果存在则杀掉进程;
3.检查信号量是否存在,如果存在,则清除信号量;
4.检查共享内存段是否存在,如果存在,则清除共享内存段;
5.检查锁内存文件lk和sgadef.dbf是否存在,如果存在,则删除。
这篇关于ora-01102问题的解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!