mouse 发表于 2018-9-26 08:31:36

oracle共享内存段手工清理

  当Oracle数据库意外当机,操作系统内存共享段未释放,便无法重启数据库至nomount状态,此时需要手工清理。
  现象:
  1.可以看到有2个smon进程
  $ ps -ef|grep smon
  oracle    6538   10 22:00 ?      00:00:00 ora_smon_zwb
  oracle    6574   10 22:02 ?      00:00:00 ora_smon_bxtest
  oracle    658364630 22:02 pts/2    00:00:00 grep smon
  2.ipcs查看内存
  $ ipcs
  ------ Shared Memory Segments --------
  key      shmid      owner      perms      bytes      nattch   status
  0x3b751258 65537      oracle    640      26214400013
  0x7707b27c 98306      oracle    640      26633830411
  ------ Semaphore Arrays --------
  key      semid      owner      perms      nsems
  0xe21c75d0 98304      oracle    640      154
  0x991ba820 229377   oracle    640      204
  要清理bxtest内存段方式:
  1.使用在$ORACLE_HOME/bin下的sysresv命令
  $ cd $ORACLE_HOME/bin
  $ ls -l *sys*
  -rwxr-xr-x1 oracle oinstall2318 Jan12000 gensyslib
  -rwxr-xr-x1 oracle oinstall 20397 Jun 282005 sysresv
  2.用sysresv -l 查出内存段
  $ sysresv -l zwb bxtest
  IPC Resources for ORACLE_SID "zwb" :
  Shared Memory:
  ID            KEY
  65537         0x3b751258
  Semaphores:
  ID            KEY
  98304         0xe21c75d0
  Oracle Instance alive for sid "zwb"
  IPC Resources for ORACLE_SID "bxtest" :
  Shared Memory:
  ID            KEY
  98306         0x7707b27c
  Semaphores:
  ID            KEY
  229377          0x991ba820
  Oracle Instance alive for sid "bxtest"
  3.用操作系统命令ipcrm手工释放
  $ ipcrm -m 98306
  $ ipcrm -s 229377
  4.查看结果可以看到bxtest已清理
  $ ps -ef|grep smon
  oracle    6538   10 22:00 ?      00:00:00 ora_smon_zwb
  oracle    662464630 22:12 pts/2    00:00:00 grep smon
  ------------
  5.sysresv -f参数可以移除共享段(仅适用于实例不存在,操作系统共享段不释放条件)
  $ export ORACLE_SID=bxtest
  $ sysresv -f bxtest
  IPC Resources for ORACLE_SID "bxtest" :
  Shared Memory:
  ID            KEY
  131074          0x7707b27c
  Semaphores:
  ID            KEY
  425985          0x991ba820
  Oracle Instance alive for sid "bxtest"
  SYSRESV-005: Warning
  Instance maybe alive - aborting remove for sid "bxtest"

页: [1]
查看完整版本: oracle共享内存段手工清理