이펙티브 오라클 (2008년)
시스템에 코드를 삽입하라 0 0 679

by 구루비스터디 [2009.04.30]


어플리케이션에 상당한 양의 디버그코드를 포함하라는 의미
  • 디버거없이도 코드를 디버깅할 수 있다.
  • => 추적이벤트가 활성화되면 지원 및 개발 팀이 시스템을 건드리지도 안고도 프로그램을 디버깅할 수 있다.
  • 성능저하를 유발하는 시스템 내의 위치를 알 수 있다.
  • => 이 능력은 다수의 유동적인 구성 요소를 가진 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 등과 같은 시스템이 이벤트 트리거를 이용한 사용자 정의 감사를 사용하는 것이 이들을 확실히 알 수 있는 유일한 방법이다.
"구루비 데이터베이스 스터디모임" 에서 2008년에 "이펙티브 오라클" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3521

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입