현상
DB 부팅 시, A shared memory segment with the same key already exists 에러 발생하며 기동 안 되는 현상이 발생하였습니다.
ASCMD> cd archive
current path = +DS/archive
ASCMD> ls
<File_name>
log-t0-r0-s5.arc
- Number of files found: 1
ASCMD> rm log-t0-r0-s5.arc
rm complete: +DS/archive/log-t0-r0-s5.arc --> archive 삭제
ASCMD> ls
ERROR: no such path '+DS/archive/' (rc=-19)
SQL
복사
원인
티베로는 DB 부팅 시, shm key값은 $TB_HOME과 $TB_SID 값을 해싱하여 고유한 shm key를 생성한 뒤 해당 key로 공유 메모리(Shared Memory)를 생성합니다.
이때 동일한 key로 이미 생성된 Shared Memory가 존재하고, 다른 프로세스가 해당 Shared Memory에 attach 중이라면, A shared memory segment with the same key already exists 오류가 발생하며 DB 부팅이 실패합니다.
참고로, shm key는 $TB_HOME과 $TB_SID 값으로 해싱하기 때문에 단순 재기동으로는 문제가 해결되지 않습니다.
해결
로그에 기록된 SHM_KEY 값을 기준으로 해당 공유 메모리의 shmid를 확인한 후, 이를 공유 메모리에서 해제한 뒤 DB를 다시 기동하면 정상적으로 부팅됩니다.
$ tbboot
**************************************************************
* A shared memory segment with the same key already exists.
* SHM_KEY = 0x1438469a
* Trying to reuse the shared memory segment....
**************************************************************
$ ipcs -m | awk '$1=="0x1438469a" {print $2}' | xargs ipcrm -m
--- '$1=="[SHM_KEY 값에 맞게 수정]"
$ tbboot
Listener port = 9292
Tibero 6
TmaxData Corporation Copyright (c) 2008-. All rights reserved.
Tibero instance started up (NORMAL mode).
SQL
복사
참고
$ ipcs -m | awk '$1=="0x1438469a" {print $2}' | xargs ipcrm -m 구문 설명
•
ipcs -m : 공유 메모리 자원 조회
•
awk '$1=="0x1438469a" {print $2}' : 첫번째 필드가 0x1438469a인 행에서 두번째 필드 조회
•
xargs ipcrm -m : 받아온 인자로 공유 메모리 삭제
결론적으로, 공유 메모리 자원을 조회하고, 첫번째 필드(key)가 0x1438469a인 공유 메모리의 두번째 필드(shmid)를 받아와서, 그 인자(shemid)를 ipcrm -m 통하여 삭제하는 구문입니다.
ipcs -m과 관련된 구문 번외 설명
•
ipcs -s : 세마포어 자원 조회
•
ipcrm -s : 세마포어 삭제