有时oracle 实例异常终止,会导致oracle process killed,但是实例之前所分配的shared memory segments没有release, 而此时登录提示no login,而且本机还有其它实例在用无法kill 所有,昨天就遇到了这样的情况,有三个实例,三个共享内存段,如果内核参数配置不合理比如shmmax少,有可能一个实例会有多个共享内存段。这种情况下如何指定残留的对应共享段?然后使用ipcrm 清理,下面例几种方法。
on linux
查看共享内存段
切换到对应的实例
export ORACLE_SID
export ORACLE_HOME
方法一使用lsof 配合SHM ID
方法二 使用sysresv
方法三 使用oradebug ipc
Note: 在ORACLE 7老版本中可能输出是下面这个样子
有了shm id,使用ipcrm 就可以清理了。
--update 2017-7-14--
for 12c
在12c版本中引入了X$KSMSSINFO 视图,Kernel Service, Semory Sga OS (level) INFO。 从该视图可以查看当前实例使用的共享内存段,并且shmid列对应的IPCS中的SHMID。
on linux
查看共享内存段
[oracle@db231 ~]$ ipcs -m
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 1966081 root 644 80 2
0x00000000 1998850 root 644 16384 2
0x00000000 2031619 root 644 280 2
0x00000000 1716125701 oracle 640 16777216 30
0x00000000 1716158470 oracle 640 2130706432 30
0x649e87b4 1716191239 oracle 640 2097152 30
0x00000000 41091080 oracle 640 2928640 156
0x00000000 41123849 oracle 640 419430400 78
0x00000000 41156618 oracle 640 1912602624 78
0x00000000 41189387 oracle 640 13848576 78
0x10482b78 41222156 oracle 640 12288 78
切换到对应的实例
export ORACLE_SID
export ORACLE_HOME
方法一使用lsof 配合SHM ID
[oracle@db231 ~]$ lsof | egrep "1716125701|COMMAND"
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
oracle 303 oracle DEL REG 0,4 1716125701 /SYSV00000000
oracle 305 oracle DEL REG 0,4 1716125701 /SYSV00000000
oracle 307 oracle DEL REG 0,4 1716125701 /SYSV00000000
oracle 309 oracle DEL REG 0,4 1716125701 /SYSV00000000
oracle 311 oracle DEL REG 0,4 1716125701 /SYSV00000000
oracle 325 oracle DEL REG 0,4 1716125701 /SYSV00000000
...
方法二 使用sysresv
[oracle@db231 ~]$ $ORACLE_HOME/bin/sysresv
IPC Resources for ORACLE_SID "anbob" :
Shared Memory:
ID KEY
1716125701 0x00000000
1716158470 0x00000000
1716191239 0x649e87b4
Semaphores:
ID KEY
3276801 0xb21bf730
3309570 0xb21bf731
3342339 0xb21bf732
3375108 0xb21bf733
3407877 0xb21bf734
3440646 0xb21bf735
3473415 0xb21bf736
3506184 0xb21bf737
3538953 0xb21bf738
Oracle Instance alive for sid "anbob"
方法三 使用oradebug ipc
sys@ANBOB>oradebug setmypid
Statement processed.
sys@ANBOB>oradebug ipc
Information written to trace file.
sys@ANBOB>oradebug tracefile_name
sys@ANBOB>ho grep -A 1 Shmid /u01/app/oracle/diag/rdbms/anbob/anbob/trace/anbob_ora_3942.trc
Area Subarea Shmid Stable Addr Actual Addr
0 0 1716125701 0x00000060000000 0x00000060000000
--
Area Subarea Shmid Stable Addr Actual Addr
1 4 1716158470 0x00000061000000 0x00000061000000
--
Area Subarea Shmid Stable Addr Actual Addr
2 2 1716125701 0x00000060b46000 0x00000060b46000
--
Area Subarea Shmid Stable Addr Actual Addr
3 3 1716125701 0x00000060ffe000 0x00000060ffe000
--
Area Subarea Shmid Stable Addr Actual Addr
4 1 1716125701 0x00000060221000 0x00000060221000
--
Area Subarea Shmid Stable Addr Actual Addr
5 5 1716191239 0x000000e0000000 0x000000e0000000
Note: 在ORACLE 7老版本中可能输出是下面这个样子
SVRMGR> oradebug ipc
-------------- Shared memory --------------
Seg Id Address Size
353 80000000 55721984
Total: # of segments = 1, size = 55721984
-------------- Semaphores ----------------
Total number of semaphores = 50
Number of semaphores per set = 25
Number of semaphore sets = 2
Semaphore identifiers:
458758 458759
有了shm id,使用ipcrm 就可以清理了。
--update 2017-7-14--
for 12c
在12c版本中引入了X$KSMSSINFO 视图,Kernel Service, Semory Sga OS (level) INFO。 从该视图可以查看当前实例使用的共享内存段,并且shmid列对应的IPCS中的SHMID。
SQL> select * from x$ksmssinfo;
ADDR INDX INST_ID CON_ID AREA NAME SEG_START ADDR START ADDR SEGMENT SIZE SIZE REMAINING ALLOC SIZE PAGESIZE SHMID SEGMENT DISTRIBUTED AREA FLAGS SEGMENT DEFERRED NUMAPG
---------------- ---------- ---------- ---------- -------------------------------- ---------------- ---------------- ------------ ---------- -------------------- ---------- ---------- -------------------- ---------- -------------------- ----------
00007F49A77E5BC0 0 1 0 Variable Size 0000000061000000 0000000061000000 1543503872 1543503872 0 4096 65536 YES 1042 NO 129
00007F49A77E5BC0 1 1 0 Redo Buffers 00000000BD000000 00000000BD000000 7983104 7983104 0 4096 98306 YES 4627 NO 129
00007F49A77E5BC0 2 1 0 Fixed Size 0000000060000000 0000000060000000 8794112 8794112 0 4096 32769 YES 4631 NO 129
00007F49A77E5BC0 3 1 0 skgm overhead 00000000BE000000 00000000BE000000 12288 12288 0 4096 131075 YES 268435987 NO 129
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




