유닉스의 “Cron”, 윈도우의 “예약된 작업”을 사용하여 DB2 관리 작업을 자동화 한다. 보통은 OS의 스케줄링 기능을 이용하는데, DB2 자체에서도 기능이 있는지 문의를 받는 경우가 있다.

기능은 있다. 그러나 권장하지는 않는다.(왜 권장하지 않는지는 글을 읽으면 알게 될 것이다.)

DB2 자체의 작업 스케줄링 기능을 어떻게 설정할 수 있는지 살펴 보자.

Windows에서도 DAS (DB2 Administration Server)라는 용도로 계정을 설치할 때 묻는다. Unix나 Linux 에서는 OS 계정으로 인스턴스나 DAS를 생성하기 때문에 설치 작업 하면서 DAS를 왜 만들어야 하는지 의문을 많이 가졌을 것이다.

이 DAS 가 하는 주 업무가 DB2의 작업 스케줄링을 해주는 것이라 보면 되겠다. 물론 DAS의 개념? 역할?은 이것으로 한정되지는 않는다.

1. 도구 카탈로그 설정

   인스턴스가 dbm cfg 라는 구성 변수를 가지고 있듯이 das도 자체 구성 변수를 가지고 있다. 앞으로 기술되는 명령어는 인스턴스 계정으로 실행하면 확인할 수 있다.

   아무런 설정 작업을 하지 않았다면 다음과 같이 결과가 나온다.

명령어 >>
$> db2 get admin cfg

결과  >>

Administration Server 구성

Location of Contact List (CONTACT_HOST) =

Execute Expired Tasks (EXEC_EXP_TASK) = NO

Scheduler Mode (SCHED_ENABLE) = OFF

SMTP Server (SMTP_SERVER) =

Tools Catalog Database (TOOLSCAT_DB) =

Tools Catalog Database Instance (TOOLSCAT_INST) =

Tools Catalog Database Schema (TOOLSCAT_SCHEMA) =

Scheduler User ID =

도구 카탈로그가 되었다면 다음처럼 몇 개의 변수에 값이 들어가 있을 것이다.

Administration Server 구성

문의처 목록 위치(CONTACT_HOST) =

실행 만기 태스크(EXEC_EXP_TASK) = NO

스케줄러 모드(SCHED_ENABLE) = ON

SMTP 서버(SMTP_SERVER) =

데이터베이스 카탈로그 도구(TOOLSCAT_DB) = TOOLSDB

데이터베이스 카탈로그 인스턴스 도구(TOOLSCAT_INST) = DB2

데이터베이스 카탈로그 스키마 도구(TOOLSCAT_SCHEMA) = SYSTOOLS

도구 카탈로그 작업을 하기 전에 다음처럼 해당 변수 값을 초기화 한다.

명령어 >>
db2 update admin cfg using SCHED_ENABLE off TOOLSCAT_DB null TOOLSCAT_INST null TOOLSCAT_SCHEMA null

결과  >>
DB20000I The UPDATE ADMIN CONFIGURATION command completed successfully.

도구 카탈로그 작업을 한다.

- 스케줄링:ON

- 도구 카탈로그 DB명: sample

- 도구 카탈로그 인스턴스명: inst97

- 도구 카탈로그 스키마명: systools

명령어 >>
$> db2 update admin cfg using SCHED_ENABLE on TOOLSCAT_DB sample TOOLSCAT_INST inst97 TOOLSCAT_SCHEMA systools

$> db2admin stop       ( Unix, Linux 시스템에서는 das 계정으로 실행)
$> db2admin start       ( Unix, Linux 시스템에서는 das 계정으로 실행)
$> db2 get admin cfg

결과  >>

           Admin Server Configuration

Authentication Type DAS                (AUTHENTICATION) = SERVER_ENCRYPT

DAS Administration Authority Group Name  (DASADM_GROUP) =

DAS Discovery Mode                           (DISCOVER) = SEARCH
Name of the DB2 Server System               (DB2SYSTEM) = LOCALHOST

Java Development Kit Installation Path DAS   (JDK_PATH) = AUTOMATIC (/home/inst97/sqllib/java/jdk64)
Java Development Kit Installation Path DAS   (JDK_64_PATH) = AUTOMATIC (/home/inst97/sqllib/java/jdk64)

DAS Code Page                            (DAS_CODEPAGE) = 0
DAS Territory                           (DAS_TERRITORY) = 0

Location of Contact List                 (CONTACT_HOST) =
Execute Expired Tasks                   (EXEC_EXP_TASK) = NO
Scheduler Mode                           (SCHED_ENABLE) = ON
SMTP Server                               (SMTP_SERVER) =
Tools Catalog Database                    (TOOLSCAT_DB) = sample
Tools Catalog Database Instance         (TOOLSCAT_INST) = inst97
Tools Catalog Database Schema         (TOOLSCAT_SCHEMA) = systools
Scheduler User ID                                       =

“도구 카탈로그 작업”시 데이터베이스 선택은 원격지의 것이던, 운영되는 시스템의 것이던 상관없다. 이와 관련된 자세한 설정은 정보 센터를 참고하면 될 것 같다.

http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=/com.ibm.db2.luw.admin.cmd.doc/doc/r0008881.html

이 후의 작업은 GUI 도구인 “Task Center”를 이용하여 진행한다.

2. 작업 스케줄링 설정

(1) 태스크 센터에서 “새로 작성”을 선택한다.

(2) 태스크 이름, 명령어 유형 등등을 선택, 기입한다.

(3) 실행할 스크립트를 “명령 스크립트” 탭에 작성한다.

(4) 작업 스케줄링 설정

(5) 사용자 권한 설정 및 확인

(6) 생성한 task 실행 테스트

db2 백업 이미지가 생성되었다. 이제 시간 설정하여 주기적으로 실행되도록 설정만 하면 되겠다.

3. 작업 기록 확인하기

(1) 저널 실행

(2) 실행 기록 목록

(3) 실행 기록 확인

도구 카탈로그를 하는 이유는 “스케줄링 설정 정보”를 “기록”하고, 실행 이력을 관리할 저장소를 설정하는 작업이다.

가끔 GUI 기반으로 DB2 설치 작업을 하다 보면 “도구 카탈로그” 를 할 것이냐는 화면을 본 적이 있을 것이다. 만일 선택을 하게 되면 “TOOLSDB”라는 데이터베이스가 생성되고 이 데이터베이스는 이처럼 작업 스케줄링관련 정보를 저장하는 데이터베이스가 된다.

DB2를 사용하면서 TOOLSDB가 만들어진 경우를 봤을 것이다. 사용을 하던 하지 않던 설치 시 “도구 카탈로그” 선택하면서 생성이 되어진 결과이다.

운영 시스템에 “작업 스케줄링” 정보를 기록하도록 하는 경우는 없을 것 같다. 그렇다고 운영시스템에 이를 위한 별도의 TOOLSDB 데이터베이스를 생성하여 사용하지도 않을 것이다. (자원 낭비이기 때문에)

원격지에 DB2를 스케줄링 작업을 하는 용도로 사용한다고 해도, DB2 엔진이 설치되어져야 하고 데이터베이스가 있어야 한다. 스케줄링 하기 위해 작업을 많이 필요로 한다.

이런 번거로운 작업하느니 편하게  Cron이나 "예약된 작업”을 설정하여 OS상에서 실행되도록 하는 것이 번거로운 설정/구성 작업도 없고, 관리 포인트를 불 필요하게 가져가지 않는 것이 현명할 것이다. (해야 되고 관리해야 될 작업이 많은 DBA입장이라면 현실적으로 쓰지 못할 것이다.)

DB2의 버전이 올라가면서 여러가지 기능들이 추가되고 더 복잡한 메커니즘으로 구성된듯 하다.
그에따라 비교적 설치된 DB엔진을 걷어내거나 할때 약간의 시간이 소요되는건 사실이다.

뭐~ 다양한 기능들을 사용하는 장점이 있기는 하지만, 여하튼 오늘은 DB2 모듈을 강제로 deintall
하는 내용들을 다루어 보고자 한다.

간혹 DB2 엔진을 지우려 할때 인스턴스가 존재해서 삭제가 안되거나 심지어 인스턴스를 삭제하려해도 그마저 안되는 경우가 있다.
그래서 물리적으로 엔진 파일이 있는 곳을 물리적으로 rm 해 버리는 경우가 있는데(성질 급한 사람들은) 별로 권장하고 싶지는 않다.

그경우 아래와 같은 해결책을 제시하고자 한다.
======================================================================================
1. 보통 instance를 생성하거나 모듈이 설치가 되면(root)
    /var/db2/global.reg 파일이 생기며 그안에 위의 정보들이 기록된다.
   내부 메커니즘상 DB2가 모듈을 삭제를 할때 global.reg을 참조하는 것으로 보인다.
   이파일을 mv 하거나 rm 하게 되면 db2ilist상의 인스턴스 정보도 사라지게 되며
   deinstall시 묻지도 따지지도 않고 실행이 된다.
   주의점이 하나 있는데 위의 경우 일부 모듈이 잘 삭제가 안되는 경우도 있다
   그럴경우 찾아서 삭제해 주어야 한다.

2. db2greg 의 사용
    V8부터 지원되기 시작한 이녀석은 global.reg 파일을 display 하거나 편집 할 수 있다.
    또한 한서버내에 어떤 인스턴스가 존재하며 home이 어디고 그 인스턴스들이 사용하고 있는
    DB2의 모듈 경로는 어디인지를 보여 준다.
  1) db2greg -dump(모듈의 설치 경로와 인스턴스들을 보여준다.global.reg 의 display)
       $ db2greg -dump
           S,DB2,9.1.3.88,/opt/IBM/db2/V9.1,-,,9
           S,DAS,9.1.3.88,/opt/IBM/db2/V9.1/das,lib/libdb2dasgcf.so,,9
           I,DAS,9.1.3.88,dasusr1,/home/dasusr1/das,,1,,/opt/IBM/db2/V9.1/das,,
           I,DB2,9.1.3.88,db2inst1,/home/db2inst1/sqllib,,1,0,/opt/IBM/db2/V9.1,,

  2) global.reg 의 내용들을 편집하거나 삭제 할 수 있다
       $ db2greg -delinstec instancename=db2inst1
  

그간 다른 업무관계로 바빴던 터라 오늘에서야 DB2 설치를 하게 되었다.
물론 그전에 테스트로 삽질끝에 1,2번 설치를 했지만 오늘에서야 정식으로 설치를 하게 되었다.
다행히 삽질에 대한 노고로 이제는 수월하게 설치가 되는 듯 하다.

설치 전 주의점이 하나 있는데, GPFS설치 시 DB2 설치 모듈에 있는걸로 설치 하는것이 정신건강에 좋다는 점이다.
GPFS를 미리 설치하고 DB2 모듈을 설치 하게 되면 권장 configure 값을 바꾸어 주어야 하는데
그게 상당히 번거롭고 어려운 부분이 있다.~~ 궁금하시면 한번 해보시길~ 필자는 삽질끝에 그럴경우 우회 방법을 터득했다.

아래는 GPFS config 를 확인해 보는 명령어 이다.
======================================================================================
1. mmlsconfig

2. configurations를 변경하려면
    mmchconfig maxFilesToCache[Attribute]=10000 로 변경하면 된다.

자~ db2setup을 날리고 뜨는 첫 설치 화면이다.

다음 내부적인 설치 세팅은 직접 해보시길~~

드디어 삽질 끝에 설치 완료 화면을 볼 수 있었다.

 

자~ 이제 instance를 위한 Shared Disk를 만들어 보기로 하겠다~~

DB2 모듈과 인스턴스 생성전 각노드가 Share 할 수 있는 디스트 영역을 만들어야 한다.
다시 말해 lspv상의 hdisk에게 ID를 부여하는 PVID를 정의해야 한다.
처음에는 PVID값이 none으로 보이게 된다.

여기서는 3개의 서버(2member,1cf) 의 3개 노드로 구성을 하겠다.
아래는 PVID 세팅을 위한 절차이다.
=================================================================================
1. Log in as a root
2. lspv
3. chdev -l hdisk1 -a pv=yes
4. cfgmgr
5. lspv 로 재확인


6. 만약 할당된 PVID 값을 clear 하려면
     chdev -l hdisk2 -a pv=clear 로 Clear 하게 되면 PVID가 none으로 바뀌게 됨

7. chdev 로 설정 변경후 관련 사항을 항상 cfgmgr로 update 한다
   만약 cfgmgr 실행 시 아래와 같은 에러가 발생한다면
      Method error (/usr/lib/methods/cfgefscsi -l fscsi1 ):

        0514-061 Cannot find a child device.

8. lsdev -C|grep fscsi 로 FC SCSI I/O Controller Protocol Device를 확인한다.
    확인 시 1개 이상의 device가 보인다면 하나를 disable 해준다.


9. 참고로 할당된 PVID 값을 clear 하려면
     chdev -l hdisk2 -a pv=clear 을 사용하기 바란다.

자~ 다음에는 본격적으로 DB PureScale 를 설치해 보도록 하겠다.~

IBM에서 InfoSphere 라는 용어가 나오기 전에는 WebSphere Federation Server (WFS) 라고 불리었다. (DB 관련 제품인데 WAS쪽으로 편입된 것이 일하면서 이상하게 느껴지긴 했었다.)

Federation (국내에서 “연합” 이라고 번역되는 것 같다) 구성에는 크게 2가지로 분류가 된다.

Homogeneous Federation과 Heterogeneous Federation.

Homogeneous Federation은 같은 DBMS의 DB federation을 의미한다. (그러나 사실은 한 벤더의 DBMS를 의미한다고 봐야 될 듯 하다. Informix federation 도 제공한다.) 이 기능은 DB2 for LUW 제품을 쓰면 기본으로 사용 가능하다.

그러나 Hetrogeneous Federation 은 Oracle 이나 MS-SQL 등의 타 제조사의 DBMS의 DB를 federation을 의미한다. 이 경우는 DB2 설치 버전 이외 별도의 InfoSphere Federation Server를 설치해 주어야 한다.

Heterogeneous Federation 은 지면이 길어지는 관계로 다음 기회로 미루고, DB2내의 Federation을 살펴 본다.

1. DBM 구성변수 값 변경

    FEDERATED라는 변수는 기본으로 NO로 되어 있다. 이 값은 YES으로 설정한 후 인스턴스를 재시작한다.

[host2] $> db2 update dbm cfg using FEDERATED YES
[host2] $> db2stop force
[host2] $> db2start
[host2] $> db2pd -dbmcfg | grep FEDERATED

2. Federation 구성 환경 (예)

호스트명

인스턴스명

데이터베이스 명

비 고

host1

inst1

db01

federation이 걸리는 대상 시스템

host2

inst2

db02

federation을 거는 주체 시스템

3. 카탈로그 설정 작업

    inst2에서 inst1의 db1에 대한 연결 정보를 가지고 있어야 한다.

카탈로그 유형

대상 원본

카탈로그 별명

노드

inst1

rnode1

데이터베이스

db01

rdb01

[host2] $> db2 catalog tcpip node rnode1 remote 인스턴스1_IP server 인스턴스1_포트번호
[host2] $> db2 list node directory
[host2] $> db2 catalog db db01 as rdb01 at node node1
[host2] $> db2 list db directory
[host2] $> db2 connect to rdb01 user 접속ID using 비밀번호
[host2] $> db2 terminate

4. Wrapper 생성

[host2] $> db2 connect to db02
[host2] $> db2 create wrapper drda
[host2] $> db2 "select * from syscat.wrappers"

5. Federation Server 생성

[host2] $> db2 "create server svr1 type DB2/UDB version '9.7' wrapper drda authid \"인스턴스1_사용자\" password \"인스턴스1_비밀번호\" options(add dbname 'rdb01')"
[host2] $> db2 "select * from syscat.servers"

6. 사용자 매핑

[host2] $> db2 "create user mapping for 인스턴스2_사용자 server svr1 options (add remote_authid '인스턴스1_사용자', add remote_password '인스턴스1_비밀번호')"

7. 원본 테이블/뷰에 대한 nickname 생성

[host2] $> db2 "create nickname 인스턴스2_사용자.테이블1 for svr.스키마명.테이블1"
[host2] $> db2 "select tabschema || '.' ||  tabname from syscat.tables where type='N'"

여기까지의 작업으로 IFS 설정은 완료 되었다.

IFS설정 부분에 대해서는 다음과 같은 형식으로 작성해서 일괄 실행할 수도 있을 것이다.

db2 +p -tv << EOF
connect to 데이터베이스명 ;

create wrapper drda ;

create server svr1 type DB2/UDB version '9.7' wrapper drda authid "인스턴스1_사용자" password "인스턴스1_비밀번호" options(add dbname 'rdb01') ;

create user mapping for 인스턴스2_사용자 server svr1 options (add remote_authid '인스턴스1_사용자', add remote_password '인스턴스1_비밀번호') ;

create nickname 인스턴스2_사용자.테이블1 for svr.스키마명.테이블1 ;
terminate ;
EOF

참고로 “create server” 를 실행할 때, shell의 특수문자 인식 방식으로 db2 clp에서는 사용자 계정과 비밀번호에 Escape 문자인 \ (역 슬래시) 을 넣어 주었다. 넣어 주지 않으면 계속 syntax 오류가 발생한다.

SQL0104N  An unexpected token "'######' PASSWORD '######'" was found following "WRAPPER DRDA AUTHID".

 

uDAPL 설치가 끝났고 시스템도 Reboot 했다.
자~ 이제 smitty 상에서 InfiniBand의 기본 Configure 세팅을 해보자~
기본적으로 AIX 단에서 아래와 같은 세팅이 필요하다.
1) Infiniband Communication Manager 추가 및 세팅
2) inet 상에서 network interface : ib0 세팅하기
3) /etc/dat.conf file 에 format 추가하기
4) /etc/hosts 파일에 format 추가하기

아래는 InfiniBand의 Subsystem 세팅법 절차이다.
==========================================================================
1. Log in as a root

2. smitty icm

3. Add an Infiniband Communication Manager 선택(2번째칸이다)

4. 아래와 같이 기본 세팅을 한후 Enter~~
   
Infiniband Communication Manager Device Name icm
Minimum Request Retries [1]
Maximum Request Retries [7]
Minimum Response Time (msec) [100]
Maximum Response Time (msec) [4300]
Maximum Number of HCA’s [256]
Maximum Number of Users [65000]
Maximum Number of Work Requests [65000]
Maximum Number of Service ID’s [1000]
Maximum Number of Connections [65000]
Maximum Number of Records Per Request [64]
Maximum Queued Exception Notifications Per User [1000]
Number of MAD buffers per HCA [64]

5. icm Available  Infiniband Communication Manager 이 추가된 것을 확인 할 수 있다.

6. smitty inet
- select "Change/Modify Characteristics ..."
- select "ib0" (the infiniband interface)
- set the following:
* network interface: ib0
* IP address : whatever you want (say, 10.10.1.10)
* Netmask : (whatever), say 255.255.255.0
* Adapter: iba0
* Port Number: 1 or 2 (see below **)
* Partition Key: -1 (it’s the default)
- hit Enter, let the command execute to completion; should say "ib0 changed"

7. System Reboot
 - Shutdown -Fr

8. /etc/dat.conf 에 아래의 내용 추가
 - hca0 u1.2 nonthreadsafe default /usr/lib/libdapl/libdapl.a(shr_64.o) IBM.1.1
"/dev/iba0 1 ib0" " "

9. /etc/hosts 에 아래의 내용 추가
- 10.1.1.10       dbcni1ib
   10.1.1.9        dbcni2ib
   10.1.1.8        dbcni3ib

10. lsdev -C |grep ib 로 확인하면 InfiniBand 가 Available 하게 보인다.

 

   
11. 각서버의 노드별 IB Interface 정보를 볼수 있다.

    1) dbcni1

 


   2) dbcni2

 


   3) dbcni3

InfiniBand 의 물리적인 설정이 끝나게되어, 드디어 AIX에 논리적인 세팅을 하게 되었다.
pureScale의 설치 전 우리는 이름도 참 희안한 uDAPL이라는 녀석을 설치하게 되었다.
근데 어거 어디서 다운 받지? 처음에는 되게 찾기 힘들었다.

팀원들의 도움으로 그녀석의 위치를 알아내게 되었다. (주소는 아래와 같다.)
uDAPL Dwonload : https://www14.software.ibm.com/webapp/iwm/web/reg/signup.do?source=aixbp&lang=en_US&S_PKG=udapl

다운을 받게 되면 아래의 파일셋을 확인한다.
1) udapl
2) U825645.bff
3) iz82909.epkg.Z

아래는 uDAPL의 세팅 절차를 보여준다.
====================================================
1. Log in as root
2. *.bff 파일이 있는 디렉토리에서 smitty update_all
3. Change "accept new license agreements" to "yes". (중요하다! 원래는 기본 no로 되었는데 yes로 필히 세팅)
4. InfiniBand ifix 설치(iz82909.epkg.Z)
    -> emgr -e iz82909.epkg.Z
5. Verify the ifix Installation
    -> emgr -l
6. lslpp -l udapl.rte 로 설치된 uDAPL을 확인 할 수 있다.
7. shutdown -Fr

다음은 설치된 InfiniBand의 Configure 설정방법을 알아보도록 하겠다.

 


현업 업무 중 DB2의 메모리인 버퍼풀을 조정하기 위해 보통 Alter 명령을 사용한다.
예를 들면 아래와 같다.


db2 "alter bufferpool BP_8K size 2000"
db2 "select * from syscat.bufferpools"(버퍼풀의 조회)


근데 간혹 버퍼풀의 size를 조정할 때 위의 사이즈를 페이지단위가 아닌 바이트 단위로
착각하여 엄청난 크기의 버퍼풀을 생성하는 오류를 범할 수 있다.
(실제 현업에서 담당자가 위의 실수를 하여 운영 업무에 영향을 준적이 있다.)


문제는 DB2의 데이터베이스 Activate 시 실제 물리적메모리의 양을 초과하여 Paging을
유발 함으로써 DB접속이 상당히 오래 걸리거나 아예 안되는 상황이 발생할 수 있게 된다.
(실제 DB2 Activate 시 할당된 Bufferpool로 Shared Memory를 생성한다.)


이런 만약의 사태를 대비하여 DB2는 Resgistry 변수에 특별한 옵션이 존재 하며 이를 활용
하여 위의 사태를 해결할 수 있다.


DB2_OVERRIDE_BPF Registry 변수의 사용이다.


DB2SET DB2_OVERRIDE_BPF=1000(Page 단위)의 옵션을 사용하여 DB상의 설정된 버퍼풀로
Active 하는게 아니라 위의 옵션으로 Override하는 것이다.


다음은 위의 명령을 실행하는 절차이다.
====================================================================================
1. db2stop
2. db2set DB2_OVERRIDE_BPF=1000
3. db2stop
4. db2start
5. db2 activate db CNIDB
6. db2 "alter bufferpool BUFF size 1000"(기존에 하고자 했던 사이지로 재조정)
7. db2set DB2_OVERRIDE_BPF=
8. db2stop
9. db2start
10. db2 activate db CNIDB

 

InfiniBand Switch와 Adapter간 케이블링 작업을 우리 팀의 하드웨어 엔지니어들이 소리소문도 없이 끝내버렸다.

작업과정을 지켜보지 못한 아쉬움으로 기념사진이라도 남겨본다.

InfiniBand가 설치된 Rack의 뒷모습인데… 전반적으로 지저분하다.

 

InfiniBand Switch의 뒷태만 확대해 보았다.

 

이건 p550 서버에 장착된 InfiniBand Adapter다.

 

이제 DB2 pureScale 테스트를 위한 기초공사는 어느 정도 마무리 되었으니, 7월부터는 본격적으로 소프트웨어 설치 및 설정을 해봐야겠다.

관리하는 시스템이 많아지고, 체계적으로 시스템이 관리되지 않다 보면 서버에 누가! 무엇을! 설치해 놓았는지 알 수 없게 된다.

컴플라이언스 문제로 서버에 DB2가 설치되었는지 여부를 확인할 필요성이 생길 것이다.

DB2에 대한 어떠한 정보도 모르는 상태에서 DB2가 설치되었는지 확인해 보고, 설치된 경우 인스턴스를 확인해서 DB가 존재하는지 등을 살펴 봐야 할 것이다.

1. DB2가 설치되어 있나?

    DB2 제품을 설치하게 되면 (리눅스, 유닉스 기준) OS가 사용하는 파일 시스템인 /var 하위에 db2 라는 디렉토리가 생긴다. 그 안에는 global.reg 라는 파일이 만들어 지는데 install한 경우는 설치한 정보가 기록되고, 인스턴스를 생성하면 인스턴스 정보들 까지 기록이 된다.

    위 파일을 vi 로 열어 보면 binary code가 들어가 있어 보기가 불편하다. 그래서 /var/db2 라는 디렉토리가 존재하면 db2가 설치가 되었던 시스템이라 판단하면 되겠다.

     좀 더 편히 보기 위해서는 /usr/local/bin 하위에 있는 db2ls 라는 쉘을 실행시켜 시스템 내에 설치된 DB2 버전과 설치 위치, 설치 날짜를 확인할 수 있다.

>> 명령문
     #> cd /usr/local/bin
     #> ./db2ls

>> 결과

Install Path                       Level   Fix Pack   Special Install Number   Install Date                  Installer UID
---------------------------------------------------------------------------------------------------------------------
/db2/V9.8                         9.8.0.3        3                            Thu Jul  7 14:41:31 2011 GMT+09:00             0
/usr/opt/IBM                      9.7.0.4        4                            Wed Jul 20 18:09:11 2011 GMT+09:00             0

 

2. DB2 계정은 어떻게 되지?

엔진 설치 경로를 들어가서 instance라는 디렉토리 하위의 db2ilist, daslist 를 실행하면 생성된 인스턴스 이름을 확인할 수 있다.

>> 명령문
      #> cd /db2/v9.8/intance
      #> ./db2ilist

>> 결과
          db2sdin1

 

3. 사용 중인 DB2는 서버 용인가? 클라이언트 용인가?

한 개의 인스턴스가 존재함을 확인하였다. 해당 인스턴스 계정으로 변경한 후, db2 get dbm cfg 명령어 수행한 결과를 통하여 생성된 인스턴스가 ESE, WSE인지 혹은 클라이언트 용인지 확인할 수 있다.

>> 명령문
     $> db2 get dbm cfg | grep -i 'node type'

>> 결과
      Node type = Enterprise Server Edition with local and remote clients

ESE나 WSE 등의 서버 제품이면 db2_ps 명령어로 서버 프로세스가 실행 중인지 확인하고, db2 list db directory 결과를 통해 로컬 DB가 있는지 확인한다.

>> 명령문
      $> db2_ps

>> 결과 

Node 0
     UID        PID       PPID    C     STIME     TTY     TIME CMD
db2sdin1   19529826   13959310    0       Jul      25        - 18:06 db2sysc 0
    root    4784222   19529826    0       Jul      25        - 0:00 db2ckpwd 0
    root    5832940   19529826    0       Jul      25        - 0:00 db2ckpwd 0
db2sdin1   13500530   19529826    0       Jul      25        - 0:00 db2vend (PD Vendor Process - 258) 0 0
    root   14745766   19529826    0       Jul      25        - 0:00 db2ckpwd 0
lpar1: db2nps ## completed ok
 
Node 1
     UID        PID       PPID    C     STIME     TTY     TIME CMD
db2sdin1   16646246   17563826    1       Jul      22        - 5:52 db2sysc 1
db2sdin1   10616922   16646246    0       Jul      22        - 0:00 db2vend (PD Vendor Process - 258) 0 0
    root   19136564   16646246    0       Jul      22        - 0:00 db2ckpwd 1
    root   19464350   16646246    0       Jul      22        - 0:00 db2ckpwd 1
    root   19726464   16646246    0       Jul      22        - 0:00 db2ckpwd 1
lpar2: db2nps ## completed ok

 

>> 명령문
     $> db2 list db directory

>> 결과

 System Database Directory
 
Number of entries in the directory = 1
 
Database 1 entry:
 
Database alias                       = CNIDB
Database name                        = CNIDB
Local database directory             = /db2cni/dbhome
Database release level               = e.00
Comment                              =
Directory entry type                 = Indirect
Catalog database partition number    = 0
Alternate server hostname            =
Alternate server port number         =
 

위 예제는 pureScale 환경으로 2개의 인스턴스가 실행 중이고, 1개의 DB가 존재한다.

업무 환경, 요건에 따라서 DB 목록들을 파악하여 업무용으로 쓰는 것인지? 사용하지 않는 것인지 ? 등등 확인해서 불필요한 DB나 인스턴스는 제거하여 관리를 해야 될 것이다.

+ Recent posts