로그인
Sign in
BULLETIN CATEGORY
BULLETIN TOPIC : RDBMS      
: 오라클과 유닉스 세마포어와의 관계  

--------------------------------------------------------------------------------
 유닉스는 내부 프로세스간의 커뮤니케이션을 위하여 세마포어를 사용한다. 세마포어는 유닉스에 의해서 증감되는 정수(integer)값 이다. 하나의 세마포어에 대해서 하나의 프로세스만이 작업을 할 수 있도록 하여 프로세스 간의 동기화를  유지하는데 이용된다.  다른 프로세스가 사용중인 세마포어를 이용하고자 하는  프로세스는 세마포어의 상태가 증가되거나 0 이 될 때 까지 기다리게 된다.  (옵션에 따라 다를 수 있다).
유닉스에서의 세마포어는 한개씩 이용되는 경우는 거의 없기 때문에 보통  세마포어 집합으로 관리된다. 유닉스 커널이 설정될 때 시스템에서 사용 가능한  세마포어의 최대 갯수와 세마포어 집합 당 최대 세마포어 갯수 및 할당 가능한 세마포어 집합의 최대 갯수가 설정된다. 이 값들은 유닉스 커널을 다시 만들고  시스템을 리부팅 하여야만 변경이 가능하다.

오라클은 백그라운드 프로세스들 간의 Concurrency 를 조절하기 위하여  세마포어를 사용한다.  그리고 Fast(Shared Memory) Driver 가 사용되는 경우 유저 프로세스와  쉐도우 프로세스 간의 Two-Task Communication 에도 사용된다.

1. 사용중인 세마포어 확인 및 할당된 세마포어 해제
현재 시스템에 할당된 세마포어를 확인하는 명령은 다음과 같다.

#ipcs -sb
이 명령은 할당된 모든 세마포어 집합과  ID Number, Owner, 각 집합의  세마포어 수 등을 보여준다.  때때로 비정상적으로 종료된 오라클 프로세스에  의해서  점유된  리소스가 릴리스 되지 않고 남아 있는 경우가 있다.  만약, 오라클이 Shutdown 상태인데도 불구하고  ipcs  -sb 를 통해서 보았을 때 오라클이 점유한 세마포어가 사용중으로 나온다면 그것들을 IPCRM명령으로  Free 시켜야 한다.
즉,  오라클이 할당한 세마포어 집합에 대하여

#ipcrm -s ID   (ID는 ipcs 에서 출력됨)
명령으로 릴리스 시킨다.   아니면 시스템을 리부팅 하여도 된다.
2.  세마포어 사용 계획
<세마포어 사용 계획>
세마포어 커널 파라미터의 이름, 조정 방법 및 커널 재생성 방법은 시스템에 따라서 다르다.  필요한 세마포어의 갯수는 다음의 공식으로 구할 수 있다.

proc(init<SID>.ora에서의 processes 파라미터)
+ test(MIPS RISC 프로세서를 쓰는 경우는 1, 그외에는 0)
+ 3*f(fast driver connection 갯수)
+ sys(오라클 외의 프로그램에서 필요한 세마포어 수)
------------------------------------------------------------
= tot(필요한 최소한의 세마포어 수)
세마포어의 최대 갯수를 지정하는 파라미터(보통 SEMMNS)는 최소한 위에서 계산한  값보다 커야 한다. 그리고 일반적으로 하나의 집합마다 가능한 세마포어의 최대 갯수(보통 SEMMSL)는 10~25 정도이다. fast driver를 많이 쓰는 경우라면 세마포어 집합의 갯수가 더 많이  필요하다.

3. 데이타베이스의 기동시 세마포어와 관련된 오류
오라클은 백그라운드 프로세스에 필요한 모든 세마포어를 데이타베이스 기동시에 할당한다. init<SID>.ora 화일의 Processes 파라미터는 오라클에서할당할 최대 세마포어  갯수를 결정한다.
(1) 세마포어와 관련하여, 가장 흔하게 발생하는 에러는 데이타베이스 기동시에 나타나는 다음과 같은 에러이다.
   ORA-7279  :  spcre:semget error, unable to get first semaphore set

시스템은 한 집합내에 가장 많은 세마포어를 가진 것이나  Processes 변수에 의해 설정되는 세마포어 갯수 중 적은 값을 가진 첫번 째 세마포어 집합을 할당하려고  한다.  만약, 시스템에 설정된 세마포어가 부족하거나, 세마포어가 이미 너무  많이  사용중이거나, 사용중이지 않은 세마포어 집합이 세마포어를 너무 많이  갖고 있는가를 체크해 보고, 그렇지 않다면 시스템에 충분한 세마포어를  할당하도록  한다.

(2) 설정된 세마포어가 없거나 모든 세마포어가 이미 할당된 상태라면 다음과 같은 에러가 발생한다.
   ORA-7251  :  spcre:semget error, could not allocate any semaphores

(3) 첫번째 세마포어 집합이 할당되었지만 두번째 세마포어를 할당받지 못하면 다음과 같은 에러가 발생한다.
   ORA-7252  :  spcre:semget error, could not allocate semaphores

죽어있는 오라클 프로세스에 의해서 세마포어가 점유되어 있는가를 확인하고 만약 그런 문제가 아니라면 더 많은 세마포어를 할당함으로써  문제를 해결할 수 있다.

4. shutdown abort와 세마포어
Shutdown abort 명령이 내려지면 사용자 Process가 끝나기를 기다리지 않고 오라클 백그라운드 프로세스는 죽게되고 그것에 의해서 점유된 세마포어는 Release 된다. 사용자는 세마포어를 늘리거나 줄여서 데이타베이스에 작업을 요구할 때야 비로소 데이타베이스가 Shutdown 되었음을 알게 된다. 이 때  사용자에 의한 세마포어 변경 요구는 실패하게 되며  유저 프로세스와 오라클 Shadow Process도 함께 죽게 된다. 그러면서 다음과 같은 에러가 발생한다.

    ORA-7264  :  spwat:semop error, unable to decrement semaphore
    ORA-7265  :  sppst:semop error, unable to increment semaphore

5. MIPS RISC 기반의 유닉스 시스템과 세마포어
DEC RISC Ultrix, MIPS machine 같은 MIPS RISC 기반의 유닉스 시스템의 경우에는 오라클은 Startup시에 Latching을 위하여 별도의 세마포어를 할당한다. 오라클은 이 때 할당된 세마포어를 사용자가 데이타베이스에 접속할 때 Latch 로 사용한다. 프로세스가 죽게되면 프로세스에 의해서 변경된 세마포어는 원래의 상태로 되돌아 간다. 따라서 접속하는 모든 프로세스는 Undo Structure를 할당할 수 있어야 하는데 Undo Structure가 충분하지 못하면 다음과 같은 에러가 발생한다.
     ORA-9702  :  sem_acquire: cannot acquire latch semaphore

해결방법은 Undo Structure가 사용가능할 때까지 기다리든지 시스템의 Undo Structure 의 최대값(SEMMNU)를 늘리면 된다.

6. Fast Driver의 사용과 세마포어
Fast Driver에 의해서 데이타베이스에 접속되는 경우에는 Shared Memory Buffer에 대한 사용허가를 관리하기 위하여 세마포어가 사용된다. 이 때 하나의 접속되는 세션마다 3개의 세마포어로 구성된 세마포어 집합이 할당된다.

시스템의 세마포어가 모두 할당되었다면 다음과 같은 에러가 발생한다.
        ORA-2721  :  osnseminit: cannot create semaphore set

이 경우에는 이용가능한 세마포어가 생길 때 까지 기다려야 한다. 그리고 비정상적으로  프로세스를 종료하는 경우에는 할당된 세마포어가 Release되지 못하며 어떤 프로세스가 어떤  세마포어를 사용하는가를 구분하기 힘드므로 사용상의 주의가 필요하다.

조회 수 :
1689
추천 수 :
17 / 0
등록일 :
2005.09.27
18:55:05 (*.236.3.241)
엮인글 :
http://bestceok.com/xe/index.php?mid=network&document_srl=7088&act=trackback&key=601
게시글 주소 :
http://bestceok.com/xe/index.php?mid=network&document_srl=7088
List of Articles
번호 제목 글쓴이 조회 수 추천 수 비추천 수 날짜
7 ping에서 dup 발생시... 제비게릴라 48     2018-02-20
dup가 이따금씩 발생할때 스위치의 fdb 테이블 clear하니 정상적으로 돌아옴  
6 프락시 프로그램 제비게릴라 890     2012-11-27
http://www.spotflux.com/ http://www.spotflux.com/  
5 스위치 간단 명령어 하록 1466     2011-03-02
- User Mode : 간단한 조회 명령 sw21> - Privileged Mode : 상세한 조회 명령, 설정 모드로 진입 가능 모드 sw21>en sw21# sw21#sh version 운영체제 버전 정보 확인 Cisco Internetwork Operating System Software IOS (tm) C2950 Software (C2950-I6K2L2Q4-...  
4 유닉스 부팅시 오라클 자동 실행 하록 1266     2007-12-18
.profile에 넣어서는 오라클이 자동실행이 되질 않습니다.... sun unix기준으로 자동으로 오라클이 올라오게 하려면... sun solaris 부팅 시 oracle DB를 auto startup하도록 하는 데 관련된 화일들이다. /etc/inittab : o/s의 초기화 과정을 조절하는 화일 /e...  
3 Serial 과 신호선에 대한 설명 하록 1131     2006-08-10
1. Serial 과 신호선에 대한 설명 컴퓨터에서 통신을 위한 각종 인터페이스가 표준 또는 옵션으로 장비 되어 있다. 이들중 대표적인 것으로는데이터를 시리얼(serial)로 전송하는 RS232C, RS422, RS485등이 있다. 물론 데이터를 병렬로 보낼 수 있다. 예를 들...  
» 오라클과 유닉스 세마포어와의 관계   하록 1689 17   2005-09-27
BULLETIN CATEGORY BULLETIN TOPIC : RDBMS     : 오라클과 유닉스 세마포어와의 관계   --------------------------------------------------------------------------------  유닉스는 내부 프로세스간의 커뮤니케이션을 위하여 세마포어를 사용한다. ...  
1 슬래머웜 사건 분석 관리자 1081     2003-03-10
시작하면서 이 글이 사파이어 혹은 슬래머 웜 자체에 관한 분석은 아니라는 점을 분명히 합니다. 국내/해외의 많은 해커 및 윈도우즈 전문가 분들이 이미 선행해 주셨기 때문입니다. 신속하고 심도있는 분석을 해주신 분들께 감사의 말씀을 드리고 싶습니다. ...