안녕하세요
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에 사용? 쿼리문이 있습니다.
이 해당쿼리문은 사용빈도가 높은 사용쿼리라고 봐야하나요?
제가 원하는 데이터는 프로그램에서 사용하고있는 전체사용쿼리를 추출하고자하는데 방법이 궁금합니다.
툴을 이용하거나 혹은 쿼리문으로 추출이 가능한지 고수님들 답변 부탁드립니다...
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문을 갖고 있다는 보장은 없습니다.