- 当检查oracle实例后台进程不存在这时启动启动数据库报错:
- ORA-01081: "cannot start already-running ORACLE - shut it down first"
- 造成此种原因是
- Orphaned shared memory segments and semaphores did not get cleared properly
- from the last instance shutdown.
- 在oracle实例最后一次shutdown时,某一个孤立的共享内存段和信号没有被清理干净
- 解决方法
- 可以利用ipcs来找出共享内存段或者信号,利用ipcrm来手动清除
- orphaned shared memory segments(孤立的共享内存段) 和semaphores(信号量)
- [root@wl ~]# ipcs -a
- ------ Shared Memory Segments --------
- key shmid owner perms bytes nattch status
- 0x00000000 688138 oracle 640 4096 0
- 0x00000000 720907 oracle 640 4096 0
- ------ Semaphore Arrays --------
- key semid owner perms nsems
- 0x000000a7 0 root 600 1
- 0x00000000 688138 oracle 640 4096 0
- 0x00000000 720907 oracle 640 4096 0
- [root@wl ~]# ipcs -m
- ------ Shared Memory Segments --------
- key shmid owner perms bytes nattch status
- 0x00000000 688138 oracle 640 4096 0
- 0x00000000 720907 oracle 640 4096 0
[root@wl ~]# ipcrm - m 720907
- ipcs: 检查分配的共享内存
- ipcrm:手动释放共享内存段
- 取得ipc信息:
- ipcs [-m|-q|-s]
- -m 输出有关共享内存(shared memory)的信息
- -q 输出有关信息队列(message queue)的信息
- -s 输出有关“信号量”(semaphore)的信息
- -a 使用所有打印选项. (针对 -b, -c, -o, -p, and -t的速记符)
- Example:
- ipcrm -m shmid 号 - for shared memory
- ipcrm -s semid 号 - for semaphores
- OR
- Shutdown all the instances belonging to the user. Next, run "ipcs -b" to find the remaining IPC
- facilities, owned by the same user, and remove them. However, if you're running multiple production
- instances, this may not be acceptable.
- 在多实例的情况下
- 1. 运行
- ipcs -a > /tmp/ipcs_before.out
- 2. 用 SQL*Plus 连接所有实例做一个简单的查询
- select * from dual;
- 3. 再次运行
- ipcs -a > /tmp/ipcs_after.out
- 4. 对比 "/tmp/ipcs_before.out" 与 "/tmp/ipcs_after.out" 文件
- 查找 LPID 没有改变的共享内存段
- These are the orphaned shared memory segments you are looking for:
- LPID 显示最后过程中附加或者分立共享内存段的进程 ID
- 因为,通过在每一个活着的实例中执行查询,你会涉及到属于各自实例的共享内存段,
- 但是未涉及的共享内存段将变成孤立的一个
- 5. After identifying the orphaned shared memory segments, you can find
- the orphaned semaphores by locating the semaphores with the same
- value of CTIME in "ipcs -a" output as the value of CTIME for the
- orphaned shared memory segments: CTIME shows the time when the
- associated entry was created or changed.
- 在识别孤立的共享内存段后,可以通过ipcs -a的输出确定具有相同CTIME值的信号找到孤立的共享内存段
- 作为相关孤立共享内存段的值
-