고객사의 connect by 관련 지원하다 C 소스 코드를 컴파일 해보는 작업을 잠시 해 보게 되었다.
윈도우 환경에서 사용되어 C 컴파일러가 필요하여 지인을 통해 무료 컴파일러인 MinGW 다운받아 설치를 했다.
그러나 bldrtn 을 이용해서 컴파일은 되지 않았다. (cl.exe 오류)
왜 오류가 날까? bldrtn을 열어보니 기본 컴파일러로 Visual Studio C++ 를 사용하도록 BLDCOMP 변수에 박여 있었다.
즉 Visual Studio를 설치해야 bldrtn을 구동할 수 있게 셋팅되어 있던 것…
MinGW 및 기타 gcc 들을 설치해 봐야 “어떤 값"을 넣어 “기본 컴파일러" 설정해야 하는지 알 수 없기에 Trial version으로 VS를 설치하였다.
물론 VC++이 설치되어 있다고 bldrtn이 실행되지 않는다.
환경변수 설정이 필요하다. (내 컴퓨터 > 속성 > 고급 시스템 설정 > 고급 탭 > 환경 변수)
1) INCLUDE 변수에 경로 추가 (stdio.h 에러)
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include
2) CLASSPATH, LIB 변수에 경로 추가
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\lib (msvcrt.lib 에러)
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib (kernel132.lib 에러)
SDK가 설치 되지 않은 경우 kernel132.lib 에러가 발생하므로 Visual Studio 업데이트 파일 실행 후 kernel132.lib 라이브러리 확인 필요
이후 bldrtn 이 정상적으로 수행되었다.
C:\Program Files\IBM\SQLLIB\samples\c>bldrtn connect_by connect_by.c connect_by.def(2) : warning LNK4017: DESCRIPTION statement not supported for the |
오라클의 connect by 구문은 DB2 V9.7 이상부터 지원되고 있다.
(V9.5에서도 오라클 호환성 변수가 적용되어 지원은 된다.)
표준 recursive SQL 인 Common table 을 이용해서는 “위계/계층"의 순서를 살릴 수가 없다.
(common 테이블 결과는 위계/계층별로 정렬되어 보여 줌)
성능 이슈가 제기되어 DB2 의 connect by의 대안으로 ibm developer works에 소개된 c로 만든 connect by였다.
(참고: http://www.ibm.com/developerworks/data/library/techarticle/dm-0510rielau/ )
connect by 대상 테이블에 다른 테이블이 조인되어 사용되는 경우 siblings by 처리 시 미묘하게 값 정렬이 틀려진다.
성능은 좋았지만 적용할 수가 없었다.
현재까지 DB2에서 제공되는 connect by 는 self join 방식에서는 성능 문제가 없지만, 다른 테이블과 join 되는 경우 성능이 많이 느려지는 느낌을 받았고, self join 이여도 siblings by 를 추가하는 경우 느려지는 느낌을 받았다.
다른 테이블과의 join이 발생하는 경우, connect by 처리를 inline view(subquery)로 처리하여 되도록 self join 만 하도록 해야 성능 저하를 막을 수 있을 것으로 보인다.
'Note' 카테고리의 다른 글
[개발] db2dclgn (선언부 생성기) (0) | 2013.12.17 |
---|---|
[개발] db2jcc 와 db2jcc4 의 차이 (0) | 2013.11.28 |
[SQL] 오라클 호환성에 따른 문자열 길이 변화 (0) | 2013.10.31 |
[보안] 인스턴스 구성변수(dbm cfg) authentication (0) | 2013.10.11 |
[이중화] 로그 쉬핑(shipping)을 통한 복제서버 구성 (0) | 2013.09.26 |