반응형
Federated system 이란 DB2 에서 다른 DB2 Database 및 이기종 DB에 대하여 쿼리를 이용하여 데이터를 엑세스 할 수 있도록 구성된 System을 말한다. 

구성도는 다음과 같을 수있다.




Federated system : 분산환경을 사용할 수 있도록 설정된 System ( Federated Database가 있는 서버를 뜻함)
Federated database : 분산환경을 사용할 수 있도록 설정된 Database .
                               Client는 Federated database에 접속하여 다른 DB2 Database 및 이기종 DB에 대하여 쿼리를 작성 함
Data source : 분산 환경에서 엑세스 할수 있는 데이터의 종류 

위의 구성도에서 볼 수 있듯이 DataSource의 종류는 Oracle,Informix,Sybase,MS-SQL, XML,EXCEL 등등 많은 종류들이 있다.



그럼 Federated system을 구성하면서 어떤 작업들이 필요한지 하나 하나 체크해 보도록 하자.

DB2(UDB) - DB2(UDB) 구성을 통하여 예를 들어 보도록 하자.

테스트에 사용할 DB 설명

 구분 DB2 Version  Owner  Password  DB Name  Service Port  IP Address 
 Federated DB  9.1.0.3  32bit  db2singl   db2singl   SINGLE   70000   192.168.142.128 
 Data Source  9.1.0.3  32bit   db2inst1   db2inst1  SAMPLE  60005  192.168.142.128

Data Source에 테스트 테이블 생성

 
   /home/db2inst1]$ db2 "create table source_tab ( id integer) "
       DB20000I The SQL command completed successfully.
   /home/db2inst1]$ db2 "insert into source_tab values (1)"
       DB20000I The SQL command completed successfully.
   /home/db2inst1]$ /home/db2inst1]$ db2 "select * from source_tab"
              ID
       -----------
              1
       1 record(s) selected. 




1. Federated DB의 DBM 파라메터 중에서 다음 파라메터가 활성 화 되어 있어야 한다.



 
   /home/db2singl]$ db2 get dbm cfg | grep FEDERATED
       Federated Database System Support (FEDERATED) = NO
       Maximum Asynchronous TQs per query (FEDERATED_ASYNC) = 0


위와 같이 Default Value는 NO로 되어 있다. 이 파라메터를 변경 후에는 DB2를 Restart 시켜야 한다.

 
   /home/db2singl]$ db2 update dbm cfg using FEDERATED YES
        DB20000I The UPDATE DATABASE MANAGER CONFIGURATION command completed successfully.




2. Federated DB의 설정이 되었으면 , 접속하고자 하는 Data Source에 대한 설정을 한다.
    Catalog Node + Catalog Database 생성




- Catalog Node 생성

   /home/db2singl]$ db2 catalog tcpip node NDSAM remote 192.168.142.128 server 60005
       DB20000I The CATALOG TCPIP NODE command completed successfully.
       DB21056W Directory changes may not be effective until the directory cache is refreshed.

- Catalog Node 생성 확인

   /home/db2singl]$ db2 list node directory
      
        Node Directory

        Number of entries in the directory = 1
        Node 1 entry:
 
        Node name = NDSAM
        Comment = Directory
        entry type = LOCAL
        Protocol = TCPIP
        Hostname = 192.168.142.128
        Service name = 60005

- Catalog Node 접속 테스트

   /home/db2singl]$ db2 attach to ndsam user db2inst1 using db2inst1
       Instance Attachment Information Instance server = DB2/LINUX 9.1.3
       Authorization ID = DB2INST1
       Local instance alias = NDSAM  

- 접속이 잘 되었는지 테스트

   /home/db2singl]$db2 get dbm cfg | grep FEDERATED
       Federated Database System Support (FEDERATED) = NO
       Maximum Asynchronous TQs per query (FEDERATED_ASYNC) = 0




 
- Catalog DB 생성

   /home/db2singl]$ db2 catalog database sample as RDSAM at node ndsam
        DB20000I The CATALOG DATABASE command completed successfully.
        DB21056W Directory changes may not be effective until the directory cache is refreshed.

- Catalog DB 생성 확인 

   /home/db2singl]$ db2 list db directory

       System Database Directory

       Number of entries in the directory = 2

       Database 1 entry:

           Database alias = RDSAM
           Database name = SAMPLE
           Node name = NDSAM
           Database release level = b.00
           Comment =
           Directory entry type = Remote
           Catalog database partition number = -1
           Alternate server hostname =
           Alternate server port number =

       Database 2 entry:

           Database alias = SINGLE
           Database name = SINGLE
           Local database directory = /home/db2singl
           Database release level = b.00
           Comment =
           Directory entry type = Indirect
           Catalog database partition number = 0
           Alternate server hostname =
           Alternate server port number =


- Catalog DB 접속 테스트

   /home/db2singl]$ db2 connect to rdsam user db2inst1 using db2inst1

        Database Connection Information

            Database server = DB2/LINUX 9.1.3
            SQL authorization ID = DB2INST1
            Local database alias = RDSAM

   /home/db2singl]$ db2 "select * from source_tab"

             ID
      -----------
             1

      1 record(s) selected.




3. Register the wrapper


Data Source에 따라서 Wrapper를 설정해 주면 된다.

Default Wrapper Name은 다음과 같다.

 Data Source  Default Wrapper Name
 DB2 Universal Database™ for UNIX and Windows®  DRDA
 DB2 Universal Database for z/OS and OS/390®  DRDA
 DB2 Universal Database for iSeries  DRDA
 Informix  INFORMIX
 Oracle  SQLNet or Net8
 Microsoft® SQL Server  DJXMSSQL3, MSSQLODBC3
 ODBC  none
 OLE DB  OLEDB
 Sybase  CTLIB, DBLIB
 BLAST  none
 Documentum  none
 Microsoft Excel  none
 Table-structured files  none
 XML  none


테스트에서는 DB2(UDB)에 대해서 테스트를 진행 하므로 Default Wrapper Name은 DRDA를 사용하기로 함

 
- Wrapper 생성

   /home/db2singl]$ db2 "create wrapper drda"
         DB20000I The SQL command completed successfully.

- Wrapper 생성 확인

   /home/db2singl]$ db2 "select * from syscat.wrappers"
 
      WRAPNAME      WRAPTYPE      WRAPVERSION         LIBRARY           REMARKS
   ---------------- ------------- ------------------ ------------------ --------------
          DRDA                    R                       0                libdb2drda.so
  
       1 record(s) selected.




4. Register the server definition


Data source Server에 관련된 정보를 입력하는 부분이다.
다른 모든 명령어는 CLP 의 Command 모드에서 수행이 가능하나, Create Server 구문은 Command 모드가 아닌 Interactive input 모드에서 기동시켜야 한다. 이것때문에 한 동안 삽질좀 했슴.

CLP의 Command 모드는 db2 " ~~~ " 로 시작하는 상태를 이야기 하는 것이고 , CLP의 Interactive input 모드는 db2 만 친 후에 db2 => 프롬프트가 뜬 상태에서 입력하는 상태를 의미한다. 

 
   db2 => CREATE SERVER SERSAM \
   db2 (cont.) => TYPE DB2/UDB \
   db2 (cont.) => VERSION 9.1  \
   db2 (cont.) => WRAPPER DRDA \
   db2 (cont.) => AUTHORIZATION "db2inst1"  \
   db2 (cont.) => PASSWORD "db2inst1" \
   db2 (cont.) => OPTIONS (ADD NODE 'NDSAM', ADD DBNAME 'RDSAM' ) 
   db2 (cont.) => DB20000I The SQL command completed successfully.
   db2 =>
   db2 => select * from syscat.servers
 
    WRAPNAME      SERVERNAME     SERVERTYPE   SERVERVERSION  REMARKS
   --------------  ----------------  --------------- ------------------ -----------
         DRDA              SERSAM              DB2/UDB                  9                    -

      1 record(s) selected.

    db2 =>




5. Create the user mappings


유저 매핑 또한 CLP interactive input 모드로 작성해 주는 것이 좋다.

주의 할 것은 password와 auth id 부분을 create server 생성시와 동일하게 잘 적어 주어야 한다는 것이다.

 
- User Mapping 

   db2 => create user mapping for db2singl server sersam options ( remote_authid 'db2inst1' , remote_password 'db2inst1')
       DB20000I The SQL command completed successfully.

- 접속 테스트 

   CLP interactive 모드를 빠져 나왔다가 다시 접속 후 테스트 수행

   db2 => set passthru sersam   <-- 수행시키는 쿼리를 source DB에서 수행하라는 뜻
       DB20000I The SQL command completed successfully.
   db2 => select * from source_tab

                 ID
           -----------
                 1

          1 record(s) selected.
    db2 => set passthru reset
    db2 => terminate
        DB20000I The TERMINATE command completed successfully.


여기까지 생성하면 이기종 DB나 분산환경에서 사용할 수 있는 설정은 다 끝나게 된다. 
그런데 매번 Application 안에서 SET PASSTHRU 명령을 사용할 수 없는 경우들이 더 많다.

이럴 경우 Nicname을 만들어서 사용하면, 명시적으로 SET PASSTHRU 명령을 사용하지 않아도 된다.

또 한 예로 passthru 를 이용하여 분산쿼리를 수행시 source table이 LOB 컬럼을 가질 경우 쿼리가 SQL3324N 에러를 내면서 실패 할 수 있다. 이럴경우 nickname을 생성해서 사용 시 에러없이 사용이 가능함.


6. Nickname 생성 


분산환경에서 좀더 편하게 쿼리를 사용하기 위해서 nickname을 생성해 보자.

 
- Nickname 생성

   db2 => create nickname inst1_source_tab for sersam.db2inst1.source_tab
        DB20000I The SQL command completed successfully.

- Nickname 사용
 
   db2 => select * from inst1_source_Tab

                 ID
           -----------
                 1

          1 record(s) selected.
   db2 =>


오라클은 동일 Oracle 끼리는 쉽게 DB Link라는 것을 이용해서 접속을 할 수 있다.
타 기종의 RDBMS와 접속을 하기 위해서는 Oracle에서 제공하는 Gateway를 사용해야 한다.

그러나 DB2는 동일 DB2 또는 이 기종 RDBMS를 사용하기 위해서는 Federated Server를 설정해서 사용해야 한다.

어떻게 보면 통일성이 있어서 좋긴 하지만 , 오라클에서 오라클로 간단하게 DB Link를 생성해서 사용하던 Oracle 유저 입장에서는 설정해 주어야 할 부분들이 많아서 다소 번거로운 면이 없지 않다 .

특히 서버 설정 부분에서 설정을 잘 못할 경우 서버 설정이 제대로 되었는지 체크 하는데 많은 시간이 소요된다.
오라클 같은경우 tnsnames.ora 파일만 확인해 주면 쉽게 확인이 되지만 ...
반응형

+ Recent posts