No. 20621
데이터베이스에 접근 할 수 없을 때 SYSTEMSTATE 덤프를 받는 방법(GDB 및 DBX 사용법) ============================================================
PURPOSE -------
Problem Description ------------------- 데이터베이스 hang 문제를 분석하기 위해 다음과 같이 svrmgrl 이나 sqlplus로 데이터베이스에 연결하여 systemstate dump를 뜨게 된다.
$ svrmgrl
svrmgr> connect internal svrmgr> oradebug setmypid svrmgr> oradebug unlimit svrmgr> oradebug dump systemstate 10
혹은
svrmgr> alter session set max_dump_file_size=unlimited; svrmgr>alter session set events 'immediate trace name systemstate level 10';
하지만 데이타베이서에 연결을 시도 할 때, 프롬프트가 떨어지지 않는 경우에 os에서 제공되는 디버거인 gdb나 dba를 사용해서 분석이 가능하다.
Solution Description --------------------
디버거를 사용하여 internal function인 ksudss(10)을 직접 호출한다. 이 경 우 unix의 PID 정보가 필요하며, PID는 ps -ef 명령으로 확인 가능하다.
gdb 예:
$ gdb $ORACLE_HOME/bin/oracle <pid> ... gdb> print ksudss(10)
dbx 예:
$ dbx $ORACLE_HOME/bin/oracle <pid> ... (dbx) call ksudss(10)
프로세스의 종류에 따라 관련된 system state dump 파일이 user_dump_dest 또 는, background_dump_dest 디렉토리에 생긴다.
1. dbx 사용 예
다음은 pmon 프로세스에 대해 dbx를 이용하여 systemstate dump를 받는 예이 다.
$ ps -ef | grep pmon server 26256 1 0 Aug 24 ? 0:02 ora_pmon_v816 server 17917 16105 0 11:01:54 pts/50 0:00 grep pmon
$ dbx $ORACLE_HOME/bin/oracle 26256 (dbx에서 많은 메시지가 나타난다) Reading symbolic information for oracle (유사한 메시지 반복...) Attached to process 26256 stopped in _semsys at 0xeef364ac 0xeef364ac: _semsys+0x0004: ta %icc,%g0 + 8 (dbx) call ksudss(10) dbx: warning: unknown language, 'ansic' assumed stopped in _semsys at 0xeef364ac 0xeef364ac: _semsys+0x0004: ta %icc,%g0 + 8 (dbx) quit detaching from process 26256
background_dump_dest에 v816_pmon_26256.trc 파일이 생성됨.
2. 결론
디버거는 오라클 내부 함수를 바로 호출 할 수 있는 강력한 툴이다. 조심해 서 사용한다면, 분석이 어려운 상황에서도 문제 원인 분석에 필요한 정보를 획득 할 수 있다.
Reference Documents -------------------
|