Amazon RDS for Db2 페더레이션
Amazon RDS for Db2 데이터베이스를 페더레이션 데이터베이스로 사용할 수 있습니다. RDS for Db2에 대한 페더레이션을 설정한 후에는 RDS for Db2 데이터베이스에서 여러 데이터베이스의 데이터에 액세스하고 이를 쿼리할 수 있습니다. 페더레이션을 사용하면 데이터를 RDS for Db2 데이터베이스로 마이그레이션하거나 데이터를 단일 데이터베이스로 통합하지 않아도 됩니다.
RDS for Db2 데이터베이스를 페더레이션 데이터베이스로 사용하면 데이터를 서로 다른 데이터베이스에 보관하면서 모든 RDS for Db2 기능에 계속 액세스하고 다양한 AWS 서비스를 활용할 수 있습니다. 동일한 유형의 서로 다른 데이터베이스를 연결하는 동종 페더레이션과 유형이 서로 다른 여러 데이터베이스를 연결하는 이기종 페더레이션을 모두 설정할 수 있습니다.
먼저 RDS for Db2의 Db2 데이터베이스를 원격 데이터베이스에 연결합니다. 그런 다음 연결된 모든 데이터베이스에 대해 쿼리를 실행할 수 있습니다. 예를 들어 RDS for Db2 데이터베이스의 테이블을 z/OS 기반 원격 Db2 데이터베이스의 테이블과 조인하는 SQL JOIN 문을 실행할 수 있습니다.
동종 페더레이션
RDS for Db2 데이터베이스와 다음 Db2 제품군 간에 동종 페더레이션을 설정할 수 있습니다.
-
Linux, UNIX 및 Windows(LUW)용 Db2
-
Db2 iSeries
-
Db2 for z/OS
RDS for Db2 동종 페더레이션은 다음 동작을 지원하지 않습니다.
-
RDS for Db2 호스트 데이터베이스에서 노드 디렉터리와 원격 데이터베이스를 설정하는
CATALOG
명령 실행 -
z/OS 기반 Db2에 대해 페더레이션할 때 워크로드 밸런싱(WLB) 설정
-
IBM 데이터 서버 드라이버 구성 파일(
db2dsdriver.cfg
) 구성
RDS for Db2 동종 페더레이션의 요구 사항은 다음과 같습니다.
-
UNFENCED
모드에서 DRDA 래퍼를 생성해야 합니다. 그러지 않으면 RDS for Db2에서 페더레이션이 작동하지 않습니다. -
RDS for Db2 호스트 데이터베이스에서 원격 호스트 데이터베이스로 들어오는 트래픽과 나가는 트래픽을 허용해야 합니다. 자세한 내용은 보안 그룹을 생성하여 VPC 내부의 DB 인스턴스에 대한 액세스를 제공 단원을 참조하십시오.
1단계: DRDA 래퍼 및 페더레이션 서버 생성
동종 페더레이션을 위해 DRDA 래퍼와 페더레이션 서버를 생성합니다. 원격 호스트에 연결할 때는 HOST
, PORT
및 DBNAME
을 사용합니다.
원격 Db2 데이터베이스 유형에 따라 다음 방법 중 하나를 선택합니다.
-
Linux, UNIX 및 Windows(LUX)용 Db2 데이터베이스 - 다음 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 serverserver_name
type db2/mvs versiondb2_version
wrapperwrapper_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');
-
z/OS용 Db2 – 다음 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 serverserver_name
type db2/mvs versiondb2_version
wrapperwrapper_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');
2단계: 사용자 매핑 만들기
다음 SQL 명령어를 실행하여 사용자 매핑을 만들고 페더레이션 서버를 데이터 소스 서버와 연결합니다. 다음 예제에서는 server_name
을 작업을 수행하려는 원격 서버의 이름으로 바꿉니다. 이 서버는 1단계에서 만든 서버입니다. username
및 password
를 이 원격 서버의 자격 증명으로 바꿉니다.
create user mapping for user server
server_name
options (REMOTE_AUTHID 'username
', REMOTE_PASSWORD 'password
');
자세한 내용은 IBM Db2 설명서의 사용자 매핑
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
ontable_name
(column_name
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); insert intotable_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 nicknamenickname
forserver_name
."username
"."table_name
"; selectsql_command
fromnickname
; 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;
이기종 페더레이션
RDS for Db2 데이터베이스와 Oracle 및 Microsoft SQL Server 등의 다른 데이터 소스 간에 이기종 페더레이션을 설정할 수 있습니다. Db2 LUW가 지원하는 데이터 소스의 전체 목록은 IBM 지원 사이트의 Db2 LUW V11.5에 번들로 제공되는 페더레이션의 데이터 소스 지원 매트릭스
RDS for Db2 이기종 페더레이션은 다음 항목을 지원하지 않습니다.
-
다른 데이터 소스의 네이티브 래퍼
-
다른 데이터 소스의 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 페더레이션 및 ODBC 드라이버를 사용하여 Oracle을 쿼리하는 방법
페더레이션을 지원하는 데이터 소스에 대한 자세한 내용은 IBM Support 사이트의 Db2 LUW V11.5에 번들로 제공되는 페더레이션의 데이터 소스 지원 매트릭스
1단계: ODBC 래퍼 만들기
다음 명령을 실행하여 래퍼를 생성합니다.
db2 "create wrapper odbc options( module '/home/rdsdb/sqllib/federation/odbc/lib/libodbc.so')"
2단계: 페더레이션 서버 만들기
다음 명령을 실행하여 페더레이션 서버를 생성합니다. 다음 예제에서는 server_name
을 페더레이션에 사용할 서버의 이름으로 바꿉니다. wrapper_type
을 적절한 래퍼로 바꿉니다. db_version
을 원격 데이터베이스 버전으로 바꿉니다. dns_name
, port
및 service_name
을 연결하려는 원격 데이터베이스의 적절한 값으로 바꿉니다.
db2 "create server
server_name
typewrapper_type
versiondb_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')“
3단계: 사용자 매핑 만들기
다음 SQL 명령어를 실행하여 사용자 매핑을 만들고 페더레이션 서버를 데이터 소스 서버와 연결합니다. 다음 예제에서는 server_name
을 작업을 수행하려는 원격 서버의 이름으로 바꿉니다. 이 서버는 2단계에서 만든 서버입니다. username
및 password
를 이 원격 서버의 자격 증명으로 바꿉니다.
create user mapping for user server
server_name
options (REMOTE_AUTHID 'username
', REMOTE_PASSWORD 'password
');
자세한 내용은 IBM Db2 설명서의 사용자 매핑
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
ontable_name
(column_name
); insert intotable_name
values(column1_value
,column2_value
,column3_value
); insert intotable_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 nicknamenickname
forserver_name
."username
"."table_name
"; selectsql_command
fromnickname
; 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;