728x90

care님 | 2013-09-23 17:51:49


안녕하세요. DB2관련하여 문의사항이있어, 질문드립니다.
agent별 CPU사용양을 알 수 있을까요??
db2top 실행시키고 'l'을 누르면 나오는 화면처럼 cpu사용양을 알고 싶습니다.

고수님들 답변 부탁드립니다~^^

감사합니다.




pajama 2013-09-27 01:33:32
질문을 제대로 이해했는지 모르겠습니다만..
db2pd -agents 명령으로 각 에이전트의 프로세스 ID를 확인하실 수 있습니다. top등을 이용해서 cpu 사용량을 확인하시면 되지않을지요

금선생 2013-09-30 10:11:49
9.5 이후에 프로세스가 스레드로 변경되는데 그와 같은 경우 DB내부에서 cpu time을 기준으로 하여 cpu사용량을 봐야 할 것 같은데 어떤식으로
봐야 할지 감이 잡히지 않네요. 혹시 누가 아시는분 있으신지 저도 궁금합니다.

pajama 2013-09-30 22:41:29
델타값으로 보는 방법이 있습니다.
db2pd -edus interval=5 top=5 -repeat 1

이렇게 했을 때 USR(s) SYS(s) 옆에 USER DELTA SYS DELTA 값이 있습니다. 이 값을 참고하시는 방법도 있습니다.



728x90
728x90

DB는내운명님 | 기타 | 2013-09-16 16:25:25


현재 db2 업무를 하고 있는데요. 

db2exfmt를 사용하여 access plan을 확인하고 있는데요...

전체적으로 어떻게 봐야되는지 몰라서요....

어떻게 하면 좀 더 효율적으로 access plan을 분석할수 있나요? 

고수님들의 답변 부탁 드립니다.




pajama 2013-09-27 02:02:27
복잡한 플랜은 딱히 방법은 없다고 생각합니다. db2look으로 통계정보를 테스트 시스템에 복사해서 cost 값이 커지는 구간을 살펴보고 index변경, runstat 수행, 쿼리 변경등으로 테스트하는 방법이 있겠지요


728x90
728x90

DB는내운명님 | 2013-09-07 19:20:37


db2분야에서 업무을 하고 있습니다.

Stored procudure 의 개념에 대해 정확히 알고 싶습니다.

여러 선배님들에게 물어봤지만.. 정확한 대답을 듣지를 못했습니다.

여러 고수님들의 조언 부탁 드립니다.

감사합니다.




pajama 2013-09-08 11:37:34
stored procedure는 비지니스 로직을 sql로 구현한 오브젝트 입니다. 자바나 C, SQL등으로 구현할 수 있습니다. 프로시저를 생성하면 컴파일되어 패키지로 저장이 되는데, 프로시저가 호출될 때 컴파일 된 패키지(섹션)가 실행이 되므로 성능면에서 유리합니다.
데이터에 변경이 많이 일어났을 때는 해당 프로시저에 대한 패키지를 리바인드 해주는 것이 일반적인 관리방법입니다.

현지수 2013-09-23 17:00:30
stored procedure(이하 SP)는 업무처리 프로그램을 DB에서 SQL을 중심으로 구현한 DB object 입니다.
프로그램을 DB에서 처리하므로써 client에서 처리부하가 줄어들고, 데이터를 client로 보내기 위한 네트워크 부하도 줄어드는 장점이 있습니다.
단점으로는 프로그램을 DB와 Application 양쪽에서 구현하기 때문에 유지보수에 어려움이 있고, sp를 구현하는 언어가 DBMS 벤더마다 차이가 있기 때문에 DB에 종속성이 생기므로 sp를 무분별 하게 사용하는 것은 자제하실것을 권고드립니다.



728x90
728x90

jip102님 | 2013-09-03 20:10:24


안녕하세요. 관련된 사항에 대해 질문을 드리고자 글을 올립니다.
DBMS : DB29.5 Fixpack10 
WAS    : Tmax의 JEUS
을 사용하고 있습니다.
application을 모니터링하다보면 
appl Name        :  db2jcc_application
appl Status        :  Executing
Stmt operation  :  Sql Prepare
인데 이게 "Lock Waiting" 을 많이 유발합니다.(Lock Holder)
관련하여 "Sql Prepare" 의 상태가 어떤일을 하는지 Tool 이나 snapshot을 떠보아도 보이지 않는데,
이게 왜 이렇게 Lock Wating을 유발할까요? 




pajama 2013-09-04 00:40:53
안녕하세요. sql prepare라고 하면 sql문을 실행하기 위한 준비작업이라고 보시면 됩니다.
db의 카탈로그 테이블을 참조할때 내부적으로 Lock을 사용하기 때문에 다른 세션에서 Lock Waiting이 발생할 수 있습니다.


728x90
728x90

jnmallcom님 | 개발 | 2013-09-01 17:38:12


php에서 갑자기
odbc_connect() 함수에서 10초 딜레이가 발생합니다.
거의 정확하게 10초 입니다.

0.1초 걸려야 하는데, 왜 그럴까요..




pajama 2013-09-01 22:54:59
가능하시다면 db2 클라이언트에서 리모트서버로 연결테스트를 해보십시오.
그리고 iptables, 방화벽을 확인해보시기 바랍니다.

jnmallcom 2013-09-01 23:44:03
동일 클라이언트 서버에 php와 jsp 설치되어 있는데 php에서 odbc_connect()함수 호출하면 10초 지나서 커넥션되요. jsp에서는 바로 커넥션되고.

pajama 2013-09-02 00:50:27
jsp는 jdbc드라이버, odbc는 db2 cli 드라이버로 접속하기 때문에 접속방법이 다릅니다.
jsp에서 정상적으로 접속이 되신다고 하니 db에 이상은 없는 걸로 보이는데요.
클라이언트 환경에서 CLI/ODBC bind 파일을 다음과 같이 db2 bind 명령으로 수행한후 다시 확인해보세요. (DB2 9.7버전 기준입니다)

db2 bind ~/sqllib/bnd/@db2cli.lst blocking all sqlerror continue messages cli.msg grant public

그 문제가 아니라면 DB2 클라이언트에서는 DB 카탈로그 내역, db2cli.ini 파일 설정을 살펴봐야 할것같습니다.

참조
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.apdv.cli.doc/doc/t0006343.html



728x90
728x90

DB는내운명님 | 2013-08-29 17:42:54


db2 관해서 검색 중에...

$ db2logsForRfwd DB2TSCHG.HIS –all

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

Log file number : S0000000.LOG

First New Record LSN : 00000138800C

Log Extent Tail LSN : 000001770000

Backup End Time Stamp : 0

Flags : 107

pID : 1209781597 2008-05-03-02.26.37.000000 GMT

cID : 1215376321 2008-07-06-20.32.01.000000 GMT

Tablespace ID :

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

Log file number : S0000001.LOG

First New Record LSN : 00000177000C

Log Extent Tail LSN : 000001B58000

Backup End Time Stamp : 0

Flags : 107

pID : 1215376321 2008-07-06-20.32.01.000000 GMT

cID : 1215376322 2008-07-06-20.32.02.000000 GMT

Tablespace ID :

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

Log file number : S0000002.LOG

First New Record LSN : 000001B5800C

Log Extent Tail LSN : 000001F40000

Backup End Time Stamp : 0

Flags : 107

pID : 1215376322 2008-07-06-20.32.02.000000 GMT

cID : 1215376323 2008-07-06-20.32.03.000000 GMT

Tablespace ID : 0 2

---------------------------------------------------------------------------
DB2TSCHG.HIS 파일을 이용해 LSN과 timestamp를 조회하는 중입니다.

설명으로는 LSN과 timestamp를 조회할수 있다고 합니다. 그런데 결과에 back end timestamp가 0으로 나와있습니다. 

왜 back end timestamp가 0으로 나오는지 궁금합니다. 

그리고 LSN과 TIMESTAMP를 동시해 조회할 수 있는 명령어는 $ db2logsForRfwd DB2TSCHG.HIS –all -> 이 명렁어가 맞나요?

아님 다른 명렁어가 있나요?

고수님들의 답변 부탁 드립니다.




pajama 2013-08-29 18:56:54
list backup history 명령에서 필요한 로그파일 번호가 표시되어있습니다.

backup end time stamp는 리스토어 할때 마지막에 필요한 로그파일에 기록되는 것 같습니다.

백업했을 때 아래와 같이 로그파일 2번까지 백업이 되었습니다.


Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
-- --- ------------------ ---- --- ------------ ------------ --------------
B D 20130829182137001 N D S0000002.LOG S0000002.LOG
----------------------------------------------------------------------------
Contains 5 tablespace(s):

00001 SYSCATSPACE
00002 USERSPACE1
00003 IBMDB2SAMPLEREL
00004 IBMDB2SAMPLEXML
00005 SYSTOOLSPACE
----------------------------------------------------------------------------
Comment: DB2 BACKUP SAMPLE onLINE
Start Time: 20130829182137
End Time: 20130829182142
Status: A
----------------------------------------------------------------------------
EID: 10 Location: /home/db2inst1


백업이 끝난 시점이 기록된 로그파일에는 아래와 같이 time stamp 값이 기록되었습니다.

----------------------------------------------------------
Log file number : S0000001.LOG
First New Record LSN : 0000000002710010
Log Extent Tail LSN : 0000000002AFC000
Backup End Time Stamp : 0
Flags : 107
pID : 1377763120 2013-08-29-07.58.40.000000 GMT
cID : 1377763121 2013-08-29-07.58.41.000000 GMT
Tablespace ID :
----------------------------------------------------------
Log file number : S0000002.LOG
First New Record LSN : 0000000002AF8010
Log Extent Tail LSN : 0000000002EE4000
Backup End Time Stamp : 521f12a6
Flags : 107
pID : 1377763121 2013-08-29-07.58.41.000000 GMT
cID : 1377763122 2013-08-29-07.58.42.000000 GMT
Tablespace ID : 0 3
----------------------------------------------------------


매뉴얼에서는 해당 내용을 찾을 수가 없네요.

DB는내운명 2013-08-30 08:59:21
답변 감사합니다. 그러면 로그 시퀀스 넘버 하고 타임스탬프를 동시해 조회할수 있는 명령어는 없는건가요?

pajama 2013-08-30 11:33:39
다른 유틸리티나 솔루션이 있을지도 모르겠습니다만 말씀하신 명령으로 보시는게 맞을 것 같습니다.

-all 옵션으로 했을 때
해당 로그파일의 lsn 범위 (First New Record LSN, Log Extent Tail LSN),
해당 로그파일의 timestamp 범위 (pID, cID)
를 참조하시면 되겠습니다.

아마 찾으셨을지 모르겠습니다만 다음 블로그 내용을 참고하십시오.

http://blog.naver.com/darkich/140057050670
http://radheshk.blogspot.kr/2008/07/peek-on-db2-log-record.html



728x90
728x90

SON님 | 2013-08-29 16:27:18


안녕하세요?

HADR 구성 테스트 중입니다.

Primary 서버의 DB2 계정은 db2inst1 으로 구성하였고,
Standby 서버의 DB2 계정은 db2inst2 로 구성하였습니다.

Primary 에서 Sample DB 에 대해 HADR 구성은 잘 되었는데,
Standby 에서 Readonly 로 접속하여 조회를 해보니, 오류가 발생하네요.
(테스트용 테이블로 'test' 를 만들었습니다,)
 
select * from test 를 수행하니, 'test' 파일을 찾지 못한다고 나오고,
select * from db2inst1.test 라고 수행하니 권한이 없다고 나옵니다.

HADR 구성시 Primary 와 Standby 의 OS 계정명을 동일하게 하면 해결될거 같긴 합니다만,
다르게 할 경우에도 데이터가 조회 가능하게 할 수 있을까요?




pajama 2013-08-29 17:35:14
인포센터 노트에 보면 인스턴스명이 같을필요는 없다고 합니다.

Determine the host name, host IP address, and the service name or port number for each of the HADR databases.
If a host has multiple network interfaces, ensure that the HADR host name or IP address maps to the intended one. You need to allocate separate HADR ports in /etc/services for each protected database. These cannot be the same as the ports allocated to the instance. The host name can only map to one IP address.

Note: The instance names for the primary and standby databases do not have to be the same.

권한은 primary에서 standby 인스턴스명인 db2inst2에 아래와 같이 권한을 주시면 됩니다.

grant select on db2inst1.test to user db2inst2


SON 2013-08-30 10:53:05
자세한 설명 감사합니다~



728x90
728x90

스캇님 | 쿼리 | 2013-07-29 12:00:39


안녕하세요. db2 as400을 사용하고 있습니다. 오라클 같은경우는 lead 함수 이용해서 바로 될것 같은데 잘 되지 않네요.
아래와 같은 쿼리는 어떻게 만들어야 되나요? 

고수님들 한수 부탁 드리겠습니다
.

테이블 : emp 

sdate

sabn

etc

20121022

10000

휴가

20130121

10000

휴직

20130601

10000

경영지원


아래의 결과로 도출

sdate

edate

sabn

etc

20121022

20130121

10000

휴가

20130121

20130601

10000

휴직

20130601

현재

10000

경영지원




pajama 2013-07-29 13:41:06
참고하시기 바랍니다.

with emp(sdate,sabn,etc)
as (
values ('20121022',10000,'휴가')
union all values ('20130121',10000,'휴직')
union all values ('20130601',10000,'경영지원')
)
select
sdate,
lead(sdate,1,'현재')over(order by sdate) as edate_1,
coalesce(min(sdate)over(partition by 1 order by sdate rows between 1 following and 1 following), '현재') as edate_2,
sabn, etc
from emp;


http://stackoverflow.com/questions/8124756/teradata-equivalent-for-lead-and-lag-function-of-oracle
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000780.htm

스캇 2013-07-29 15:32:10
ㅠㅠㅠ. 안되네요. 근데. coalesce(min(sdate)over(partition by 1 order by sdate rows between 1 following and 1 following), '현재') as edate_2, -> 빼야 되지 않나요? 제가 원하는 결과는 sdate,edate,sabn,etc 만 있으면 되는데요..

pajama 2013-07-29 17:24:07
lead 함수는 비교용으로 만든것인데 빼고 실행하셔도 안되시는지요? 

with emp(sdate,sabn,etc)
as (
values ('20121022',10000,'휴가')
union all values ('20130121',10000,'휴직')
union all values ('20130601',10000,'경영지원')
)
select
sdate,
coalesce(min(sdate)over(partition by 1 order by sdate rows between 1 following and 1 following), '현재') as edate
sabn, etc
from emp;

스캇 2013-07-29 20:30:09
감사드립니다. 많은 도움 되었습니다. 항상 행운이 있기를 기원합니다.



728x90
728x90

DB는내운명님 | 2013-07-18 18:32:26


db2를 배우고 있습니다. 

v 9.7.7. 일때  

db2 "decribe select nvl('20130101010101', sysdate) from sysibm.sysdummy1"
 
결과 는 SQL TYPE  이 VARCHAR로 나왔습니다. 

db2 v9.7.4 에서는 SQL TYEP이 TIMESTAMP로 나옵니다. 

왜 V9.7.7 에서는 SQL TYPE이 VARCHAR로 나오는 걸까요? 




pajama 2013-07-19 02:17:10
안녕하세요. 테스트를 하다가 저도 혼동이 왔는데요 정리를 해보겠습니다.
테스트 환경은 DB2 9.7, 오라클호환모드 설정했습니다.

우선 예로 들어주신 쿼리 결과는 아래와 같았습니다.

① DB2 9.7.0.0
db2 "select nvl('20130101010101', sysdate) from sysibm.sysdummy1"

1
-------------------
2013-01-01-01.01.01


② DB2 9.7.0.8
$ db2 "select nvl('20130101010101', sysdate) from sysibm.sysdummy1"

1
-------------------
20130101010101

결과가 이렇게 나오니 앞의 것은 TIMESTAMP, 뒤의 것은 VARCHAR가 나올 수 밖에 없었습니다.

DB2의 NVL은 COALESCE 함수와 같습니다. 9.5부터 동일하게 사용되었습니다.
아시겠지만 오라클에서는 COALESCE와 NVL의 기능이 좀 다른데요. DB2는 같아서 혼동이 왔습니다.
어쨌든 결과적으로 COALESCE 함수를 썼을때 동일한 결과가 출력됩니다.

그리고 위의 결과
2013-01-01-01.01.01 이것이 나온이유는 대체..

인포센터를 좀 천천히 읽어보니 인수는 호환가능해야 한다고 합니다. 그리고 필요한 경우 변환이 된다고 합니다. sysdate는 current timestamp와 동일하기 때문에 20130101010101이 2013-01-01-01.01.01과 같은 TIMESTAMP 형식으로 변환이 되는 것 같습니다. 어느것을 기준으로 변환이 되는지는 모르겠습니다. 가능하면 같은 타입을 쓰는 것이 좋겠네요.
예) db2 "select coalesce('20130101010101', cast(sysdate as varchar)) from sysibm.sysdummy1"

그러면 밑에 NVL은 왜 20130101010101이 나왔는지..
오라클호환모드로 DB가 작동하기 때문에 오라클의 NVL함수와 동일하게 작동하기 때문에 그렇습니다.
사실 인포센터나 Developerworks를 보면 9.7버전 Fix Pack 5부터 오라클호환모드에서 NVL2 등의 오라클 함수를 지원한다고 되어있는데요.
아마 이시점부터 오라클 방식의 NVL함수도 같이 지원을 하는 것으로 보입니다.
Fix Pack 4까지는 오라클 호환모드를 켜도 DB2의 NVL(=COALESCE)함수로 작동하는 것으로 보이고요.

썩 정리가 잘 안된것 같습니다.
제가 잘못 알고 있는 부분은 다른분들께서 알려주시면 좋겠습니다.
참고하세요.


- NVL scalar function
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0052627.html
- COALESCE scalar function
http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0000780.html
- DB2 10: Run Oracle applications on DB2 10 for Linux, UNIX, and Windows
http://www.ibm.com/developerworks/data/library/techarticle/dm-0907oracleappsondb2/


728x90
728x90

MRRRRR님 | 개발 | 2013-07-05 18:09:17


이것이 가능 한 것인지요? ㅠㅠ

알고 싶습니다.!




pajama 2013-07-05 18:48:22
방법은 두가지가 있습니다

1. sqlecrea API를 사용해서 데이터베이스를 만드는 방법인데 아래 pdf에서 검색해보시면 dbcreate.c 등의 데모소스에 대한 내용이 있습니다.
2. 스트립트를 호출해서 create database 문을 실행하는 방법

http://publib.boulder.ibm.com/infocenter/db2luw/v10r1/topic/com.ibm.db2.luw.admin.dbobj.doc/doc/t0004916.html
http://public.dhe.ibm.com/ps/products/db2/info/vr97/pdf/ko_KR/DB2AdminAPIRef-db2b0k970.pdf


728x90

+ Recent posts