Describe AlertLogFile과TraceFile here

Alert Log File과 Trace File


1. Alert Log File

- Server Process와 Instance가 중요 이벤트 명령어 기록

- 충돌에러

- 인스턴스 시작시 default가 아닌 모든 파라미터의 값

- DB구조나 DB 구성 변경

- DB 생성, Startup, Shutdown, Archive Log, Recovery

- Create TableSpace, Create Rollback Segment, Alter System Switch LogFile

(로그 스위치는 Thread 1 advanced to log sequence와 같은 형식으로 저장)

- 정기적인 검사 필요

- 필요없는 경고파일은 지우는 것이 좋다. (지우지 않으면 계속 쌓이게 된다.)

- 파라미터 파일의 BACKGROUND_DUMP_DEST에 명시



2. Background Process Trace File

- Background Process가 만난 이벤트 정보 기록

- 고장의 원인 파악시 유용

- 파라미터 파일의 BACKGROUND_DUMP_DEST에 명시

- 추적파일명: 프로세스명+백그라운드 프로세스ID.trc



3. User Trace File

- 사용자의 요청에 의해서 생성

- SQL튜닝에 유용하게 사용

- 세션별, 인스턴스별 추적가능

- 세션별 추적 (catproc.sql로 생성(DB생성시 수행됨), prvtutil.plb로 재생성)

- 특정 세션에 추적을 Enable/Disable하게 하는 프로시저

CONNECT SYS/CHANGE_ON_INSTALL AS SYSDBA

SELECT SID, SERIAL#, USERNAME FROM V$SESSION;

EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(SID, SERIAL#, FALSE);

파라미터 파일에 명시된 USER_DUMP_DEST의 경로에서 확인

- 현재 세션에서 추적

ALTER SESSION SET SQL_TRACE = TRUE;

- USER TRACE FILE의 저장공간 제한 파라미터: MAX_DUMP_FILE_SIZE

- 인스턴스 레벨 추적

- 파라미터 파일의 SQL_TRACE = TRUE

- 인스턴스 레벨이므로 추적에 대한 비용을 고려

- SQL_TRACE = FALSE가 기본값

-

SQL> CONNECT SYS/CHANGE_ON_INSTALL AS SYSDBA

연결되었습니다.

SQL> SELECT SID, SERIAL#, USERNAME FROM V$SESSION;



SID SERIAL# USERNAME

-------- --------


1 1

2 1

3 1

4 1

5 1

6 1

7 169

8 169

9 169

10 169

11 122 SYS

12 193 SCOTT



12 개의 행이 선택되었습니다.



SQL> EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(12, 193, TRUE);



PL/SQL 처리가 정상적으로 완료되었습니다.






파라미터 파일의 USER_DUMP_DEST에 명시된 경로로 가보면 추적 파일이 생성된 것을 볼 수 있다.

USERNAME: SCOTT, SID: 12, SERIAL#: 193 사용자의 세션으로 이동한다.



SQL> SHOW USER

USER은 "SCOTT"입니다

SQL> REM USERNAME: SCOTT, SID: 12, SERIAL#: 193

SQL> SELECT * FROM EMP;



EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO

-------- ------ ----- ------ ---- ------ --------


7369 SMITH CLERK 7902 80/12/17 800 20

7499 ALLEN SALESMAN 7698 81/02/20 1600 300 30

7521 WARD SALESMAN 7698 81/02/22 1250 500 30

7566 JONES MANAGER 7839 81/04/02 2975 20

7654 MARTIN SALESMAN 7698 81/09/28 1250 1400 30

7698 BLAKE MANAGER 7839 81/05/01 2850 30

7782 CLARK MANAGER 7839 81/06/09 2450 10

7788 SCOTT ANALYST 7566 87/04/19 3000 20

7839 KING PRESIDENT 81/11/17 5000 10

7844 TURNER SALESMAN 7698 81/09/08 1500 0 30

7876 ADAMS CLERK 7788 87/05/23 1100 20

7900 JAMES CLERK 7698 81/12/03 950 30

7902 FORD ANALYST 7566 81/12/03 3000 20

7934 MILLER CLERK 7782 82/01/23 1300 10



14 개의 행이 선택되었습니다.



SQL> SELECT * FROM DEPT;



DEPTNO DNAME LOC

-------- ------------


10 ACCOUNTING NEW YORK

20 RESEARCH DALLAS

30 SALES CHICAGO

40 OPERATIONS BOSTON



SQL> REM 추적파일이 생성된 것을 볼 수 있다.




TKPROF 유틸을 사용하여 추적파일을 보기좋게 만든뒤 살펴보도록 하자. 콘솔로 가서 다음과 같이

한다.



C:\r>tkprof E:\Oracle\admin\ora816\udump\ORA00900.TRC

output = c:\trace.txt



TKPROF: Release 9.2.0.1.0 - Production on 수 Sep 3 22:26:26 2003



Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.



C:\>type trace.txt



Misses in library cache during parse: 1

Optimizer goal: CHOOSE

Parsing user id: SYS (recursive depth: 1)

********************************************************************************



SELECT *

FROM

EMP





call count cpu elapsed disk query current rows

----- -- ---- ------ ------ ------ --------


Parse 2 0.00 0.00 1 0 1 0

Execute 2 0.00 0.00 0 0 0 0

Fetch 4 0.00 0.00 1 4 8 28

----- -- ---- ------ ------ ------ --------


total 8 0.00 0.00 2 4 9 28



Misses in library cache during parse: 1

Optimizer goal: CHOOSE

Parsing user id: 32



Rows Row Source Operation

-------


14 TABLE ACCESS FULL EMP



********************************************************************************



SELECT *

FROM

DEPT





call count cpu elapsed disk query current rows

----- -- ---- ------ ------ ------ --------


Parse 1 0.00 0.00 1 0 1 0

Execute 1 0.00 0.00 0 0 0 0

Fetch 2 0.00 0.00 1 2 4 4

----- -- ---- ------ ------ ------ --------


total 4 0.00 0.00 2 2 5 4



Misses in library cache during parse: 1

Optimizer goal: CHOOSE

Parsing user id: 32




이제 다시 특정 세션레벨에서의 특정 사용자에 대한 추적을 DISABLE시켜보자.



SQL> SHOW USER

USER은 "SYS"입니다

EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(12, 193, FALSE);




SQL> SELECT * FROM DEPT

2 WHERE DEPTNO = 10;



DEPTNO DNAME LOC

-------- ------------


10 ACCOUNTING NEW YORK



SQL>




TRACE파일을 살펴보면 기록이 안된 것을 볼 수 있다.