태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

Preliminary Connection과 Direct Access

오라클 2009.08.25 17:19
Oracle 10g에서 Preliminary Connection이라는 기능을 사용해 보신 적이 있을 것입니다. 말 그대로 예비 Connection을 맺는 것을 의미합니다. 다르게 말하면 실제로는 Instance에 접속하지 않은 상태에서 Direct Memory Access로 원하는 작업을 수행할 수 있습니다.

이런 의미에서 이 기능을 Sessionless Session(세션없는 세션)이라고 부릅니다.

Oracle이 완전히 Hang 상태에 빠져서 정상적인 Session을 맺을 수 없을 때 System State Dump나 Hang Analyze같은 Hang 분석에 필수적인 데이터를 DBA들이 수집할 수 있도록 하는 기능이라고 보면 정확하겠습니다.
(물론 Maxgauge 같은 Direct Memory Access 기반의 제품을 사용하셔도 되구요. ^^)

아래와 같은 방법으로 SQL*Plus를 구동하면 Prelimiary Connection 상태가 됩니다.

set oracle_sid=ukja1106

sqlplus -prelim sys/oracle as sysdba

-- 또는

sqlplus /nolog
@> set _prelim on
@> conn sys/oracle as sysdba
이 상태에서는 일반적인 Query는 수행이 되지 않습니다.
SYS@ukja1106> select * from dual;
select * from dual
*
ERROR at line 1:
ORA-01012: not logged on
Process ID: 0
Session ID: 0 Serial number: 0
다음과 같이 System State Dump나 Hang Analyze는 성공적으로 수행됩니다.
SYS@ukja1106> oradebug setmypid
Statement processed.
SYS@ukja1106> oradebug dump systemstate 266
Statement processed.
SYS@ukja1106> oradebug dump hanganalyze 10
Statement processed.
단, SGA Heap Dump와 같은 Operation은 지원되지 않는 것 같습니다. 모든 버전에서 확인하진 못했습니다.
SYS@ukja1106> oradebug dump heapdump 0x20000002
ORA-00600: internal error code, arguments: [ksfglt:no_proc], [], [], [], [], [],
 [], []
Oracle 11g에서는 Oradebug에 Direct Access라는 기능이 새롭게 추가되었습니다. 말 그대로 Direct Memory Access로 Fixed Table(X$ Table)을 읽을 수 있도록 해주겠다는 것입니다. 이 기능은 Preliminary Connection에서도 사용할 수 있고, 일반 Connection에서도 사용할 수 있습니다. Session List를 추출할 수 있는 보면...
SYS@ukja1106> oradebug direct_access select * from x$ksuse;
ORA-15655: Fixed table "X$KSUSE" cannot be accessed safely in prelim connection.
에러가 나네요. 이 경우에는 다음과 같이 Unsafe 모드로 동작하게끔 지정하면 됩니다.
SYS@ukja1106> oradebug direct_access set mode=unsafe
Statement processed.

....
ADDR	= 2F0D0850
INDX	= 170
INST_ID	= 1
KSSPAFLG	= 1
KSSPAOWN	= 2FA92228
KSSPATYP	= 1
KSUUDSES	= 0
KSUUDUID	= 0
KSUUDNAM	= SYS
KSUUDLUI	= 0
KSUUDLNA	= 
KSUUDPRV	= 0
KSUUDOCT	= 0
KSUUDFLG	= 0
KSUUDPFN	= 0
KSUUDSID	= 0
KSUUDSNA	= SYS
KSUUDSAE	= 0
KSQPSWAT	= 0
KSQPSRES	= 0
KSQPSRESLAT	= 0
KSUSEPRO	= 2FA92228
KSUSETRN	= 0
KSUSEBRN	= 0
KSUSENUM	= 170
KSUSESER	= 14
KSUSEFLG	= 81
KSUSEIDL	= 1
KSUSESOW	= 2147483644
KSUSEPID	= 2064
KSUSEUNM	= SYSTEM
KSUSEMNM	= XXXX-3C2E2AF808
KSUSEPNM	= ORACLE.EXE (CJQ0)
KSUSETID	= XXXX-3C2E2AF808
KSUSESQL	= 0
KSUSESQH	= 0
KSUSESQI	= 
KSUSESCH	= 0
KSUSESPH	= 0
KSUSEPSI	= 
KSUSEPSQ	= 0
KSUSEPHA	= 0
KSUSEPCH	= 0
KSUSEPPH	= 0
KSUSEPEO	= 0
KSUSEPES	= 0
KSUSEPCO	= 0
KSUSEPCS	= 0
KSUSEOBJ	= 5653
KSUSEFIL	= 1
KSUSEBLK	= 11378
KSUSESLT	= 0
KSUSEFIX	= 2362004
KSUSEAPP	= 
KSUSEAPH	= 0
KSUSEACT	= 
KSUSEACH	= 0
KSUSECLI	= 
KSUSECTM	= 528627
KSUSELTM	= 19-AUG-09 02.04.55 PM
KSUSEFT	= 0
KSUSEFM	= 0
KSUSEFS	= 0
KSUSEQCSID	= 0
KSUSEGRP	= 
KSUSEPFL	= 0
KSUSEPXOPT	= 17
KSUSETMC	= 0
KSUSECQD	= 0
KSUSEPGAMAN	= 0
KSUSEPGAAUTO	= 0
KSUSECLID	= 
KSUSEBLOCKER	= 4294967292
KSUSESEQ	= 12717
KSUSEOPC	= 6
KSUSEP1	= 500
KSUSEP1R	= 00000000000001F4
KSUSEP2	= 0
KSUSEP2R	= 0000000000000000
KSUSEP3	= 0
KSUSEP3R	= 0000000000000000
KSUSETIM	= 0
KSUSEWTM	= 1
KSUSESVC	= SYS$BACKGROUND
KSUSEFLG2	= 1032
KSUSESESTA	= 
KSUSESEID	= 0
KSUSEPESTA	= 
KSUSEPEID	= 0
KSUSECRE	= 2FA92228
KSUSECSN	= 6

170 rows selected
제가 생각하는 Direct Access 기능의 용도는 "Oracle이 Hang 상태에 빠졌을 때 System State Dump나 Hana Analyze외에 Fixed Table에서 별도의 정보를 추출하고 싶은 경우"입니다. 가령 다음과 같은 Fixed Table의 정보를 추출하면 Active Session과 Wait, Latch Miss 등의 정보를 저장할 수 있습니다.
oradebug direct_access select * from x$ksuse;

oradebug direct_access select * from x$kslwt;

oradebug direct_access select * from x$kslwsc;
용도는 무궁무진합니다. 상상하기 나름이겠죠. 저는 이 기능과 함께 Shell Script(혹은 Java나 Perl 등)을 이용해서 DB에 접속하지 않고 Active Session 목록과 Latch Contention, Mutex Contention 등의 정보를 모니터링하는 간단한 Script를 생각해봤습니다. 이것을 잘 이용하면 고가의 모니터링 제품을 사용하기 힘든 중소 규모의 시스템에서는 대단히 유용한 기능이 나오겠습니다.
저작자 표시
신고
Trackback 0 : Comments 3
  1. extremedb 2009.08.25 17:31 신고 Modify/Delete Reply

    아주 중요한 정보네요.
    감사드립니다.

  2. 탐구자 2011.08.08 17:33 Modify/Delete Reply

    관리자의 승인을 기다리고 있는 댓글입니다

  3. 1 2012.12.21 16:42 Modify/Delete Reply

    관리자의 승인을 기다리고 있는 댓글입니다

Write a comment

티스토리 툴바