기술 정보
home
채널 소개
home

공유 메모리 키 중복 시 DB 기동 실패 오류 해결 (Shared Memory Key)

문서 유형
기술 정보
분야
모니터링/점검
키워드
Shared Memory Key
shared memory
OS
tbboot
적용 제품 버전
6FS05
6FS06
6FS07
6FS07PS
7FS01
7FS02
7FS02PS

현상

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 : 세마포어 삭제