oracle判定如何实例的是否运行
在启动ORACLE实例之前,必须定义ORACLE_SID。TOM关于ORACLE_SID的解释是oracle根据SID的hash来唯一决定一个实例的地址。当我们打开sqlplus /nolog 发布conn / as sysdba以后;net services(BEQ)根据SID进行hash,查找在共享内存中是否有相应的共享内存段(SHMID)存在,如果有则返回connected,否则返因connect to an idle instance;这个实例名是存放在SGA中的variablesize中。
于是通过oradebug ipc来得到variable所存放的SHM的SHMID号,再在OS下使用ipcrm -m SHMID删掉这一段共享内存.
由于已连上去的SQLPLUS会话已经验证过了,所以还可以继续操纵DB,但时当发布一个新的sqlplus会话时,net services(BEQ)根据SID去HASH,然后决定是哪一个SHMID内存时,发现这个共享内存段不存在了,于是返回一个connect to an idle instance信息,以为实例不存了。但是ORACLE的后台进程都存在,在发布IPCRM命令之前的会话还可以正常运行。
阅读(2760) | 评论(0) | 转发(0) |