- HOME
- [종료]구루비 DB 스터디
- 2008년 하반기 - 제6차 데이터베이스 스터디
- 이펙티브오라클
- 시스템에 코드를 삽입하라
어플리케이션에 상당한 양의 디버그코드를 포함하라는 의미
- 디버거없이도 코드를 디버깅할 수 있다.
- => 추적이벤트가 활성화되면 지원 및 개발 팀이 시스템을 건드리지도 안고도 프로그램을 디버깅할 수 있다.
- 성능저하를 유발하는 시스템 내의 위치를 알 수 있다.
- => 이 능력은 다수의 유동적인 구성 요소를 가진 N-계층 어플리케이션을 작성하고 있는 경우에 특히 유용하다.
asktom.oracle.com에 나타난 추적
- 실제로 NO 파라미터 발견할 수 없었음(2008.08.04일 현재).
- 액세스되는 모든 페이지에 대해 필자가 필요로 하는 정보를 포함하고 있는감사 추적 레코드를 매번 남긴다.
- 어플리케이션에 추적가능한 디버그코드와 감사코드를 포함시킨다.
- 감사데이터와 디버그코드로 문제발생 시 빠르고 정확한 근거로 문제를 파악할 수 있다.
원격 디버깅을 위한 코드 삽입
- 어플리케이션을 배포하고 난 후 발생하는 문제점을 해결하기 위해서 감사 기능을 추가하라
- 감사기능을 쉽게 사용할 수 있는 구조를 채택하라
아무 곳에나 DBMS_APPLICATION_INFO를 사용하라
다음과 같은 내용을 파악하는데 도움을 줄 수 있다.
- DBMS_APPLICATION_INFO를 이용할 경우 V$SESSION 뷰에 값을 설정 할 수있다.
- => 세션이 무엇을 수행하고 있는가, 어떤 폼이 수행되고 있는가, 어떤 모듈이 수행되고 있는가?
- => 저장 프로시저가 어느 정도 진행되었는가?
- => 일괄 처리 작업이 어느 정도 진행되었는가?
- => 쿼리에 무슨 바인드 변수 값이 사용되고 있는가?
- 100만 개의 행을 대상으로 하는 CREATE INDEX 혹은 UPDATE와같이 장시간(3~5초이상)이 소요되는 명령을 수행하면 동적 성능 뷰인 V$SESSION_LONGOPS에 정보가 쌓인다.
- => 명령의 시작 시각
- => 진행 정도
- => 남은 시간
- V$SESSION_LONGOPS뷰에 값을 설정할 수 있다.
DBMS_APPLICATION_INFO의 사용지침
- SET_CLIENT_INFO 를 사용한다.
- PL/SQL내부에서 SET_MODULE/GET_MODULE을 호출한다. - V$SESSION의 MODULE/ACTION열을 설정한다.
- 2~3초이상 소요되는 모든 루틴에 SET_SESSION_LONGOPS기능을 사용한다.
- DBMS_APPLICATION_INFO sample code
- (Oracle Supplied Packages Guide를 참고)
PL/SQL에 DEBUG.F를 사용하라
애플리케이션에 SQL_TRACE를 사용하라
SQL_TRACE 주요 기능
- I/O작업의 수
- 쿼리의 경과 시간
- SQL의 수행 횟수
웹서비스 와 같이 최종 사용자 세션이 데이터베이스 세션을 공유하는 경우의 TRACE방법
- 어플리케이션에서 사용자정보를 이용해서 TRACE를 활성 또는 비활성시키는 기능을 추가
- 필요한 경우 ALTER SESSION SET SQL_TRACE=TRUE를 수행
- 추적기능이 활성화된 경우 연결을 풀에 반환하기 직전에 SET SQL_TRACE=FALSE를 수행한다.
- 사용자/모듈 별로 작성된 TRACE파일을 TKPROF를 실행함으로써 정보를 확인할 수 있다.
산업표준 API를 사용하라
- JAVA 에서는 J2EE기반의 어플리케이션 전반의 로그기록에 활용될 수 있는 API를 제공한다.
- MS진영에는 없을까?
자신만의 루틴을 작성하라
- 감사로그를 작성하기 위해서 제공되는 기능 중 적합한 것이 없다면 본인의 환경에 맞는 자신만의 루틴을 개발하라.
감사는 욕이 아니다
- 감사 추적은 성능 이슈, 사용 패턴, 그리고 흔히 발생하는 (또는 어쩌다 발생하는) 문제를 지적해 낼 수 있도록 도와주는 유용한 정보를 제공해 준다는 점에서 매우 중요하다.
- 뿐만 아니라 감사는 실제로 사용자들이 애플리케이션을 어떻게 사용하는지 또는 어떻게 애플리케이션을 오용하는지를 알수 있도록 해 준다.
- 필자 왈 "감사는 불필요한 오버헤드로 여기지만 언제나 모든면에서 매우 유용한 것으로 여긴다."
- 감사를 안한다면 ? (기록을 하지 않는다면?) 어떻게 무슨일이 있었는지 알 수 있을 것인가?
- 데이터베이스에 내장된 기능을 사용한 기본적인 감사, 또는 BEFORE CREATE, BEFORE DROP 등과 같은 시스템이 이벤트 트리거를 이용한 사용자 정의 감사를 사용하는 것이 이들을 확실히 알 수 있는 유일한 방법이다.
- HOME
- [종료]구루비 DB 스터디
- 2008년 하반기 - 제6차 데이터베이스 스터디
- 이펙티브오라클
- 시스템에 코드를 삽입하라