posted by 박영창 2010/03/31 10:22
 unix 환경에서 perl 을 이용해서 파일내의 문자열 형태의 날짜 형태를 변경할때에는 아래와 같이 사용하면 됩니다.

201003310900%PU.LMIV003C%상품.업무%신계약%심사%장기인심사_처리(단체형)%0%1%49.13%0.006%48.426%%0.697%0.076%0%0.616%
201003310900%TD.AMDP0171%판매.마케팅%영업지원%정보큰바다%우편데이터고객업데이트%0%1%31.904%%0.203%%31.7%31.7%0%0%
201003310900%PU.LMIV003R%상품.업무%신계약%심사%장기인심사_조회(단체형)%0%3%31.876%0.002%30.214%%1.659%0.04%0%1.606%
...

 위와 같은 형태의 아스키 파일에서 앞부분의 timestamp 부분을 db2 가 제공하는 기본 timestamp 포맷인 
YYYY-MM-DD-HH.MM.SS.UUUUUU 형태로 변경해야지 데이터를 통으로 넣기가 수월합니다.

2010-03-31-09.00.00.000000%PU.LMIV003C%상품.업무%신계약%심사%장기인심사_처리(단체형)%0%1%49.13%0.006%48.426%%0.697%0.076%0%0.616%
2010-03-31-09.00.00.000000%TD.AMDP0171%판매.마케팅%영업지원%정보큰바다%우편데이터고객업데이트%0%1%31.904%%0.203%%31.7%31.7%0%0%
2010-03-31-09.00.00.000000%PU.LMIV003R%상품.업무%신계약%심사%장기인심사_조회(단체형)%0%3%31.876%0.002%30.214%%1.659%0.04%0%1.606%
...

이런 형태랄까요?

 보통은 이런 작업에는 sed 를 많이 사용하는 것 같습니다. (cut 을 이용해서도 구현이 가능하지만 cut 을 사용할 경우 파이프를 타고 데이터가 전달되면서 한글 부분에서 간간히 에러를 뱉는 현상이 발생하는 것 같습니다.)

 여튼 제가 찾아본 제일 간단한 방법은 perl 을 사용하는 것입니다.

perl -pi.bak -e 's/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([*]*)/$1-$2-$3-$4.$5.00/g' <filename>

 이런식이죠~
 
 만들어진 결과 파일은 

import from <filename> of del
                modified by codepage=970 usedefaults coldel%
                insert into <tabname>

 로 간단하게 입력이 가능합니다. (import 옵션에서도 timestampformat 을 지정할 수 있는데 왠지 잘 안되더군요.;;)
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
posted by 박영창 2010/02/02 09:08

2010-02-02 //
 장난삼아서 제작했던 초기와 다르게 제대로 붙잡고 전체를 뜯어 고치고 있음.
* 물리 구조를 조회 가능한 카탈로그 정보 (Oracle's dictionary)를 한개의 DB 에 통으로 쌓고
   여기서 얻을 수 있는 정보를 조회하여 DB 접속을 줄여나감.
* iBatis 를 집어넣어서 좀더 깔끔한 코드를 만들수 있도록 수정함.
* CCD 테이블 DDL 생성 이외에 논리 모델 DB를 조회하여 개발계 DDL 생성 기능 추가.
* 논리 모델 DB를 조회하여 comment 태그 자동 생성 기능 추가
* 다수 테이블 DDL 생성을 단일 커맨드로 가능하도록 변경

2009-08-11 //
 이 프로그램을 만든 목적은 정말로... 정말로 단순하게 단지 데이터 변경 작업할때 DDL 만들기를 쉽게 해보자는 이서임.
 (그래서 이름도 db2look 의 패러디 db2cook 임.)

 내가 일하는 회사는 UDB를 이런저런 곳에 사용하는데 EDW MART 구성할때 데이터의 변경 내역을 보관하기 위해
WRS의 CCD 캡쳐라는 기능을 이용한다.

 이 환경을 운영하기 위해서는 결국 원본 테이블의 변경시마다 대상 테이블의 변경을 해야하며, WRS라는 툴의 한계상
테이블이 변경되면 복제 대상 테이블을 변경하는 작업을 하게된다.
 - 여기에 적어봐야 운영하는 입장이 아니면 이해도 안될거고.. -_-;; 대충 마무리

 어쨋든 내 업무중 굉장히 반복적이며, 지루한 작업임에 틀림없기에 이를 자동화하기 위해서 이 툴을 개발을 시작한다.
 기능은 단순하다. DB Catalog 정보를 수집해서 테이블에 알맞는 DDL을 추출해주는 것이다.
크리에이티브 커먼즈 라이선스
Creative Commons License
TAG
posted by 박영창 2009/12/30 06:31
 제가 일하는 곳의 서버에는 붉은성(RedCastle)이라는 커널 보안툴을 필수적으로 설치하나 봅니다. 얼마전까지만 해도 이런 보안툴의 문제점에 대해서 아무런 생각이 없었는데, 이 녀석이 일으키는 문제들이 생각보다 큰 것 같습니다.

 db2 에는 db2pd 라는 번들된 모니터링 툴이있습니다. 이 녀석은 db2 프로세스를 뒤져서 메모리상의 정보를 얻어오는 녀석인데요.

qtdev1:[/usr/local/redcastle/logs]more rclog.01
1       33554947        16777986        1262013633      1262013633      kernel  42.8.162.100    Denied setuid to root on db2pd -
d QTDEVDB -locks wait.::setuid(23):18816:18815:root(0):qtdevins(114):MSA:7:System Admins(2):db2pd -d QTDEVDB -locks wait:db2pd -
d QTDEVDB -locks wait:UXR:0:Unknown(0):18816:root(0):root(0):Deny: [LoginUser=qtdevins(114)]
1       33554945        16777986        1262013633      1262013633      kernel  42.8.162.100    Unauthorized process creation by
 qtdevins.::setresuid(126):18815:18783:qtdevins(114):qtdevins(114):MSA:7:System Admins(2):wc -l:db2pd -d QTDEVDB -locks wait:UXR
:0:Unknown(0):18816:root(0):root(0):Deny: [LoginUser=qtdevins(114)]
....
....

 웃기게도 이녀석이 아무래도 db2pd 의 메모리 액세스를 막아버리는 것 같습니다. : ) - 뒷부분의 로그를 보면 더 process creation violation error 등등의 복잡 다양한 에러를 내 뱉습니다. -

 제가 듣기로는 이 녀석이 리눅스의 SELinux / IBM 티볼리 제품군등하고 비슷한 역할을 하는 국산 제품인 것으로 알고있는데.. (아닐지도 모릅니다만) 프로그램 자체의 완성도가 나쁘다라고 생각하기보다는 아무래도 테스트가 부족한 환경에서 개발된 탓인지 이런저런 문제를 일으킬 소지가 아무래도 많은 녀석인 것 같습니다.

 그렇다고 감사라고 나오면 설치했는지 확인하기때문에 설치는 해야하는 것 같고, 설치를 하면 언제 db2가 이 녀석 때문에 내려갈지 모를 불안감을 안고 가야하는...

 정책설정에서 아무래도 예외가 가능하긴 할 것 같은데 - 설마 보안툴인데 예외 처리가 없진 않을테고.. -_- - 단지 설치 운영의 업무가 명확히 구분된 나름 규모가 있는 곳에서는 지금처럼 운영중인 환경상에 저희도 모르는 채로 설치되서 잘되던 프로그램을 안되게 만들어 버리니... 그런게 문제인 것 같습니다.
저작자 표시 비영리 변경 금지
크리에이티브 커먼즈 라이선스
Creative Commons License
posted by 박영창 2009/01/15 02:34
원래 레드햇 계열 자체를 좋아하지 않았고, 그래서 데비안으로 리눅스를 처음 입문했는데... 얼마전부터 듣기 시작한 DB 관련 강좌들을 실습하려고 보니 결국 CentOS를 설치하게 되네요.


처음 리눅스를 설치하고 공부하기 시작했을 당시에는 이 anaconda 화면이 나온다는 사실 자체로도 엄청나게 열광하면서, 이제는 리눅스도 데스크탑으로 쓸날이 멀지 않았구나 했었죠. (물론, 아직도 데스크탑에 리눅스를 설치해서 파는 곳은 많지 않습니다)

어쨋든 각설하고 11g를 데비안에서 설치했다는 글을 봤지만, 이전에도 그랬듯 결국 설치를 하다보니 이런저런 사소한 에러가 발생하더군요. 역시나 기준이 redhat, suse 같은 녀석들을 기준으로 만들었나봅니다. -_-

이제는 생각하면서 설치하기에는 리눅스 설치를 너무 많이 해봐서... 대충 선택해서 설치했습니다.


삽질하기 싫어서 그냥 레드햇 계열 찾다보니 나온게 이 녀석... 그냥 DVD 버전 토런트로 받아서 설치시작.
우분투를 보다가 이 녀석을 보니 참 초라하네요. 좌우지간, 설치를 하고 오라클 설치를 시작했습니다.
(파티션 관리자가 LVM을 기본으로 동작하는 것 같더군요. 뭐 나야 좋지하면서 그냥 패스)

설치된 결과를 보니 깔끔하긴 하더군요. 우분투처럼 이상한 쓸데없는 프로그램도 설치되어있지도 않고... (서버로 설치했다는 점을 감안해주세요 ㅎㅎ)
yum 이란 녀석이 aptitude 와 거의 유사하게 쓸 수 있군요. 꽤 마음에 듭니다.

예전에 제가 설치했던 레드햇과 다르게 rpm 명령어를 안써도 패키지 관리가 된다는 사실이 너무 좋더군요. -_-;;
뭐 결국 리눅스가 패키지 관리 툴이랑 설정파일, 로그파일 위치만 기억하면 기본적인것은 동일할테니... ㅎㅎ;

단하나 안좋은 점은 미러링 사이트가 적어서 업데이트 속도가 좀 안습...
미러링 사이트를 업데이트 하는 것 조차도 자동화 되있더군요. yum install yum-fastestmirror 를 이용하시면 됩니다.

오라클 설치는 http://refill.egloos.com/4164613 에서 참고해서 설치를 시작했고...

리눅스를 Server 모음으로 설치하니 gcc 가 설치안돼서 링크에서 에러가 발생했다.


일단 숙제부터 해야하는데... 벌써 자야할 시간이군;;

더보기


크리에이티브 커먼즈 라이선스
Creative Commons License