오라클(15)
-
오라클 JDBC 에러 17006
자바에서 사용하는 오라클 SQLException은 두 가지가 있다. 하나는 오라클 데이터베이스에서 발생하는 Exception이 있고 또 하나는 오라클에서 제공하는 JDBC 드라이버에 발생하는 JDBC Exection이 있다. 오라클 JDBC 에러는 모두 17로 시작하는 5자리 숫자다. 개발자들이 생각하기에 SQLException은 SQL에서만 발생한다고 믿고 있어서 아무리 SQL을 분석해봐도 에러는 없다. 자바 프로그램에서 SQL만 따로 떼어 수행할 때는 잘 되지만 프로그램 내부에서 호출할 때 17006 에러가 발생해도 계속 SQL만 분석해 보는 헛수고를 하게 된다. import java.sql.*; public class TestOracle { /** * @param args */ public stat..
2011.01.06 -
튜닝 대상 SQL을 추출할 때 ORA-06502 발생
ORA-06502 에러는 변수에 담을 값이 변수의 크기보다 커서 발생하는 문제임 V$SQL에서 SQL_TEXT는 VARCHAR2(1000)으로, SQL_FULLTEXT는 CLOB으로 선언되어 있지만 요즈음 긴 SQL 문장은 1000 자 넘어가는 것은 우스워 보인다. SQL_TEXT 컬럼은 줄을 모두 붙여서 보여주기 때문에 성능튜닝 툴이 제공하는 포맷기능을 이용해야 한다. 반면 SQL_FULLTEXT 컬럼은 SQL_TEXT 컬럼보다 훨씬 큰 값을 담을 수 있지만 쿼리를 해보면 첫 문장에 해당하는 부분만 보여주기 때문에 처음 접한 사람은 SQL_TEXT 컬럼보다 크기가 작다고 느낄지 모르겠다. 하지만 CLOB은 CLOB 답게 읽을 수 있는 패키지를 제공하고 있다. DBMS_LOB.SUBSTR(SQL_FULL..
2010.12.22 -
With 문의 함정
With 문을 사용하는 모드는 두 가지가 존재한다. 하나는 materialize, 또하나는 inline 모드로 사용한다. With 이름 AS (SELECT /*+ inline */ ... ) With 이름 AS (SELECT /*+ materialize */ ... ) 1. materialize는 실체뷰처럼 사용하기 때문에 임시테이블을 create하고 drop하는 과정을 동반한다. 그러므로 OLTP 환경에서 특히나 자주 사용자가 사용하는 쿼리라면 사용하지 않기를 바란다. 사용자가 클릭하면 클라이언트는 DB한테 DDL문을 보내는 것과 같다. 사용자가 많고 빈번하면 임시테이블을 생성하고 DROP하는데 시간이 지체될 수 있기 때문이다. 2. inline 은 assembliy 개발시 공통적인 코드를 따로 분리하..
2010.12.20 -
테이블 컬럼의 선태도를 구하는 쿼리
select column_name ,num_distinct ,num_nulls ,1/num_distinct selectivity ,round(1/num_distinct * t.num_rows,2) cardinality from user_tables t, user_tab_columns c where t.table_name = '고객' and c.table_name = t.table_name order by column_id; 선택도는 각 컬럼의 값의 종류를 전체 로우수로 백분율을 구한 값이고 카디널리티는 백분율에 전체로우수를 곱한 것이다. 전체로우수가 큰 경우에는 선택도가 꼭 정확하지 않을 수 있다.
2010.12.19 -
병렬쿼리를 수행할 때 테이블 큐를 통한 전송량에 편차가 크지 않은지 확인해 볼때 사용하는 쿼리
병렬 쿼리를 수행한 직후 다음 쿼리를 사용하면 병렬 서버 프로세스간 메시지 큐에 전송량이 균등하지 않는지 살펴 볼 수 있다. select dfo_number,tq_id, server_type, process, num_rows, bytes, waits from v$pq_tqstat order by dfo_number ,tq_id ,server_type desc ,process; order by절에 server_type은 QC, Producer, Consumer 이런 식으로 정렬하기 위해서 desc 옵션을 주었다. 참고사이트 http://ukja.tistory.com/286 http://www.pythian.com/news/5379/oracle-parallel-query-sorting-performance-..
2010.12.19 -
오라클 NUMTOYMINTERVAL, NUMTODSINTERVAL함수
두 함수 모두 시간, 날짜의 interval을 date 타입으로 바꾸어 준다. numtoyminterval(number, type of interval) -- type of interval 은 'YEAR', 'MONTH' numtodsnterval(number, type of interval) -- type of interval 은 'SECOND', 'MINUTE', 'HOUR', 'DAY' 예를 들면 select sysdate + numtoyminterval(1, 'MONTH') from dual; -- 현재 날짜에 1 달을 더하라는 의미 select sysdate + numtoyminterval(-1, 'YEAR') from dual; -- 현재 날짜에 1년을 빼라는 의미
2010.12.01