728x90
반응형
Federated system 이란 DB2 에서 다른 DB2 Database 및 이기종 DB에 대하여 쿼리를 이용하여 데이터를 엑세스 할 수 있도록 구성된 System을 말한다.
위와 같이 Default Value는 NO로 되어 있다. 이 파라메터를 변경 후에는 DB2를 Restart 시켜야 한다.
2. Federated DB의 설정이 되었으면 , 접속하고자 하는 Data Source에 대한 설정을 한다.
여기까지 생성하면 이기종 DB나 분산환경에서 사용할 수 있는 설정은 다 끝나게 된다.
오라클은 동일 Oracle 끼리는 쉽게 DB Link라는 것을 이용해서 접속을 할 수 있다.
구성도는 다음과 같을 수있다.
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 생성 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 파일만 확인해 주면 쉽게 확인이 되지만 ...
반응형