Knowledge/Oracle

sqlplus 접속 hang시에 접속 방법

neo-orcl 2016. 5. 27. 13:33

■ 개요


접속이 안된다는 이상이 있다고 연락을 받고 확인을 하려 할 때 maximum processes 값을 초과하여 접속을 할 수 없을 경우가 있을 수 있다.

아니면 shared pool의 부족 등의 이유도 있을 수 있다.

 

이때 선택하는 방법은 pmon을 kill하고 startup 하는 비상 조치를 취할 수 있는데 문제는 이 경우 추후 원인을 찾지 못할 수도 있고 이 조치를 취하면 안되는 즉, DB를 내리면 안되는 경우도 있을 수 있다.

 

그래서 -prelim 옵션이 존재한다. preliminary connect 이다.

(오라클 매뉴얼에서 검색으로도 찾을 수 없다)

 

일반적으로 정상 상태에서 sysdba 접속시 새 프로세스를 시작하고, 새 프로세스가 SGA에 접속하고, SGA내에 프로세스와 세션 상태 정보를 넣기 위한 메모리를 할당받아 남긴다.

 

하지만 prelim 옵션은 마지막 과정이 없다.

그래서 Lock이나 latch나 mutext를 사용하는 작업을 할 수는 없다.

(prelim 접속시 shutdown 명령도 abort만 가능하다.) 

 

■ 테스트


$ sqlplus -prelim / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Fri May 27 13:17:51 2016

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

SQL> select 1 from dual;                       
select 1 from dual
*
ERROR at line 1:
ORA-01012: not logged on
Process ID: 0
Session ID: 0 Serial number: 0

SQL> oradebug setmypid
Statement processed.

SQL> oradebug unlimit

Statement processed.

SQL> oradebug hanganalyze 12
Statement processed.

 

RAC일 경우에는 옵션이 다르게 있다.

 

SQL> oradebug setmypid
SQL> oradebug unlimit
SQL> oradebug -g all hanganalyze 3
SQL> oradebug -g all dump systemstate 266

 

 

※해당 기능을 사용한 케이스의 링크

 

 

http://arup.blogspot.kr/2008/08/diagnosing-library-cache-latch.html