Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2804733
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Oracle

2010-07-23 12:22:59

                                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) |
0

上一篇:PMON进程

下一篇:RDA使用

给主人留下些什么吧!~~