Oracle 사용쿼리 추출문의 0 1 3,870

by 코리아 [2014.06.09 13:07:02]


안녕하세요

Oracle 사용쿼리 추출에 대한 문의드립니다.

 

프로그램에서 사용하고있는 각각의 사용쿼리의 추출이 가능한가요?

 

구글링중 쿼리추출문을 찾아보았습니다.(참고용)

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

set pages 40
col program for a25
col username for a10
col machine for a15
col module for a25
col spid for a6
col sid for 99999
select a.username,a.program,a.machine,a.module,b.spid,a.sid,a.serial#,a.status,
       c.sql_text
  from v$session a,
       v$process b,
       v$sql     c
   where a.username = 'TEST'
   and b.addr = a.paddr
   and a.sql_hash_value = c.hash_value(+)
   and a.sql_address    = c.address(+);

where조건의 username = 'TEST'에 대한 SQL_TEXT에 사용? 쿼리문이 있습니다.

이 해당쿼리문은 사용빈도가 높은 사용쿼리라고 봐야하나요? 

 

제가 원하는 데이터는 프로그램에서 사용하고있는 전체사용쿼리를 추출하고자하는데 방법이 궁금합니다.

툴을 이용하거나 혹은 쿼리문으로 추출이 가능한지 고수님들 답변 부탁드립니다...

by 비주류 [2014.06.09 14:10:08]

http://wiki.gurubee.net/display/CORE/V$SQL

 

V$SQL 과 관련해서는 위 글 참고하시고요,

결론적으로 소스없이 프로그램의 SQL 문 100%를 얻기는 어려울 것 같습니다.

 

하지만, 사용되는 대부분의 SQL은 위에서 언급하신 SQL문을 조금 수정하거나 다른 방법을 통해 어느정도 뽑아볼 수 있을 것 같습니다. (위 sql 문은 특정 username 으로 접속한 세션으로 실행중인 sql문을 보여줍니다. v$session 을 이용하면 username 조건을 줄 수 있지만, 현재, 마지막 sql 실행 정보만 얻을 수 있는 한계가 있습니다.)

 

1) 프로그램 구분

프로그램에서 별도로 module 을 저장하고 있다면 v$sql의 module 조건을 추가하거나

(가능하다면 공통 connection 모듈쪽에 dbms_application_info.set_module 추가)

별다른 방법이 없다면 v$sql의 parsing_schema_name 으로 제한할 수 있을 것 같습니다.

(사용자의 툴을 통해 날린 ad-hoc SQL 도 들어갑니다.)

select sql_id,executions,last_active_time,sql_text FROM v$sql where parsing_schema_name = :schema_name

 

2) SQL 수집

현재 AWR 을 사용중이라면 dba_hist_sqlstat (성능 및 기타 정보), dba_hist_sqltext (SQL 문) 를 조회해보셔도 되겠습니다. 하지만 snapshot 된 정보라서 전체 SQL문을 갖고 있다는 보장은 없습니다.

 

AWR 없이 직접 수집하려면, 특정 기간동안 unique(sql_id 나 hash_value로 구분)한 SQL문을 주기적으로 저장하는 job 을 만들고 (조금 무리가 있지만...)업무 화면의 모든 케이스를 돌려보면서 수집해볼 수 있을 것 같습니다. (sql_id, hash_value 값 충돌 무시)
 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입