[DB2] DB2-Oracle Federation 설정법
- Databases/DB2
- 2020. 8. 10.
◈ 선수조건
DB2 인스턴스와 DB생성 및 제거 그리고 환경설정을 무리없이 할수 있다는 전제하에 진행합니다.
또한 Oracle Version 을 알아두어야 합니다.
1. Infosphere Federation Server설치
(현제 최신버전은 Infosphere Federation Server 9.7 Fixpack3a)
- V9.7 FixPack3a버전은 /opt/IBM/wsii/V9.7이 기본 설치경로
- 역시 DB2가 설치된 서버에서 같은 버전의 통칭 WFS(Websphere Federation Server)가 설치되어야 합니다.
- DataJoiner 혹은 DB2 II 혹은 WII 혹은 WFS 모두 같은 제품을 가리킴. 즉, DB2가 V8이면 DB2 II V8.x 혹은 DB2 V9 이면 WII 혹은 WFS V9.x
- 참고로 Infosphere Federation Server 9.7은 Unix(Aix, Solaris)는 CDE환경에서만 설치가 가능합니다.
(Vncserver에서도 설치가능. 오라클처럼 xhost설정은 필요없습니다.)
- 이하 FS로 약칭을 사용합니다.
※ 설치 전 주의사항
- iisetup -console 옵션으로 콘솔 설치 가능한것처럼 나오나 절대 설치 않됩니다.
(콘솔설치 성공하신 분은 설치 방법좀 가르쳐 주시기 바랍니다.)
- 설치 옵션에서 기존 DB2에 모듈만 설치하는 설치 옵션이 나오나 진행중 먹통이 됩니다.
그러므로 신규로 설치하는것이 가장 문안한 것으로 판단됩니다.
(설치진행 후 화면 멈춤 현상에서 30분 이상 기다려도 않됩니다. 성공기 부탁드립니다.)
2. FS에 Oracle Clieent가 설치필요.
3. Oracle의 tnsnames.ora를 수정하여 Remote Oracle Server 정보 등록.
DB2FS =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <IPADDRESS>)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORA10G)
)
)
4. DB2 인스턴스 및 DB 생성.
$ db2icrt -u jhlfs jhlfs
$ db2 create database sample
5.db2dj.ini 작성
instance home의 sqllib/cfg 위치에 db2dj.ini를 작성합니다.
그리고 다음과 같이 입력합니다.
ORACLE_HOME=<oracle home directory>
Oracle Home Directory는 profile파일안의 ORACLE_HOME 경로를 의미한다.
6. DBM 환경 설정.
- 현재 환경을 확인해봅니다.
$ db2 get dbm cfg | grep -i federated
Federated Database System Support (FEDERATED) = NO
- NO를 YES로 바꾸어 준다.
$ db2 update dbm cfg using federated yes
- 재확인
$ db2 get dbm cfg | grep -i federated
Federated Database System Support (FEDERATED) = YES
7. DB2 인스턴스의 레지스트리 파라미터 설정
- 설정 방법
$ db2set DB2_DJ_COMM=libdb2drda.a,libdb2net8.a,libdb2net8F.a
$ db2set DB2_DJ_INI=<instance_home>/sqllib/cfg/db2dj.ini <- 인스턴스 디렉토리의 위치 입력.
- 확인
$ db2set -all
[i] DB2_DJ_COMM=libdb2drda.a,libdb2net8.a,libdb2net8F.a
[i] DB2_DJ_INI=<instance_home>/sqllib/cfg/db2dj.ini
8. wrapper생성에 필요한 라이브러리 생성.
- root로 로그인
- <FS서버 설치 디렉토리>/bin
- djxlinkOracle 실행
$ ./djxlinkOracle
- 실행 후 다음과 같은 결과 파일이 떨어진다.
DB2_DJ_INI = /jhlee/jhlfs/sqllib/cfg/db2dj.ini
ORACLE_HOME = <oracle home directory>
Found version "8.0" or higher of client.
Library "libdb2net8F.a" was built successfully.
9. 생성 파일을 확인.
$ cd <db2 설치 directory>/lib64
ls -al | grep -i db2net
-r--r--r-- 1 bin bin 15396 Apr 21 16:09 libdb2net8.a
-rwxr-xr-x 1 root system 798924 Apr 21 16:28 libdb2net8F.a
-r--r--r-- 1 bin bin 560828 Apr 21 16:09 libdb2net8U.a
위의 3가지 파일이 Oracle Federation을 구성할때 메인 파일이라고 합니다.
10. instance update
$ db2iupdt <instance owner 계정> : root로 수행.
11. wrapper 명령어 개념잡기
11.1 Wrapper define
db2 create wrapper <wrapper-name>
11.2 Server define
db2 "create server <server-name> type oracle version <version> wrapper <wrapper-name> options ( node '<tnsname>', password 'Y' )"
11.3 User mapping
db2 "create user mapping for <db2 username> server <server-name> options ( remote_authid '<oracle-user-name>', remote_password '<oracle-user-password>' )"
11.4 Nickname define
db2 "create nickname <nickname> for <server-name>.<mapping username>.<tablename>"
12. 명령어 정리
위의 개념을 바탕으로 다음과 같이 입력합니다.
입력 : db2 create wrapper NET8
출력 : DB20000I The SQL command completed successfully.
------------------------------------------------------
입력 : db2 "create server orasvr1 type oracle version '10.2.0.1.0' wrapper net8 options(node 'DB2LINK', password 'Y')"
출력 : DB20000I The SQL command completed successfully.
------------------------------------------------------
입력 : db2 "create user mapping for jhlfs server orasvr1 options(remote_authid 'jhlee', remote_password 'templer')"
출력 : DB20000I The SQL command completed successfully.
------------------------------------------------------
입력 : db2 "create nickname fsemp for orasvr1.jhlee.emp"
출력 : DB20000I The SQL command completed successfully.
확인 :
$ db2 describe table fsemp;
type이 'N' 으로 나오면 성공
13. 에러 대처
13.1 : Nickname 생성시 에러.
DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL1822N Unexpected error code "ORA_1804" received from data source
"ORASVR1". Associated text and tokens are "The Oracle OCIInitialize function
returned error 0x07". SQLSTATE=560BD
위와 비슷한 에러가 발생하는 경우 다음과 같은 조처를 취한다.
ORA_1804 -> time server(zone) 관련 에러.
====================================
ora-1804 에러에 관련된 oracle patch
현제 오라클 10.2.0.1.0 이라면 이 버전 이상으로 패치를 해야만 정상적으로 실행이 된다.
=====================================
13.2 : 라이브러리 관련 에러
$ db2set DB2_DJ_COMM=libdb2drda.a,libdb2net8.a,libdb2net8F.a
여기서 반드시 libdb2net8F.a를 포함시켜 주어야 합니다.
db2 create wrapper NET8 명령어를 입력시 libdb2net8F.a 관련 파일이 없다는등의 에러가 발생한다면 이건 위에 추가를 않해주었기 때문입니다. 보통 인터넷에 libdb2net8.a 만 추가하면 되는 형식으로 나와 있는데 절대 되지 않습니다. libdb2net8F.a, 즉 F까지 포함된 파일이 들어가야 정상적으로 작동이 됩니다.
14. passthru를 이용한 오라클 직접 접속
그외 SERVER 생성단계를 마친후 유저맵핑을 하지 않았더라도 set passthru 명령을 이용하여 오라클 데이터소스에 대한 연결 테스트가 가능힙ㄴ;디. ( 등록한 서버이름를 이용하여 set passthru 하고 오라클 쿼리가 수행되면 set passthru reset 하여 원래 상태로 돌아옵니다. )
연결테스트
1. db2 set passthru <서버이름>
2. db2 "<오라클 native 쿼리>"
3. db2 set passthru reset
예)
1. db2 set passthru orasvr1
2. db2 "select count(*) from user_tables"
3. db2 set passthru reset
15. Wrapper 조회.
db2look을 사용하여 Federation 된 wrapper를 조회할 수 있습니다.
db2look -d <database_name> -e -wrapper NET8 -fedonly -o <database_name>.look
16. wrapper 제거 방법
설명 : db2 drop wrapper <wrapper-name>
예제 : db2 drop wrapper NET8
'Databases > DB2' 카테고리의 다른 글
[DB2] 이벤트 모니터를 이용한 파일 출력 (0) | 2020.09.04 |
---|---|
[DB2] HADR 구성하기 (0) | 2020.08.20 |
[DB2] DB2 - DB2 Federation 서버 구성 (0) | 2020.08.04 |
[DB2] Federation 서버 구성 (0) | 2020.08.02 |
[DB2] DB2 로그들 (0) | 2020.07.31 |