本文欲介绍之技术点如下:
① ipcs的使用
② ipcrm释放oracle内存段
③ sysresv的使用
1 一般情况下,我们是不允许oracle的共享内存段跨区的,即是我们的共享内存段要永远放在一个内存段中。一般输入三部分内容。
[oracle@uplooking ~]$ ipcs -a
`
------ Shared Memory Segments --------
key shmid owner perms bytes nattch status
0x00000000 720901 oracle 600 393216 2 dest
0x00000000 753677 oracle 600 393216 2 dest
0x00000000 786449 oracle 600 393216 2 dest
0x00000000 1081370 oracle 600 393216 2 dest
0x00000000 1114139 oracle 600 393216 2 dest
0x00000000 1146908 oracle 600 393216 2 dest
0x00000000 1212446 oracle 600 393216 2 dest
0x00000000 107774007 oracle 600 393216 2 dest
0x00000000 117440568 oracle 600 393216 2 dest
0x00000000 118194233 oracle 600 393216 2 dest
0x00000000 183369786 oracle 600 393216 2 dest
0x00000000 183402555 oracle 600 393216 2 dest
------ Semaphore Arrays --------
key semid owner perms nsems
0x25e3d294 12386307 oracle 640 152
0x25e3d295 12419076 oracle 640 152
0x25e3d296 12451845 oracle 640 152
0x0674cb84 16121862 boco 640 187
0x0674cb85 16154631 boco 640 187
0x0674cb90 16515090 boco 640 187
0x0674cb91 16547859 boco 640 187
0x0674cb92 16580628 boco 640 187
0x0674cb93 16613397 boco 640 187
0x0674cb94 16646166 boco 640 187
------ Message Queues --------
key msqid owner perms used-bytes messages
2 sysresv的使用,可以查看对应实例的共享内存段!
[oracle@uplooking ~]$ which sysresv
/opt/oracle/product/11.2.0/db/bin/sysresv
[oracle@uplooking ~]$ sysresv
IPC Resources for ORACLE_SID "hdp" :
Shared Memory:
ID KEY
172195872 0x00000000
172228641 0x00000000
172261410 0x742d11d4
Semaphores:
ID KEY
12386307 0x25e3d294
12419076 0x25e3d295
12451845 0x25e3d296
Oracle Instance alive for sid "hdp"
3 ipcrm释放这些占用的内存区
[oracle@uplooking ~]$ ipcrm -m 172195872
[oracle@uplooking ~]$ ipcrm -m 172195872
ipcrm: invalid id (172195872)
[oracle@uplooking ~]$ ipcrm -m 172228641
[oracle@uplooking ~]$ ipcrm -m 172261410
4 此时再去查看
[oracle@uplooking ~]$ sysresv
IPC Resources for ORACLE_SID "hdp" :
Shared Memory
ID KEY
No shared memory segments used
Semaphores:
ID KEY
12386307 0x25e3d294
12419076 0x25e3d295
12451845 0x25e3d296
Oracle Instance not alive for sid "hdp"
5 登录实例
[oracle@uplooking ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Fri Jun 24 10:17:56 2016
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL>
6 重新启动
如果此时直接,启动的话,看看alert.log中的信息
ALTER DATABASE MOUNT
sculkget: failed to lock /opt/oracle/product/11.2.0/db/dbs/lkHDPDG exclusive
sculkget: lock held by PID: 30838
ORA-09968: unable to lock file
Linux-x86_64 Error: 11: Resource temporarily unavailable
Additional information: 30838
ORA-1102 signalled during: ALTER DATABASE MOUNT...
Instance terminated by PSP0, pid = 30838
Errors in file /opt/oracle/diag/rdbms/hdpdg/hdp/trace/hdp_psp0_30838.trc:
ORA-27300: OS system dependent operation:semctl failed with status: 43
ORA-27301: OS failure message: Identifier removed
ORA-27302: failure occurred at: sskgpwrm1
ORA-27157: OS post/wait facility removed
ORA-27300: OS system dependent operation:semop failed with status: 43
ORA-27301: OS failure message: Identifier removed
ORA-27302: failure occurred at: sskgpwwait1
Fri Jun 24 10:21:20 2016
Instance termination got error 27120 from SGA destruction.
Error cleared. Process exiting.
实例非正常关闭,文件还在锁定中!还会重新正常关闭,再启动实例吧