ITPub博客

首页 > 数据库 > Oracle > 利用Oracle工具sysresv来显示、清除共享内存和信号量

利用Oracle工具sysresv来显示、清除共享内存和信号量

原创 Oracle 作者:yaanzy 时间:2005-04-28 15:18:03 0 删除 编辑
Oracle从8i开始提供sysresv工具来对Oracle使用的共享内存和信号量进行管理。
当服务器上存在多个实例时,该命令能显示每个实例对应的共享内存和信号量,当一个实
例由于某种原因崩溃了,但是由该实例创建的共享内存和信号量却没有被系统回收清理掉,
可以用这个工具来清除应该回收的共享内存和信号量。[@more@]

usage   : sysresv [-if] [-d ] [-l sid1 ...]
          -i : Prompt before removing ipc resources for each sid
          -f : Remove ipc resources silently, oevrrides -i option
          -d : List ipc resources for each sid if on
          -l sid1 .. : apply sysresv to each sid
Default : sysresv -d on -l $ORACLE_SID
Note    : ipc resources will be attempted to be deleted for a
          sid only if there is no currently running instance
          with that sid.


下面例子是在RHAS3,Oracle9206,有两个库(实例)lrdb和oratest的环境下进行的:

显示多实例对应的共享内存和信号量

[oracle@sms oracle]$ sysresv -d on -l lrdb oratest

IPC Resources for ORACLE_SID "lrdb" :
Shared Memory:
ID              KEY
0               0x89737810
Semaphores:
ID              KEY
98304           0xe7fdc710
131073          0xe7fdc711
163842          0xe7fdc712
Oracle Instance alive for sid "lrdb"

IPC Resources for ORACLE_SID "oratest" :
Shared Memory:
ID              KEY
131074          0x82390114
Semaphores:
ID              KEY
425987          0x5760b938
Oracle Instance alive for sid "oratest"

[oracle@sms oracle]$ ipcs -ms

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status     
0x89737810 0          oracle    640        1444937728 13                     
0x82390114 131074     oracle    640        253755392  12                     

------ Semaphore Arrays --------
key        semid      owner      perms      nsems    
0xe7fdc710 98304      oracle    640        227      
0xe7fdc711 131073     oracle    640        227      
0xe7fdc712 163842     oracle    640        227      
0x5760b938 425987     oracle    640        154     

清理正在运行的例程的IPC
[oracle@sms oracle]$ sysresv -if

IPC Resources for ORACLE_SID "lrdb" :
Shared Memory:
ID              KEY
0               0x89737810
Semaphores:
ID              KEY
98304           0xe7fdc710
131073          0xe7fdc711
163842          0xe7fdc712
Oracle Instance alive for sid "lrdb"
SYSRESV-005: Warning
        Instance maybe alive - aborting remove for sid "lrdb"

显然sysresv工具不能用于直接清除实例还在运行的IPC

由于实例崩溃而共享内存和信号量没有清除的情况是很难很少发生的,比较难模拟,
即使我把实例的后台进程用kill -9直接杀掉也没有模拟出来,(呵呵,现在的OS
越来越健壮了)所以只有等大家遇上这种情况时再用这个命令试试吧

附注:清除IPC用操作系统命令ipcrm也可以达到同样的效果,不过最重要的是要先
         区别出每个实例对应的IPC

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/3898/viewspace-797139/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    108
  • 访问量
    760005