문의가 와서 Oracle 10g에서 제공되기 시작한 model dimension by 에 대해 살펴보게 되었다.

DB2의 오라클 호환성이 어지간한 신택스는 다 지원된다고 생각하고 있었는데, 이런 엑셀스러운 신택스도 있는 것을 알게 된 것 같다.

 

처음보는 기능이기에 어떤 방식으로 처리되는지를 알고자 웹 검색을 해보니 “증분 누적?”(바로 전 값을 계속 누적 연산) 처리 로직정도로 이해가 되었다.

 

(참고) http://www.gurubee.net/lecture/2203

 

어떤 문서에는 common table (with 문을 통한 recursive 처리) 로의 변환이 되지 않게 쓰인 문서들도 있었는데 위의 참조된 웹 문서를 기준으로 db2 방식으로 변환을 해 보았다.

 

[예제1] 증분 누적

 

입력 값 및 결과

MM

AMT

결과 값

1

-2000

0

2

4000

4000

3

-5000

0

4

-2000

0

5

3000

3000

6

1500

4500

7

-250

4250

8

320

4570

9

-4000

570

10

10000

10570

11

-20000

0

 

변환 SQL

with

   t1(mm,amt) as

     (select * from

              (values(1,-2000),(2,4000),(3,-5000),(4,-2000),(5,3000),(6,1500),(7,-250),(8,320),(9,-4000),(10,10000),(11,-20000)) t(mm,amt)),


   tmp(c1,c2,c3) as
    (select mm, greatest(0,amt), amt from t1 where mm=1
        union all
     select c1+1,
            (select greatest(0,c2+amt) from t1 where mm=c1+1),
            (select amt from t1 where mm=c1+1)
     from tmp where c1 < (select max(mm) from t1)
    )


select c1,c3 amt, c2 result from tmp ;

 

[예제2] 행 분할 누적

 

입력값

M

AMT

1

100

5

200

6

100

9

300

 

결과

M

결과

1

100

2

100

3

100

4

100

5

200

6

100

7

100

8

100

9

300

10

300

11

300

12

300

 

변환 SQL

with
  t1(mm,amt) as

     (select * from (values(1,100),(5,200),(6,100),(9,300)) t(mm,amt)) ,


  tmp (c1,c2,c3) as
   (select t1.mm, t1.amt, t1.amt from t1 where t1.mm=1
    union all
    select c1+1,
           case when (select amt from t1 where c1+1 = mm) is null then c2
                else (select amt from t1 where c1+1 = mm) end ,
           (select amt from t1 where c1+1 = mm)
    from  tmp
    where c1 < 12 
    )


select c1, c2 from tmp
order by c1
;

 

SQL의 복잡성에 따라서 어떤 경우에는 위처럼 변환되지 않는 경우가 있을 수도 있겠다.

 

개인적으로 SQL 표현을 간소하게 하여 SQL 문을 단순화하고 직관적으로 볼 수 있는 것을 좋아하기에 SQL에 대해서는 Oracle SQL 철학을 좋아한다. (+, connect by 등)

표준 SQL을 준수하는 DB2에서는 이런 부분을 장문의 SQL로 표현을 해야 되는 번거로움을 느끼지만 common table의 미학을 느껴볼 수 있는 계기가 된 것 같다.

'Note' 카테고리의 다른 글

[관리] 메모리 부족  (0) 2014.11.21
[보안] authentication 과 srvcon_auth  (0) 2014.07.14
[보안] SSL 설정  (0) 2014.06.18
[관리] db2gcf  (0) 2014.05.19
[복구] 경로재지정 복구  (0) 2014.04.15

고객사 요청으로 기술지원을 갔다가 데이터 복구 작업을 해야 되는 경우가 있었다.

특정 테이블의 데이터 복구 작업 시 업무 영향도를 최소화하기 위해서 개발 시스템에 운영DB의 백업 이미지를 경로재지정 복구를 수행하여 필요한 데이터를 추출하는 방법으로 작업을 진행하였다.

 

문제는 개발서버의 자원이 운영시스템만큼 풍족하지 못하고, 이미 개발DB가 존재하기 때문에 복구 중 rollforward 작업이 진행되지 못하게 되었다.

rollforward를 수행하면서 내부적으로 DB가 활성화되는 것 같은데, 개발서버의 물리적 메모리의 가용량이 DB가 필요로 하는 메모리 크기가 되지 못해서 생긴 것 같다.  마치 대저택에서 살던 사람이 사업이 망해 단칸방으로 세간살이를 옮겨야 되는 경우와 비슷한..

 

인스턴스 메모리 및 DB 메모리를 변경해도 이 문제는 해결되지 않았다. STMM이 수행되어도 DB내 설정된 버퍼풀의 크기를 충족하지 못해 DB가 활성화되지 못하는..

 

해결 방안을 얻고자 자료들을 찾아보니, Registry 변수에서 버퍼풀 크기를 강제로 제어하는 변수를 알게 되었다.

DB2_OVERRIDE_BPF=버퍼풀ID,페이지수;버퍼풀ID,페이지수

 

운영DB를 통해서 가장 큰 (페이지수가 많은) 버퍼풀ID와 페이지 수를 확인을 하고 크기를 줄여나갔다.

 

이 변수를 적용하고 나서 rollforward 작업 진행되어 데이터 복구 작업을 완료할 수 있었다.

 

이후 언젠가 블로그 글을 살펴보면서 같이 일했던 동료분이 “실수로 bufferpool 크기를 과도하게 설정한 경우 해결하는 방법”으로 글이 적혀둔걸 보게 되었다. (남의 경험이 공유되어도 직접 비슷한 경험을 하지 않는 이상 급박한 상황에서 해결안을 쉽게 찾아내긴 어려운 법 같다.)

고객사 시스템에 직접 터미널로 붙어서 작업하는 환경이 없어져서 장애관련 정보를 수집하고 메모하는 것이 어려워진다. 그저 기억속으로만 간직해야 되는

 

'Note' 카테고리의 다른 글

[SQL] model dimension by  (0) 2015.01.08
[보안] authentication 과 srvcon_auth  (0) 2014.07.14
[보안] SSL 설정  (0) 2014.06.18
[관리] db2gcf  (0) 2014.05.19
[복구] 경로재지정 복구  (0) 2014.04.15

DBM 구성변수에서 지원하는 보안 관련 변수에는 authentication과 srvcon_auth 가 있다.

정보센터를 통해서 보면 동일한 기능을 하는 것처럼 보이는데, 변수를 2개나 제공을 하고 있다.

 

내용을 면밀히 읽어보면, authentication 설정 값보다 srvcon_auth 값이 우선한다고 하는 정도의 차이점이 있겠다.

 

1. server 쪽 DBM CFG 설정

$ db2 update dbm cfg using authentication data_encrypt
$ db2 update dbm cfg using srvcon_auth server

$ db2 get dbm cfg | grep AUTH
Server Connection Authentication          (SRVCON_AUTH) = SERVER
Database manager authentication        (AUTHENTICATION) = DATA_ENCRYPT

 

 

2. client 쪽 catalog 설정

$ db2 catalog db sample at node inst97 authentication data_encrypt

 

3. 접속 결과

$ db2 connect to sample user inst97 using inst97

SQL30082N  이유 "17"("UNSUPPORTED FUNCTION")(으)로 인해 보안 처리에 실패했습니다.  SQLSTATE=08001

 

4. client쪽 catalog 설정

$ db2 catalog db sample at node inst97 authentication server

 

5. 접속 결과

$ db2 connect to sample user inst97 using inst97

  Database Connection Information

Database server        = DB2/AIX64 9.7.2
SQL authorization ID   = INST97
Local database alias   = SAMPLE

 

두 변수의 설정 값이 다른 경우 srvcon_auth 설정값으로 접속이 됨을 확인할 수 있다.

srvcon_auth 값이 설정되지 않는 경우 authentication 값이 적용이 된다.

 

보안관련하여 위 변수들의 값을 data_encrypt 등으로 변경하는 경우 client side에서도 관련하여 설정 작업이 필요하다.

WAS의 경우는 다음과 같은 TechNote를 참고하면 도움이 될 듯 하다.

 

Configure DB2 authorization encryption algorithm

http://www-01.ibm.com/support/docview.wss?uid=swg21503216

'Note' 카테고리의 다른 글

[SQL] model dimension by  (0) 2015.01.08
[관리] 메모리 부족  (0) 2014.11.21
[보안] SSL 설정  (0) 2014.06.18
[관리] db2gcf  (0) 2014.05.19
[복구] 경로재지정 복구  (0) 2014.04.15

V9.5 까지는 OS 환경변수 설정하여 SSL을 구성하였으나, V9.7부터 DBM 구성변수로 SSL 설정 변수들이 포함되었다.

최근에 보안 사고로 인해 각종 보안 조치사항들이 취해지다 보니 DB 쪽의 SSL 구성 요건도 생기는 듯 하다.

 

오래된 버전에서는 SSL 관련 라이브러리를 별도 설치를 했었어야 되는 것 같은데, V9.7부터 DB2 설치 시 SSL 관련 라이브러리(IBM GSKit)들이 설치된다.

 

1. 설치 경로

    - DB2_엔진경로/gskit

    - 인스턴스_홈/sqllib/gskit

 

2. DB2 서버 쪽의 설정

   인스턴스 경로를 /db2user/inst97로 가정한다.

   (1) 환경변수 설정 (.profile)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/db2user/inst97/sqllib/gskit/bin
export PATH=$PATH:/db2user/inst97/sqllib/gskit/bin

 

   (2) 인스턴스 홈에 SSL 디렉토리 생성

$> mkdir ~/SSL

 

  (3) 키 생성

$> cd ~/SSL
$>

gsk8capicmd_64 -keydb -create -db "key.kdb" -pw "password" –stash

 

  (4) 인증서 추가

$> gsk8capicmd_64 -cert -create -db "key.kdb" -pw "password" -label "DBCNI" -dn "CN=ssl.dbcni.com,O=dbcni,OU=dbcni db2,L=GANGNAM,ST=SEOUL,C=KR"

     - CN= common name

     - O = organization

     - OU= orgnaization unit

     - L = location

     - ST=state,province

     - C = country

     - DC= domain component

 

  (5) 인증서 추출

$> gsk8capicmd_64 -cert -extract -db "key.kdb" -pw "password" -label "DBCNI" -target "key.arm" -format ascii -fips

 

  (6) 유효성 검증

$> ls

      key.arm, key.crl, key.kdb, key.rdb, key.sth

 

   (7) DBM CFG 설정

db2 update dbm cfg using SSL_SVR_KEYDB /db2user/inst97/SSL/key.kdb
db2 update dbm cfg using SSL_SVR_STASH /db2user/inst97/SSL/key.sth
db2 update dbm cfg using SSL_SVR_STASH /db2user/inst97/SSL/key.sth
db2 update dbm cfg using SSL_SVR_LABEL DBCNI
db2 update dbm cfg using SSL_SVCENAME 50602

 

   (8) Registry 설정

db2set db2comm=ssl,tcpip

 

2. 클라이언트 설정

    (1) SSL 디렉토리 생성 (AIX 기준)

$> mkdir ~/SSL

     (주의) DB2 서버에서 생성된 key.arm 파일을 SSL 디렉토리 하위에 넣어 둘것

 

   (2)  key 디비 생성

$> cd ~/SSL
$> gsk8capicmd_64 -keydb -create -db "keyclient.kdb" -pw "password" -stash

 

   (3) 인증서 서명

$> gsk8capicmd_64 -cert -add -db "keyclient.kdb" -pw "password" -label "DBCNI" -file key.arm -format ascii -fips

 

   (4) dbm cfg 설정

db2 update dbm cfg using SSL_CLNT_KEYDB /db2/instance/db2inst/SSL/keyclient.kdb
db2 update dbm cfg using SSL_CLNT_STASH /db2/instance/db2inst/SSL/keyclient.sth


   (5) 카탈로스 설정

$> db2 catalog tcpip node 노드별명 remote IP server 50602 security ssl
$> db2 catalog db 디비명 as 디비SSL at node 노드별명
$> db2terminate

   (참고) TCPIP 통신 설정을 위해서는 카탈로그 작업이 한번 더 진행되어야 한다. 

 

   (6) 접속 테스트

$> db2 connect to 디비SSL user ID using PWD

 

DB2COMM 설정에 TCPIP도 있기 때문에 DB2 서버의 SVCENAME의 설정값을 통하여 TCPIP 방식의

DB 접속도 가능하다. (TCPIP 용 , SSL용 2가지 방식으로 통신이 됨)

 

참고로 V10.5의 경우 FixPack3a가 올라왔다. SSL관련하여 bug 발생으로 긴급 패치가 이뤄졌다.

이외 V10.1, V9.x 버전도 마찬가지로 보안관련 패치가 된 것으로 보인다.

SSL 설정 작업 시 각 버전의 APAR 등을 참고해야 될 것 같다.

'Note' 카테고리의 다른 글

[관리] 메모리 부족  (0) 2014.11.21
[보안] authentication 과 srvcon_auth  (0) 2014.07.14
[관리] db2gcf  (0) 2014.05.19
[복구] 경로재지정 복구  (0) 2014.04.15
[관리] Backup Pending 풀기  (0) 2014.03.31

Linux 나 AIX 환경이 아닌 unix 환경에서는 kernel parameter 값을 설정해 주어야 한다.

( Linux 및 AIX 경우는 DB2 실행 시 동적으로 kernel parameter 값이 설정되는 것으로 알고 있다)

 

Solaris 나 HP-UX 환경에서 kernel parameter 값을 설정하지 않아도 설치 및 인스턴스 구성, 인스턴스 실행 시 오류가 발생하지 않아 설정하지 않는 경우가 종종 있다.

이런 경우 특정 작업을 하다가 오류가 발생해서 원인이 못찾고 헤매게 되는 경우가 있다.

 

보안 상 고객사의 진단로그 메시지들을 메모하지 못하고 나와서 그 오류 메시지를 글에 넣을 수는 없지만,

기억나는 오류 코드는 SQL0902C, 디바이스 부족 정도였던 것 같다.

 

db2diag.log를 보면서 맨 처음 의심이 드는 것은 restore 시 필요한 경로의 disk 가용 공간이 부족해서 생긴 문제로 보여, disk 가용 공간을 확인해 봤지만 문제점은 찾을 수 없었다. (고객사의 문제는 restore 시 SQL0902C 에러로 실패하면서 작업 진행을 하지 못하는 상황이였다)

나중에 로그의 특정 메시지를 통해서 kernel parameter 를 설정하지 않아서 생긴 것으로 원인을 파악하게 되었다.

 

kernel parameter 관련 technote를 소개해 본다.

 

1. the db2diag.log is reporting an ENOSPC (28) error message

    URL: http://www-01.ibm.com/support/docview.wss?uid=swg21407281

 

2009-11-15-16.18.55.210069+330 E25334773A223 LEVEL: Error (OS)
PID : 47785 TID : 4198246823968PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000 DB : SAMPLE
APPHDL : 0-17762 APPID: 9.142.38.82.23748.034005560721
AUTHID : DB2INST1
EDUID : 75 EDUNAME: db2agent (DB1) 0
FUNCTION: DB2 UDB, oper system services, sqloNLCKLock, probe:150
MESSAGE : ZRC=0x8300001C=-2097151972
CALLED : OS, -, semget

 

2.  SQL0902C A system error (reason code = "") occurred.  Subsequent SQL statements cannot be processed.

     URL: http://database.ittoolbox.com/groups/technical-functional/db2-l/sql0902c-a-system-error-3974926

 

2011-01-11-11.48.54.138210-300 I29339688A484 LEVEL: Error
PID : 21872 TID : 1 PROC : db2agent (VPLANDB) 0
INSTANCE: db2vplan NODE : 000
APPHDL : 0-40 APPID: 128.209.72.162.45433.1101111648
AUTHID : VPLANADM
FUNCTION: DB2 UDB, buffer pool services, sqlbinit, probe:550
MESSAGE : ZRC=0x850F0081=-2062614399=SQLO_SSEM_EXCEED_MAX
"Requesting too many semaphores"
DIA8336C Requested too many semaphores

 

3. Severe system error occurs with SQLO_NORES, DIA8336C and DIA8532C messages in db2diag.log

     URL: http://www-01.ibm.com/support/docview.wss?uid=swg21406633

2009-10-08-11.35.20.600704-320 I5639725A439 LEVEL: Severe
PID : 25196 TID : 7 PROC : db2sysc 0
INSTANCE: db2inst1 NODE : 000
EDUID : 7 EDUNAME: db2ipccm 0
FUNCTION: DB2 UDB, global services, sqzEDUObj::StartEDU, probe:10
RETCODE : ZRC=0x870F00F2=-2029059854=SQLO_NORES

 

Solaris 나 HP-UX 환경에서는 꼭 kernel parameter를 설정하고 DB2 설치 작업을 하는 것이 좋다.

db2gcf 명령어는 이중화하는 경우에 주로 사용된다.

V9.5부터 TSA (Tivoli System Automation) 클러스터가 도입이 된 후 이중화 관련 tsa의 script를 보면 db2 제어를 위해 db2gcf가 사용됨을 확인할 수 있다.

 

인스턴스 시작(u), 중지(d), 상태(s) 를 확인할 수 있고, 강제로 자원을 정리하는 k 옵션도 제공한다.

Unix 환경이나 Linux 환경에서 DB2 인스턴스가 패닉 상태에 놓인 경우 db2stop 명령어로 인스턴스가 중지되지 않아, db2_kill 이라는 명령어를 사용한다. 그러나 윈도우 환경에서는 db2_kill 이라는 명령어는 제공되지 않는다.

 

윈도우 작업관리자에서 정리를 할 수 밖에 없기 때문에 db2_kill 같은 명령어의 필요성이 느껴질 수 있다.

이때 db2gcf –k 를 사용하면 db2_kill과 같은 효과를 얻을 수 있으니 다급한 상황이 발생한 경우는 db2gcf 를 사용하는 것이 도움이 될 듯 하다.

 

주의 사항은 DB 활성화 시  crash recovery가 진행되므로, 만약의 경우를 대비하여 복구에 필요한 백업 이미지, 아카이브 로그 등을 확인 후 작업해야 할 것이다.

 

참고: http://www-01.ibm.com/support/knowledgecenter/?lang=ko#!/SSEPGG_10.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0010986.html?cp=SSEPGG_10.5.0%2F3-5-2-6-56

'Note' 카테고리의 다른 글

[보안] authentication 과 srvcon_auth  (0) 2014.07.14
[보안] SSL 설정  (0) 2014.06.18
[복구] 경로재지정 복구  (0) 2014.04.15
[관리] Backup Pending 풀기  (0) 2014.03.31
[구성] Federation MS-SQL Server  (0) 2014.03.20

일반적으로 DB 카탈로그 작업 시 DB2 서버 IP 주소, 포트, DB 명 정도만 설정을 하고 사용한다.

이런 CLI 연결 환경에서 DB 접속이 느려지는 경우가 발생할 수 있다.

 

사내 여러 Desktop PC 에서 특정 PC에서만 접속이 느린 현상이 발생하는 경우 (접속이 분 단위 혹은 10초 단위 소요)

다른 네트워크 환경에서 접속을 해도 해당 PC만 접속 느린 현상이 발생하는 경우,

접속이 이뤄진 후 접속을 끊고(terminate) 재접속을 해도 느리게 접속이 되는 경우

 

마치 특정 PC의 Disk 등 성능이 느려져서 or PC의 성능이 낮아 발생되는 것처럼 느껴진다.

이런 경우 Catalog 설정을 확인해 볼 필요가 있다.

 

DB 카탈로그 시, DB2 서버와의 인증 방식을 설정하는 옵션이 있다. (DB2 서버의 기본 인증 방식은 SERVER 임)

이 인증 방식을 설정하지 않는 경우 서버쪽의 인증 방식에 맞추기 위한 준비 작업으로 DB 접속이 느려질 수 있다.

 

만일 CLI 방식의 개발을 하거나, native driver를 사용하는 개발 환경에서는 DB 카탈로그 작업 시 인증 방식을 꼭 필수적으로 하는 것이 좋을 듯 하다.  (카탈로그 작업 시 인증 방식 설정을 습관화 해야 될 것 같다.)

 

참고문서: http://www-01.ibm.com/support/docview.wss?uid=swg21455469

데이터가 삭제되었거나, 동일한 H/W환경에 백업 이미지로 테스트 DB 환경을 만들어야 되는 경우 db의 경로를 다르게 하여 restore를 해야 할 필요가 생긴다. 이럴 경우 테이블 공간 혹은 스토리지 그룹의 경로를 일일이 적어주는 것은 불편할 것이다.

 

경로재지정 복구 작업을 위해 db2는 해당 필요한 script를 만들어 준다. (V9.1 부터 지원된다)

 

-- script 추출

db2 “restore db 디비명 from 백업_경로 taken at 백업_시간소 redirect generate script 경로재지정_복구.clp

-- 추출 script 예
RESTORE DATABASE SAMPLE
-- USER '<username>'
-- USING '<password>'
FROM '/home/jseifert/backups' TAKEN AT 20050906194027
-- DBPATH ON '<target-directory>'
INTO SAMPLE
-- NEWLOGPATH '/home/jseifert/jseifert/NODE0000/SQL00001/SQLOGDIR/'
-- WITH <num-buff> BUFFERS
-- BUFFER <buffer-size>
-- REPLACE HISTORY FILE
-- REPLACE EXISTING REDIRECT
-- PARALLELISM <n>
-- WITHOUT ROLLING FORWARD
-- WITHOUT PROMPTING

SET TABLESPACE CONTAINERS FOR 0
-- IGNORE ROLLFORWARD CONTAINER OPERATIONS USING ( PATH 'SQLT0000.0' );

SET TABLESPACE CONTAINERS FOR 1
-- IGNORE ROLLFORWARD CONTAINER OPERATIONS USING ( PATH 'SQLT0001.0' );

SET TABLESPACE CONTAINERS FOR 2
-- IGNORE ROLLFORWARD CONTAINER OPERATIONS USING ( FILE '/tmp/dms1' 1000 , FILE '/tmp/dms2' 1000 );

RESTORE DATABASE SAMPLE CONTINUE;

 

DB이름, DB 경로, 테이블공간 경로 등 여러 경로를 원하는 방식으로 변경하여 복구 작업을 진행하면 된다.

 

과거 V8에서는 해당 script를 일일이 만들다 보면 신택스 오류가 발생하여 script 만드는 데 시간이 많이 소요되었다.

(운영체제에 따라 시스템 테이블 공간은 지정해주지 않아도 알아서 경로재지정이 복구가 진행되기도 했었다.)

 

많이 쓰이는 기능은 아니나, 지워진 데이터를 찾아내기 위해서 혹은 공간 부족으로 다른 곳으로 경로를 변경해야 되는 경우가 있을 때

 

이 방법을 쓰면 작업 진행에 도움이 될 것 같다.

'Note' 카테고리의 다른 글

[보안] SSL 설정  (0) 2014.06.18
[관리] db2gcf  (0) 2014.05.19
[관리] Backup Pending 풀기  (0) 2014.03.31
[구성] Federation MS-SQL Server  (0) 2014.03.20
[성능] Actual Section & db2caem  (0) 2014.02.28

DB2는 기본적으로 순환로그(circular logging) 방식으로 DB 생성이 된다. 따라서 사용된 트랜잭션 로그를 보관(Archive logging)하기 위해서는 LogArchMeth1 이라는 DB 구성변수에 “트랜잭션 로그를 보관할 장소"를 설정해 주어야 한다.

그리고 변경 후에는 Offline DB 백업을 수행해야 DB가 정상 상태에 놓인다.

 

DB 구성 초기에 Archive logging 모드로 변경하는 것은 어려운 일이 아니나, 백업 정책 및 기타 운영 관련 정책이 한참 운영 중인 상태에

서 변경을 하게 되는 경우 난감한 일이 발생한다.

DB의 데이터 사이즈가 작다면 큰 문제가 없지만 백업 수행이 오래 걸릴 정도의 사이즈가 되는 경우 백업으로 인해 장시간 운영을 중단해야 되는 상태가 놓이기 때문이다.

이 부분은 DB2의 단점이 될 수 있는 부분인데, DB2 관련 정보를 찾다가 백업하지 않아도 백업 보류 상태(backup pending)를 풀 수 있는 방법을 알게 되었다.

 

db2dart에서 지원해 주는 기능이고, 오래된 옛 버전부터 지원된 기능인데 왜 이 기능이 존재감없이 묻혀져 있었는지 의문이 든다.

(너무 당연한 것 이여서 그랬을까?)

 

Archive logging 모드 상태에서 대용량 데이터를 load로 적재한 후 발생하는 Backup Pending,

초기 데이터 적재 작업 시, 아카이브 로그의 대량 발생을 막기 위해 circular logging 을 사용하고 적재 완료 후 archive logging 으로 전환하고자 하는 경우,

 

db2dart를 통해서 짧은 시간안에 backup pending을 풀 수 있다.

 

$> db2 update db cfg for sample using logarchmeth1 logretain
DB20000I  UPDATE DATABASE CONFIGURATION 명령이 완료되었습니다.

$> db2 connect to sample
SQL1116N  데이터베이스가 BACKUP PENDING 단계에 있기 때문에 데이터베이스 "SAMPLE"에 연결하거나 활성화하는데 실패했습니다.

 

$> db2dart sample /CHST /WHAT DBBP OFF


                              IMPORTANT:
  After resetting the database backup pending state, IBM no longer
  guarantees data integrity or the referential integrity of the data.
  To ensure the referential integrity of the data, all user tables
  should be exported, the database dropped and recreated and all
  user tables imported back into the new database.


Updated the log file header control file.
        The requested DB2DART processing has completed successfully!
                 Complete DB2DART report found in: SAMPLE.RPT

$> db2 connect to sample

  데이터베이스 연결 정보

데이터베이스 서버                        = DB2/NT64 10.5.0
SQL 권한 부여 ID                         = BRAD
로컬 데이터베이스 별명                   = SAMPLE

$> db2 backup db sample online compress

백업이 완료되었습니다.

'Note' 카테고리의 다른 글

[관리] db2gcf  (0) 2014.05.19
[복구] 경로재지정 복구  (0) 2014.04.15
[구성] Federation MS-SQL Server  (0) 2014.03.20
[성능] Actual Section & db2caem  (0) 2014.02.28
[성능] SQL Optimizer Profile  (0) 2014.02.06

보통은 이관 작업을 위한 Oracle Federation 구성 정도가 전부인데, 일이 생겨서 MS-SQL Server의 Federation 구성을 하게 되었다.

MS-SQL 서버 Federation을 위해서는 InfoSphere Federation Server를 설치하던가, DB2 서버 설치 후 DB2 FixPack 사이트에서 관계형 wrapper와 비관계형 wrapper 설치 파일을 내려받아 설치를 해야 한다. (Advanced E/W Server Edition로는 구성 불가능)

 

또한 MS-SQL 서버에 원격 접속을 할 수 있도록 환경 구성을 위해 ODBC 클라이언트가 필요하다.

 

1. ODBC Driver 내려받기

    - 경로: ftp://ftp.software.ibm.com/software/db2ii/downloads/odbc_driver/

    - 드라이버 버전 정보: DataDirect ODBC Version 7.1

 

2. 설치 (root 계정)

    - 설치위치: /db2/v10.1f/odbc_driver  (기본 경로: /opt/IBM/ODBC_Driver)

#> export LANG=C
#> ./install.bin

 

3. 환경 설정 (인스턴스 계정)

    (1)  환경 변수 설정

$> cat ~/sqllib/userprofile << EOF

export ODBCINI=/instance/inst10f/odbc.ini
export DJX_ODBC_LIBRARY_PATH=/db2/v10.1f/odbc_driver/branded_odbc/lib
#export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$DJX_ODBC_LIBRARY_PATH
export LIBPATH=\$LIBPATH:\$DJX_ODBC_LIBRARY_PATH

EOF

(주의) LIBPATH는 AIX 환경 변수 임 (운영체제에 맞는 변수명 사용 필요)

 

     (2) db2dj.ini 설정

$> cat ~/sqllib/cfg/db2dj.ini << EOF

DJX_ODBC_LIBRARY_PATH=/db2/v10.1f/odbc_driver/branded_odbc/lib
ODBCINI=/instance/inst10f/odbc.ini

EOF

 

   (3) ODBC 설정

        - 설정 파일 위치: 설치경로/branded_odbc/IBM_Tools/odbc.ini

        - MSSQL서버 정보: 192.168.137.109:1433

                           계정: sa/sa1111

                           DB  : test

                           DSN: testdsn

 

[ODBC Data Sources]
mssqlserver=Microsoft SQL Server

[ODBC]
IANAAppCodePage=4
InstallDir=/db2/v10.1f/odbc_driver
Trace=0
TraceDll=/db2/v10.1f/odbc_driver/branded_odbc/lib/VMtrc00.so
TraceFile=odbctrace.out
UseCursorLib=0


[testdsn]
Driver=/db2/v10.1f/odbc_driver/branded_odbc/lib/VMsqls00.so
Description=DataDirect 7.1 SQL Server Wire Protocol
Database=test
HostName=192.168.137.109
PortNumber=1433
LogonID=sa
password=sa1111

 

        - 연결테스트

$> cd /db2/v10.1f/odbc_driver/branded_odbc/samples/example
$> ./example testdsn

Enter the user name        : sa

Enter the password         : sa1111

SQL> select * from t1;
6066:
[IBM(DataDirect OEM)][ODBC 20101 driver]2711
[IBM(DataDirect OEM)][ODBC 20101 driver]6091

C1    C2
1     aaa
2     mssql2012
3     sqlserver


SQL> select * from sys.tables;

 

 

4. Federation 서버 구성

(1) 라이브러리 확인

$> ls –al DB2_설치경로/lib64/libdb2mssql*

-r-xr-xr-x 1 bin bin  76184 2013-11-17 16:33 libdb2mssql3.so
-r-xr-xr-x 1 bin bin 506698 2013-11-17 16:33 libdb2mssql3F.so
-r-xr-xr-x 1 bin bin 356907 2013-11-17 16:33 libdb2mssql3U.so

 

(2) 서버 구성

   - 랩퍼명: sql2000

   - 서버명: sql2012

   - 노드명: testdsn   (odbc dsn 명)

   - DB명  : test

   - 사용자 매핑: inst10f(db2) 사용자를 sa(mssql) 로 매핑함

$> db2set DB2LIBPATH=$LIBPATH

$> db2set DB2ENVLIST=DB2LIBPATH

$> db2stop force

$> db2start

$> db2 connect to sample
$> db2 "create wrapper sql2000 library 'libdb2mssql3.so'"

$> db2 "create server sql2012 TYPE mssqlserver VERSION '2012' Wrapper sql2000 options(add node 'testdsn', dbname 'test')"

$> db2 "create user mapping for inst10f server sql2012 options (add remote_authid 'sa',add remote_password 'sa1111')"

$> db2 "set passthru sql2012"

$> db2 "select * from t1"

C1          C2
----------- --------------------
          1 aaa
          2 mssql2012
          3 sqlserver

  3 record(s) selected.


$> db2 "set passthru reset"

'Note' 카테고리의 다른 글

[복구] 경로재지정 복구  (0) 2014.04.15
[관리] Backup Pending 풀기  (0) 2014.03.31
[성능] Actual Section & db2caem  (0) 2014.02.28
[성능] SQL Optimizer Profile  (0) 2014.02.06
[이관] lobsinfile 및 tempfiles path  (0) 2014.01.27

+ Recent posts