Amazon RDS for Db2 페더레이션
Amazon RDS for Db2 페더레이션
이 문서는 Amazon RDS 사용자 가이드의 Db2 관련 페이지를 한국어로 설명합니다.
출처: 문서
본문
Amazon RDS for Db2 데이터베이스를 페더레이션 데이터베이스(federated database)로 사용할 수 있습니다. RDS for Db2에 페더레이션을 설정하면 RDS for Db2 데이터베이스에서 여러 데이터베이스에 걸쳐 데이터에 액세스하고 쿼리할 수 있게 됩니다. 페더레이션을 사용하면 데이터를 RDS for Db2 데이터베이스로 마이그레이션하거나 단일 데이터베이스로 통합할 필요가 없습니다.
RDS for Db2 데이터베이스를 페더레이션 데이터베이스로 사용하면 데이터를 여러 데이터베이스에 유지하면서도 모든 RDS for Db2 기능에 계속 액세스하고 다양한 AWS 서비스를 활용할 수 있습니다. 동일한 유형의 서로 다른 데이터베이스를 연결하는 동종(homogeneous) 페더레이션과, 서로 다른 유형의 데이터베이스를 연결하는 이종(heterogeneous) 페더레이션을 모두 설정할 수 있습니다.
먼저 RDS for Db2의 Db2 데이터베이스를 원격 데이터베이스에 연결합니다. 그런 다음 연결된 모든 데이터베이스에 대해 쿼리를 실행할 수 있습니다. 예를 들어 RDS for Db2 데이터베이스의 테이블과 원격 Db2 on z/OS 데이터베이스의 테이블을 조인하는 SQL JOIN 문을 실행할 수 있습니다.
Topics
- 동종 페더레이션(Homogeneous federation)
- 이종 페더레이션(Heterogeneous federation)
동종 페더레이션(Homogeneous federation)
RDS for Db2 데이터베이스와 다음 Db2 제품군 사이에 동종 페더레이션을 설정할 수 있습니다.
- Db2 for Linux, UNIX, Windows (LUW)
- Db2 iSeries
- Db2 for z/OS
RDS for Db2 동종 페더레이션은 다음 작업을 지원하지 않습니다.
- RDS for Db2 호스트 데이터베이스에서 노드 디렉터리와 원격 데이터베이스를 설정하기 위한
CATALOG명령 실행 - Db2 on z/OS로 페더레이션할 때 워크로드 밸런싱(Workload Balancing, WLB) 설정
- IBM 데이터 서버 드라이버 구성 파일(
db2dsdriver.cfg) 구성
RDS for Db2 동종 페더레이션에는 다음 요구 사항이 있습니다.
DRDA래퍼를 UNFENCED 모드로 생성해야 합니다. 그렇지 않으면 RDS for Db2에서 페더레이션이 작동하지 않습니다.- RDS for Db2 호스트 데이터베이스에서 원격 호스트 데이터베이스로의 인바운드 및 아웃바운드 트래픽을 허용해야 합니다. 자세한 내용은 보안 그룹을 생성하여 VPC의 DB 인스턴스에 대한 액세스 제공하기를 참조하세요.
Step 1: DRDA 래퍼와 페더레이션 서버 생성
동종 페더레이션의 경우 DRDA 래퍼와 페더레이션 서버를 생성합니다. 원격 호스트에 대한 연결은 HOST, PORT, DBNAME을 사용합니다.
원격 Db2 데이터베이스의 유형에 따라 다음 방법 중 하나를 선택하세요.
-
Db2 for Linux, UNIX, and Windows (LUW) 데이터베이스 – 다음 SQL 명령을 실행합니다. 다음 예제에서
server_name을 페더레이션에 사용할 서버 이름으로 바꾸세요.db2_version을 원격 Db2 데이터베이스의 버전으로 바꾸세요.username과password를 연결하려는 원격 Db2 데이터베이스의 자격 증명으로,db_name,dns_name,port를 연결하려는 원격 Db2 데이터베이스에 적합한 값으로 바꾸세요.create wrapper drda options(DB2_FENCED 'N'); create server server_name type DB2/LUW wrapper drda version 'db2_version' authorization "master_username" password "master_password" options (add DBNAME 'db_name',add HOST 'dns_name',add PORT 'port');예시
create wrapper drda options(DB2_FENCED 'N'); create server SERVER1 type DB2/LUW wrapper drda version '11.5' authorization "sysuser" password "******" options (add DBNAME 'TESTDB2',add HOST 'ip-123-45-67-899.us-west-1.compute.internal',add PORT '25010'); -
Db2 iSeries – 다음 SQL 명령을 실행합니다. 다음 예제에서
wrapper_name과library_name을 DRDA 래퍼의 이름과 래퍼 라이브러리 파일로 바꾸세요.server_name을 페더레이션에 사용할 서버 이름으로 바꾸세요.db2_version을 원격 Db2 데이터베이스의 버전으로,username과password를 연결하려는 원격 Db2 데이터베이스의 자격 증명으로 바꾸세요.dns_name,port,db_name을 연결하려는 원격 Db2 데이터베이스에 적합한 값으로 바꾸세요.create wrapper wrapper_name library 'library name' options(DB2_FENCED 'N'); create server server_name type db2/mvs version db2_version wrapper wrapper_name authorization "sername" password "password" options (HOST 'dns_name', PORT 'port', DBNAME 'db_name');예시
create wrapper WRAPPER1 library 'libdb2drda.so' options(DB2_FENCED 'N'); create server SERVER1 type db2/mvs version 11 wrapper WRAPPER1 authorization "sysuser" password "******" options (HOST 'test1.123.com', PORT '446', DBNAME 'STLEC1'); -
Db2 for z/OS – 다음 SQL 명령을 실행합니다. 다음 예제에서
wrapper_name과library_name을 DRDA 래퍼의 이름과 래퍼 라이브러리 파일로 바꾸세요.server_name을 페더레이션에 사용할 서버 이름으로,db2_version을 원격 Db2 데이터베이스의 버전으로 바꾸세요.username과password를 연결하려는 원격 Db2 데이터베이스의 자격 증명으로,dns_name,port,db_name을 연결하려는 원격 Db2 데이터베이스에 적합한 값으로 바꾸세요.create wrapper wrapper_name library 'library_name' options(DB2_FENCED 'N'); create server server_name type db2/mvs version db2_version wrapper wrapper_name authorization "username" password "password" options (HOST 'dns_name', PORT 'port', DBNAME 'db_name');예시
create wrapper WRAPPER1 library 'libdb2drda.so' OPTIONS(DB2_FENCED 'N'); create server SERVER1 type db2/mvs version 11 wrapper WRAPPER1 authorization "sysuser" password "******" options (HOST 'test1.123.com', PORT '446', DBNAME 'STLEC1');
Step 2: 사용자 매핑 생성
다음 SQL 명령을 실행하여 페더레이션 서버를 데이터 소스 서버와 연결하는 사용자 매핑(user mapping)을 생성합니다. 다음 예제에서 server_name을 작업을 수행할 원격 서버의 이름으로 바꾸세요. 이것은 1단계에서 생성한 서버입니다. username과 password를 이 원격 서버의 자격 증명으로 바꾸세요.
create user mapping for user server server_name options (REMOTE_AUTHID 'username', REMOTE_PASSWORD 'password');
자세한 내용은 IBM Db2 설명서의 사용자 매핑을 참조하세요.
Step 3: 연결 확인
연결을 확인하여 페더레이션 설정이 성공했는지 확인합니다. SET PASSTHRU 명령을 사용하여 원격 데이터 소스에 네이티브 SQL 명령을 보내는 세션을 열고, 원격 데이터 서버에 테이블을 생성합니다.
-
데이터 소스에 SQL을 제출할 세션을 열고 닫습니다. 다음 예제에서
server_name을 1단계에서 페더레이션용으로 생성한 서버의 이름으로 바꾸세요.set passthru server_name; -
새 테이블을 생성합니다. 다음 예제에서
column_name,data_type,value를 테이블에 적합한 항목으로 바꾸세요.create table table_name ( column_name data_type(value), column_name data_type(value);자세한 내용은 IBM Db2 설명서의 CREATE TABLE 문을 참조하세요.
-
인덱스를 생성하고, 테이블에 행 값을 삽입하고, 연결을 재설정합니다. 연결을 재설정하면 연결은 끊어지지만 백엔드 프로세스는 유지됩니다. 다음 예제에서
index_name,table_name,column_name,columnx_value를 자신의 정보로 바꾸세요.create index index_name on table_name(column_name); insert into table_name values(column1_value,column2_value,column3_value); insert into table_name values(column1_value,column2_value,column3_value); set passthru reset; connect reset; -
원격 Db2 데이터베이스에 연결하고, 원격 서버에 대한 별칭을 생성하고, 작업을 수행합니다. 원격 Db2 데이터베이스의 데이터 액세스를 마치면 연결을 재설정한 다음 종료합니다. 다음 예제에서
database_name을 원격 Db2 데이터베이스의 이름으로 바꾸세요.nickname을 이름으로 바꾸세요.server_name과table_name을 작업을 수행할 원격 서버 및 해당 서버의 테이블 이름으로 바꾸세요.username을 원격 서버의 정보로,sql_command를 원격 서버에서 수행할 작업으로 바꾸세요.connect to database_name; create nickname nickname for server_name."username"."table_name"; select sql_command from nickname; connect reset; terminate;
예시
다음 예제는 페더레이션 서버 testdb10에서 작업할 수 있도록 패스스루 세션을 생성합니다.
그 다음 세 개의 서로 다른 데이터 유형을 가진 세 개의 열로 구성된 테이블 t1을 생성합니다.
그런 다음 테이블 t1의 세 열에 인덱스 i1_t1을 생성합니다. 이후 이 세 열에 값을 넣은 두 개의 행을 삽입하고 연결을 끊습니다.
마지막으로 원격 Db2 데이터베이스 testdb2에 연결하고 페더레이션 서버 testdb10의 테이블 t1에 대한 별칭을 생성합니다. 해당 데이터 소스에 대해 TESTUSER라는 사용자 이름으로 별칭을 생성합니다. SQL 명령이 테이블 t1의 모든 데이터를 출력합니다. 예제는 연결을 끊고 세션을 종료합니다.
set passthru testdbl0;
create table t1 ( c1 decimal(13,0), c2 char(200), c3 int);
create index i1_t1 on t1(c3);
insert into t1 values(1,'Test',1);
insert into t1 values(2,'Test 2',2);
connect reset;
connect to testdb2;
create nickname remote_t1 for testdbl0."TESTUSER"."T1";
select * from remote_t1;
connect reset;
terminate;
이종 페더레이션(Heterogeneous federation)
RDS for Db2 데이터베이스와 Oracle, Microsoft SQL Server 같은 다른 데이터 소스 사이에 이종 페더레이션을 설정할 수 있습니다. Db2 LUW가 지원하는 데이터 소스의 전체 목록은 IBM Support 사이트의 Db2 LUW V11.5에 번들된 페더레이션의 데이터 소스 지원 매트릭스(Data Source Support Matrix of Federation Bundled in Db2 LUW V11.5)를 참조하세요.
RDS for Db2 이종 페더레이션은 다음 항목을 지원하지 않습니다.
- 다른 데이터 소스용 네이티브 래퍼(native wrapper)
- 다른 데이터 소스용 JDBC 래퍼
- Sybase, Informix, Teradata 데이터 소스에 대한 페더레이션 – 이러한 데이터 소스는 RDS for Db2에 클라이언트 소프트웨어 설치가 필요하기 때문입니다.
RDS for Db2 이종 페더레이션에는 다음 요구 사항이 있습니다.
- RDS for Db2는 ODBC 래퍼 방식만 지원합니다.
- 래퍼의 명시적 정의를 생성하는 경우 옵션
DB2_FENCED를'N'으로 설정해야 합니다. ODBC에 유효한 래퍼 옵션 목록은 IBM Db2 설명서의 ODBC 옵션을 참조하세요. - RDS for Db2 호스트 데이터베이스에서 원격 호스트 데이터베이스로의 인바운드 및 아웃바운드 트래픽을 허용해야 합니다. 자세한 내용은 보안 그룹을 생성하여 VPC의 DB 인스턴스에 대한 액세스 제공하기를 참조하세요.
Oracle에 대한 페더레이션에 관한 정보는 IBM Support 사이트의 Db2 Federation과 ODBC 드라이버로 Oracle을 쿼리하는 방법(How to query Oracle by using Db2 Federation and the ODBC driver?)을 참조하세요.
페더레이션을 지원하는 데이터 소스에 대한 자세한 내용은 IBM Support 사이트의 Db2 LUW V11.5에 번들된 페더레이션의 데이터 소스 지원 매트릭스를 참조하세요.
Step 1: ODBC 래퍼 생성
다음 명령을 실행하여 래퍼를 생성합니다.
db2 "create wrapper odbc options( module '/home/rdsdb/sqllib/federation/odbc/lib/libodbc.so')"
Step 2: 페더레이션 서버 생성
다음 명령을 실행하여 페더레이션 서버를 생성합니다. 다음 예제에서 server_name을 페더레이션에 사용할 서버의 이름으로 바꾸세요. wrapper_type을 적절한 래퍼로 바꾸세요. db_version을 원격 데이터베이스의 버전으로 바꾸세요. dns_name, port, service_name을 연결하려는 원격 데이터베이스에 적합한 값으로 바꾸세요.
db2 "create server server_name type wrapper_type version db_version options (HOST 'dns_name', PORT 'port', SERVICE_NAME 'service_name')"
래퍼 유형에 대한 정보는 IBM Support 사이트의 Db2 LUW V11.5에 번들된 페더레이션의 데이터 소스 지원 매트릭스를 참조하세요.
예시
다음 예제는 원격 Oracle 데이터베이스에 대한 페더레이션 서버를 생성합니다.
db2 "create server server1 type oracle_odbc version 12.1 options (HOST 'test1.amazon.com', PORT '1521', SERVICE_NAME 'pdborcl.amazon.com')"
Step 3: 사용자 매핑 생성
다음 SQL 명령을 실행하여 페더레이션 서버를 데이터 소스 서버와 연결하는 사용자 매핑을 생성합니다. 다음 예제에서 server_name을 작업을 수행할 원격 서버의 이름으로 바꾸세요. 이것은 2단계에서 생성한 서버입니다. username과 password를 이 원격 서버의 자격 증명으로 바꾸세요.
create user mapping for user server server_name options (REMOTE_AUTHID 'username', REMOTE_PASSWORD 'password');
자세한 내용은 IBM Db2 설명서의 사용자 매핑을 참조하세요.
Step 4: 연결 확인
연결을 확인하여 페더레이션 설정이 성공했는지 확인합니다. SET PASSTHRU 명령을 사용하여 원격 데이터 소스에 네이티브 SQL 명령을 보내는 세션을 열고, 원격 데이터 서버에 테이블을 생성합니다.
-
데이터 소스에 SQL을 제출할 세션을 열고 닫습니다. 다음 예제에서
server_name을 2단계에서 페더레이션용으로 생성한 서버의 이름으로 바꾸세요.set passthru server_name; -
새 테이블을 생성합니다. 다음 예제에서
column_name,data_type,value를 테이블에 적합한 항목으로 바꾸세요.create table table_name ( column_name data_type(value), column_name data_type(value);자세한 내용은 IBM Db2 설명서의 CREATE TABLE 문을 참조하세요.
-
인덱스를 생성하고, 테이블에 행 값을 삽입하고, 연결을 재설정합니다. 연결을 재설정하면 연결은 끊어지지만 백엔드 프로세스는 유지됩니다. 다음 예제에서
index_name,table_name,column_name,columnx_value를 자신의 정보로 바꾸세요.create index index_name on table_name(column_name); insert into table_name values(column1_value,column2_value,column3_value); insert into table_name values(column1_value,column2_value,column3_value); set passthru reset; connect reset; -
원격 Db2 데이터베이스에 연결하고, 원격 서버에 대한 별칭을 생성하고, 작업을 수행합니다. 원격 Db2 데이터베이스의 데이터 액세스를 마치면 연결을 재설정한 다음 종료합니다. 다음 예제에서
database_name을 원격 Db2 데이터베이스의 이름으로 바꾸세요.nickname을 이름으로 바꾸세요.server_name과table_name을 작업을 수행할 원격 서버 및 해당 서버의 테이블 이름으로 바꾸세요.username을 원격 서버의 정보로,sql_command를 원격 서버에서 수행할 작업으로 바꾸세요.connect to database_name; create nickname nickname for server_name."username"."table_name"; select sql_command from nickname; connect reset; terminate;
예시
다음 예제는 페더레이션 서버 testdb10에서 작업할 수 있도록 패스스루 세션을 생성합니다.
그 다음 세 개의 서로 다른 데이터 유형을 가진 세 개의 열로 구성된 테이블 t1을 생성합니다.
그런 다음 테이블 t1의 세 열에 인덱스 i1_t1을 생성합니다. 이후 이 세 열에 값을 넣은 두 개의 행을 삽입하고 연결을 끊습니다.
마지막으로 원격 Db2 데이터베이스 testdb2에 연결하고 페더레이션 서버 testdb10의 테이블 t1에 대한 별칭을 생성합니다. 해당 데이터 소스에 대해 TESTUSER라는 사용자 이름으로 별칭을 생성합니다. SQL 명령이 테이블 t1의 모든 데이터를 출력합니다. 예제는 연결을 끊고 세션을 종료합니다.
set passthru testdbl0;
create table t1 ( c1 decimal(13,0), c2 char(200), c3 int);
create index i1_t1 on t1(c3);
insert into t1 values(1,'Test',1);
insert into t1 values(2,'Test 2',2);
connect reset;
connect to testdb2;
create nickname remote_t1 for testdbl0."TESTUSER"."T1";
select * from remote_t1;
connect reset;
terminate;