DB2에서 백업은 데이터베이스 범위에서 이뤄진다. DB보다 큰 범위인 인스턴스 범위에서의 백업은 db2 get dbm cfg 나 db2set –all 등을 통해서 백업받는게 보통인데, 버전이 올라갈 수록 DB 윗단의 백업으로서 사용할만 해지는 것 같다.(추출되어지는 정보가 많아짐)

1. db2rspgn

DB2 식 용어로는 “응답 설치” 방법으로 일컬어지면서 등장하는 “응답파일 생성 도구”이다. “응답 파일 설치는” 쉽게 말해 “묻지마 설치”라고 표현할 수 있을 것 같다. 위 명령어를 사용하면 DB2 설치에서 OS 계정 생성, DB2 설정, DB 생성까지 일괄 실행할 수 있는 파일이 생성된다.

(많진지 오래되서 기억이 가물해졌지만) oracle도 인스턴스 및 DB 생성 시 “설정 파일”을 이용해서 생성하는 법이 있었던 것 같은데 그것과 비슷하다고 하지 않을까 싶다.

설치에 필요한 모든 정보들 파일에 담아 놓고, “어떻게 설정해 놓느냐”에 따라 한번의 실행으로 더이상 손댈 필요없이 설치 작업이 진행된다.

이런 설치는 보통 HADR이나 DPF구성 시, 여러 머신에 동일하게 설치할 때 사용하면 좋지 않을까 싶다.

명령어

db2rspgn –d 생성경로 –i 인스턴스명

위 명령어를 수행하면 2개의 파일이 생성된다. (rsp 파일, ins 파일)

DB 생성 및 설정작업 후 응답 파일을 생성하면 이와 관련한 설정값도 다 추출되서 응답 파일이 저장된다.

 

설치 명령어

설치이미지/db2setup –r 응답파일경로/응답파일.rsp

PoC나 BMT 작업으로 여러 대 설치를 해야될 일이 있어서 활용을 해 보았는데, 약간 불편한 사항이 있어서 계속 써지지는 않았다.

추출 후, rsp 파일에서 “계정 비밀번호 설정” 과 라이센스 조항 “승인” 설정을 해 주어야 한다.

이외 별도의 파일시스템(디렉토리 및 파티션)에 사용자 계정이나 DB를 생성한 경우, 그 접근할 수 있도록 사전에 소유권 변경작업이 필요하다.

 

2. db2cfexp

db2repgn의 작업은 db2cfexp 도구와 겹치는 부분이 존재한다.

configuration 을 export하는 도구로서 수행 시 db2set 과 dbm cfg 변수값들이 추출되어 저장된다.

추출 옵션이 3가지 (backup, maintain, template) 존재하지만 backup을 덮어놓고 쓰는 편이다.

 

명령어

db2cfexp 백업파일명 backup

백업파일명은 임의적이고, 실행 위치에 파일이 생성된다.(인스턴스 계정으로 수행)

관리 용으로 설정(profile)작업을 백업받는 용도로 사용할 수도 있지만, db2 fixpack 적용 시 백업 후,인스턴스 업데이트 후 설정 값을 다시 적용하고자 할 때 사용할 수 있겠다.

 

적용

db2cfimp 백업파일명

위 함수는 V9.7 FixPack4에서 새롭게 소개된 함수이다. 특정 컬럼 기준으로 그룹의 문자열 값 세트를 하나의 문자열로 집계하도록 하는 기능을 한다.

고객사쪽에서 문의가 와서 고민하다 위 함수가 생각이 나서 소개를 해 주었는데, 나름 의미가 있을 듯 해서 블로그에도 남겨 본다.

저장된 데이터

C1          C2          C3
----------- ----------- ---
          1           1 A
          1           1 B
          1           1 C
          1           2 D
          1           3 E

 

원하는 결과값

C1          C2          C3_SUM
----------- ----------- ------------
          1           1 A,B,C
          1           2 D
          1           3 E

 

LISTAPP() 함수를 쓰면 다음과 같이 간단한 SQL로 구현된다.

select c1,
         c2,
         substr(listagg(c3,',') within group(order by c3),1,12) as c3_sum
from t1
group by c1, c2

결과값

C1          C2          C3_SUM
----------- ----------- ------------
          1           1 A,B,C
          1           2 D
          1           3 E

 

만일 V9.7 FixPack4 미만이라 사용할 수 없는 경우라면?

본 SQL 경우에는 3개의 문자를 붙이는 경우가 최대라고 가정하고 구현된 SQL이다. Stored Procedure 나 사용자 함수(UDF)를 만들어서 구현한다면 조금은 간단한 SQL 되지 않을까 싶다.

select a.c1, a.c2, a.c5||','|| b.c3 c3
from t1 b,
(select a.c1, a.c2, a.c3, t1.c3 c4, a.c3 || ',' || t1.c3 c5
from t1,
    (select a.c1, a.c2, b.c3
           from (select c1,c2,count(c3) cnt from t1 group by c1, c2 having count(c3) > 1 ) a,
                (select c1,c2,c3 from t1)b
     where a.c1=b.c1 and a.c2=b.c2 fetch first 1 rows only) a
where a.c1 = t1.c1 and a.c2 = t1.c2 and a.c3 <> t1.c3  fetch first 1 rows only) a
where a.c1=b.c1 and a.c2=b.c2 and b.c3 <> a.c3 and b.c3 <> a.c4

union all

select c1, c2, max(c3) c3 from t1 group by c1,c2 having count(c3) = 1

결과값

C1          C2          C3
----------- ----------- -----------
          1           2 D
          1           3 E
          1           1 A,B,C

  3 record(s) selected.

 

테스트한 table 및 insert 문

db2 "create table t1 (c1 integer, c2 integer, c3 varchar(3))"
db2 "insert into t1 values (1,1,'A'),(1,1,'B'),(1,1,'C'),(1,2,'D'),(1,3,'E')"

대부분의 DBMS는 메모리 영역을 3가지로 분류를 한다.

DB2 입장에서는 인스턴스 영역, 데이터베이스 영역, Application 영역 식으로 표현할 수 있겠지만, 다른 DBMS인 경우는 다르게 표현될 것이다.

DBM CFG 및 DB CFG의 메모리 설정 값은 총 값(인스턴스 메모리가 DB 공유메모리를 포함함)을  의미하지만, 모니터링을 통한 각 값은 분리되어 확인이 된다.

V8.x 에서는 db2mtrk를 통하여 확인을 할 수 있었지만, V9.x 부터는 뷰(snapdbm_memory_pool 등)를 통해서 확인할 수 있다.

인스턴스 사용 메모리 크기

명령어

db2 “db2mtrk -i –v”                 

결과

Tracking Memory on: 2011/12/26 at 15:35:25

Memory for instance

   Other Memory is of size 30212096 bytes
   FCMBP Heap is of size 15859712 bytes
   Database Monitor Heap is of size 327680 bytes
   Total: 46399488 bytes


명령어

db2 +p –tv << EOF

select pool_id, sum(pool_cur_size) instance_mem_tsize
from sysibmadm.snapdbm_memory_pool
group by grouping sets(pool_id,())
with ur;

EOF

결과

POOL_ID        INSTANCE_MEM_TSIZE 
-------------- --------------------
-                          21561344
FCMBP                        851968
MONITOR                      327680
OTHER                      20381696

 

데이터베이스 메모리 크기

명령어
db2 “db2mtrk -d –v”

결과

Memory for database: SAMPLE

   Backup/Restore/Util Heap is of size 65536 bytes
   Package Cache is of size 786432 bytes
   Other Memory is of size 196608 bytes
   Catalog Cache Heap is of size 393216 bytes
   Buffer Pool Heap (1) is of size 8650752 bytes
   Buffer Pool Heap (System 32k buffer pool) is of size 851968 bytes
   Buffer Pool Heap (System 16k buffer pool) is of size 589824 bytes
   Buffer Pool Heap (System 8k buffer pool) is of size 458752 bytes
   Buffer Pool Heap (System 4k buffer pool) is of size 393216 bytes
   Shared Sort Heap is of size 0 bytes
   Lock Manager Heap is of size 17629184 bytes
   Database Heap is of size 19791872 bytes
   Application Heap (13) is of size 65536 bytes
   Application Heap (12) is of size 65536 bytes
   Application Heap (11) is of size 196608 bytes
   Application Heap (10) is of size 65536 bytes
   Application Heap (9) is of size 65536 bytes
   Application Heap (8) is of size 65536 bytes
   Application Heap (7) is of size 65536 bytes
   Applications Shared Heap is of size 458752 bytes
   Total: 50855936 bytes


명령어
db2 +p –tv << EOF

select substr(db_name,1,8) dbname,
       pool_id,
       sum(pool_cur_size) db_mem_tsize
from sysibmadm.snapdb_memory_pool
group by grouping sets(db_name, pool_id)
with ur;
EOF

 

Application & Private 사용 메모리 크기

명령어
db2 “db2mtrk –a –p  –v”

결과

Application Memory for database: SAMPLE

   Applications Shared Heap is of size 524288 bytes
   Total: 524288 bytes

  Memory for application 13

   Application Heap is of size 65536 bytes
   Other Memory is of size 196608 bytes
   Total: 262144 bytes

  Memory for application 12

   ……………

Memory for agent 33

   Other Memory is of size 196608 bytes
   Total: 196608 bytes

Memory for agent 32

   Other Memory is of size 196608 bytes
   Total: 196608 bytes

    ………………


명령어
db2 +p –tv << EOF

select substr(db_name,1,8) dbname, pool_id, sum(pool_cur_size) app_mem_tsize
from sysibmadm.snapagent_memory_pool
group by grouping sets(db_name,pool_id)
with ur
;

EOF

+ Recent posts