본문 바로가기
Tibero/기타

Tibero Session Kill

by dan.de.lion 2016. 9. 6.

Tibero Session Kill


Tibero Session Kill

테스트 환경

OS : OEL release 7.2
Tibero : 4SP1 r71701
Tibero : 5SP1 FS05
Tibero : 6 FS04

Special Port 접속설정


  • Tibero에 접속할 수 있는 최대 세션 수는 MAX_SESSION_COUNT 파라미터로 결정된다.
  • MAX_SESSION_COUNT로 제한 되는 세션은 Tibero의 서비스 포트(또는 리스너 포트(LISTENER_PORT) Default: 8629)로 접속한 세션만 해당된다.
  • 따라서, TIbero 서비스 포트로 MAX_SESSION_COUNT를 넘겨서 접속할 방법은 없다(세션 풀(Session Full) 상태를 의미한다).
  • 이러한 경우, 기존 세션이 종료되기를 기다리거나 DBMS를 재기동 시키는 방법 이외에는 방법이 없을 수 있다.
    (운 좋게 DBA 권한을 가진 계정으로 접속하여 작업 중인 경우 해당 세션을 통해 다른 세션을 끊을 수 있다. (방법은 다음 단계에 있다)
  • 이를 위해 TIbero에서는 Special Port를 제공(?)한다.
  • Special Port는 서비스 포트 이외의 자동으로 추가 설정되는 숨겨진(?) 포트다.
  • Special Port_LSNR_SPECIAL_PORT의 값으로 정해지며 설정하지 않는 경우 LISTENER_PORT + 1이 Default 값으로 설정된다.
  • Special PortMAX_SESSION_COUNT와 상관 없이(MAX_SESSION_COUNT에 의해 제약받지 않는다.) 접속이 가능하다.(세션 풀 상태에서도 접속이 가능하다.)
  • 단, Special Port로 접속하는 세션도 제한은 있으며 _WTHR_PER_PROC 파리미터에 설정된 수 만큼 접속이 가능하다.
  • _WTHR_PER_PROC의 Default 값은 10이다.
  • Special Port로 최대 _WTHR_PER_PROC의 설정값만큼의 접속이 가능하며 DBA 권한으로 접속하여 세션 풀을 유발한 세션들을 정리할 수 있다.
    Tibero 4SP1까지는 MAX_SESSION_COUNT 파라미터가 존재하지 않는다.
    대신, WTHR_PROC_CNT_WTHR_PER_PROC 파라미터가 존재하며 해당 파라미터 설정값의 곱으로 최대 세션 수가 결정된다.
    즉, WTHR_PROC_CNT * _WTHR_PER_PROC = MAX_SESSION_COUNT가 된다.
    WTHR_PROC_CNT는 Tibero WTHR(워킹 프로세스)의 개수를 의미한다.
    _WTHR_PER_PROC는 Tibero WTHR당 워킹 스레드의 개수를 의미한다.
    각 세션은 워킹 스레드와 1:1 매칭이 되므로 _WTHR_PER_PROC는 각 WTHR별로 처리할 수 있는 세션의 수이다.
  • 접속 방법은 $TB_HOME/client/config/tbdsn.tbr 파일에 접속 정보를 설정하여 사용한다.
(전략)
tb5FS05=(
    (INSTANCE=(HOST=localhost)
              (PORT=8629)
              (DB_NAME=tb5FS05)
    )
)

tb5FS05_SP=(
    (INSTANCE=(HOST=localhost)
              (PORT=8630)       # 8629(LISTENER_PORT) + 1 = 8630
              (DB_NAME=tb5FS05)
    )
)
  • 세션 풀 상태에서 서비스 포트로 접속하면 다음과 같이 에러가 발생한다.
$ tbsql sys/tibero

tbSQL 5 SP1

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

TBR-12003: Unable to open a session.

SQL>
  • 위에서 설정한 tb5FS05_SP를 이용하여 접속하면 정상 접속이 가능하다.
$ tbsql sys/tibero@tb5FS05_SP

tbSQL 5 SP1

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

Connected to Tibero using tb5FS05_SP.

SQL>

세션 정리


ALATER 문


  • Special Port로 Tibero에 접속하여 진행한다. (세션 풀 상태가 아닌 경우에는 상관없다)
  • DBA 권한 또는 ALTER SYSTEM 권한이 있는 DB 계정을 통해 사용할 수 있다.
$ tbsql sys/tibero@tb5FS05_SP

tbSQL 5 SP1

TmaxData Corporation Copyright (c) 2008-. All rights reserved.

Connected to Tibero using tb5FS05_SP.

SQL>
  • Session Kill의 기본 구문은 다음과 같다.
  • 추가적은 옵션이 존재하나 Tibero 공식문서에서도 제공되지 않은 만큼 언급하지 않겠다.
ALTER SYSTEM KILL SESSION (SID, SERIAL#) ;
  • 해당 구문에서 SIDSERIAL#V$SESSION 뷰를 통해서 조회 가능하다.
  • USERNAMEIPADDR, PROG_NAME 등의 컬럼을 통해 KILL 할 세션의 SIDSERIAL#을 찾는다.
SQ> SELECT SID, SERIAL#
      FROM V$SESSION
     WHERE USERNAME  = 'TEST'
       AND IPADDR    = '127.0.0.1'
       AND PROG_NAME = 'tbsql' ;

       SID    SERIAL#
---------- ----------
        23       1466

1 row selected.
  • 해당 세션의 SIDSERIAL#의 값을 통해 Session Kill을 수행한다.
SQL> ALTER SYSTEM KILL SESSION (23, 1466) ;

System altered.
  • 해당 세션이 정리되었음을 알 수 있다.
SQ> SELECT SID, SERIAL#
      FROM V$SESSION
     WHERE USERNAME  = 'TEST'
       AND IPADDR    = '127.0.0.1'
       AND PROG_NAME = 'tbsql' ;

0 row selected.

tbsvr kill


  • tbsvr kill 명령을 통해 Session Kill을 수행할 수 있다.
  • 내부적인 동작은 위의 ALATER 문과 크게 다르지 않다.
  • 다만, 별도의 Special Port 설정 없이 Special Port를 통해 Session Kill을 수행할 수 있다.
  • 즉, 세션 풀 상태에서 별도의 설정 없이 Session Kill이 가능하다.
  • tbsvr kill 명령을 수행하면 다음과 같다.
    (Tibero를 설치한 OS 계정으로 접속하여 수행한다.)
$ tbsvr kill
sess: 49 user: TIBERO
sess: 50 user: TEST
sess: 51 user: TIBERO
sess: 52 user: TIBERO
sess: 53 user: TIBERO
sess: 54 user: TIBERO
sess: 55 user: TIBERO
sess: 56 user: TIBERO
sess: 57 user: TIBERO
sess: 58 user: TIBERO
sess: 59 user: TIBERO
sess: 60 user: TIBERO
sess: 61 user: TIBERO
sess: 62 user: TIBERO
sess: 63 user: TIBERO
sess: 64 user: TIBERO
sess: 65 user: TIBERO
sess: 66 user: TIBERO
sess: 67 user: TIBERO
sess: 68 user: TIBERO

select kill session (0: QUIT):
  • TEST로 접속한 세션에 대해 Session Kill을 수행한다.
  • 정리된 게 바로 확인된다.
$ tbsvr kill
sess: 49 user: TIBERO
sess: 50 user: TEST
sess: 51 user: TIBERO
sess: 52 user: TIBERO
sess: 53 user: TIBERO
sess: 54 user: TIBERO
sess: 55 user: TIBERO
sess: 56 user: TIBERO
sess: 57 user: TIBERO
sess: 58 user: TIBERO
sess: 59 user: TIBERO
sess: 60 user: TIBERO
sess: 61 user: TIBERO
sess: 62 user: TIBERO
sess: 63 user: TIBERO
sess: 64 user: TIBERO
sess: 65 user: TIBERO
sess: 66 user: TIBERO
sess: 67 user: TIBERO
sess: 68 user: TIBERO

select kill session (0: QUIT): 50
sess: 49 user: TIBERO
sess: 51 user: TIBERO
sess: 52 user: TIBERO
sess: 53 user: TIBERO
sess: 54 user: TIBERO
sess: 55 user: TIBERO
sess: 56 user: TIBERO
sess: 57 user: TIBERO
sess: 58 user: TIBERO
sess: 59 user: TIBERO
sess: 60 user: TIBERO
sess: 61 user: TIBERO
sess: 62 user: TIBERO
sess: 63 user: TIBERO
sess: 64 user: TIBERO
sess: 65 user: TIBERO
sess: 66 user: TIBERO
sess: 67 user: TIBERO
sess: 68 user: TIBERO

select kill session (0: QUIT): 

여담


  • ALATER 문에서도 언급한 바와 같이 추가적은 옵션이 존재하나 공식문서에서는 제공되지 않는다.
  • 해당 옵션이 사라졌을 수 있으며 또는, 내부적인 동작에 의해 주어진 옵션이 무시될 가능성도 있다.
  • 또한, 해당 옵션으로 인해 원치 않는 동작이 발생될 소지가 있을 것으로 추정된다. (옵션은 쓰지 말자!)
  • tbsvr kill도 공식적으로는 제공되는지는 분명치 않다.
  • 하지만, 구글링을 하면 이런게 나온다.
  • 언제나 조심하자.

'Tibero > 기타' 카테고리의 다른 글

PHP와 tbOCI(Tibero OCI) 연동  (0) 2016.06.14
Tibero To Tibero DB Link  (0) 2016.06.14
Tibero To MS-SQL DB Link  (0) 2016.06.03
Tibero To Sybase DB Link  (0) 2016.06.03
Tibero to Oracle DB Link(Local Gateway)  (0) 2016.06.03

댓글