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파일을 살펴보면 기록이 안된 것을 볼 수 있다.