본문 바로가기

Note

[구성] InfoSphere Federation Server (IFS) 설정

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".