이 기사에서는 AIX® 환경의 solidDB V6.5 데이터베이스와 Windows® 환경의 DB2® v9.7 데이터베이스 간에 SQL 패스스루를 구성하는 방법을 설명한다. 또한, SQL 패스스루를 구성하는 데 필요한 다양한 매개변수에 대해 논의하고 예제 구성을 살펴본다. 이 기사에는 solidDB SQL Editor를 사용하여 패스스루 모드에 따라 쿼리가 백엔드로 어떻게 전달되고 solidDB 프론트엔드에서 어떻게 실행되는지 설명하는 예제가 포함되어 있다.
일반적으로 SQL 패스스루는 solidDB Universal Cache 시스템과 함께 사용된다. 그러나 이 기사에서는 SQL 패스스루를 사용하는 방법을 solidDB Universal Cache 설정 과정에서 포함된 InfoSphere® CDC(Change Data Capture) 컴포넌트와 상호작용하지 않으면서 설명한다.
SQL 패스스루는 solidDB에 있는 하나의 기능으로 이 기능을 이용하면 애플리케이션에서 하나의 연결을 사용하여 프론트엔드와 백엔드 데이터베이스의 데이터를 액세스할 수 있다. 구성 매개변수를 사용하여 이 기능을 기본으로 사용하게 할 수 있으며 solidDB 관리 명령을 사용하여 하나의 세션이나 트랜잭션에서 이 기능을 사용하게 할 수 있다. 이 기사에서는 SQL 패스스루를 구성하는 두 가지 방법을 살펴본다.
SQL 패스스루를 사용 가능하도록 설정한 다음, 애플리케이션에서 SQL 쿼리를 실행하면 solidDB는 프론트엔드 solidDB 데이터베이스에서 참조 테이블을 검색한다. 참조 테이블을 찾을 수 없으면 solidDB는 백엔드 데이터베이스로 SQL 쿼리를 전달하고 그 결과를 적절하게 리턴한다. SQL 쿼리는 전체가 전달되거나 아무것도 전달되지 않을 수 있다. SQL 쿼리는 하나의 데이터베이스나 다른 데이터베이스에서 부분적으로 실행되지는 않는다.
다음과 같은 세 가지 작동 중 하나로 SQL 쿼리를 구성할 수 있다.
- NONE: SQL문이 백엔드로 전달되지 않는다.
- FORCE: 프론트엔드에서의 테이블의 존재 여부와 관계없이 SQL문이 언제나 백엔드 데이터베이스에서 실행된다.
- CONDITIONAL: 프론트엔드 데이터베이스에 테이블이 존재하면 SQL문은 프론트엔드에서 실행된다. 테이블이 존재하지 않으면 SQL문은 백엔드로 전달된다.
SQL 패스스루를 설정하는 데 필요한 주요 매개변수와 고려사항
SQL 패스스루를 사용할 준비를 하는 경우에는 다음과 같은 고려사항에 유념한다.
- SQL 패스스루는 언제나 프론트엔드 solidDB 서버에 구성한다.
- SQL 패스스루를 구성하기 전에 프론트엔드에 IBM Data Server Driver for ODBC and CLI를 설치해야 한다. IBM Data Server Driver for ODBC and CLI는 드라이버 관리자와 함께 사용하거나 직접 링크하여 독립적으로 사용할 수 있다. 이 기사에 있는 예제에서는 직접 링크하는 방법을 사용한다.
SQL 패스스루와 관련된 모든 매개변수는 solid.ini 파일의 [Passthrough] 섹션에 있다.
- RemoteServerDriverPath: 이 매개변수는 백엔드 데이터 서버에 적합한 ODBC 드라이버의 드라이버 경로를 지정한다. ODBC 드라이버는 백엔드에서 쿼리를 실행하기 위해 solidDB를 사용할 때 로드된다.
- RemoteServerDSN: 이 매개변수는 백엔드 연결 문자열(직접 링크)이나 데이터 소스 이름(드라이버 관리자)을 지정한다. 이 기사에서는 연결 문자열을 사용한다.
- Force32bitODBCHandles: 백엔드 서버가 Linux®, UNIX® 및 Windows용 DB2(DB2 LUW)이고 IBM Data Server Driver for ODBC and CLI를 직접 링크하여 사용하는 경우에는 64비트 환경에서 이 매개변수가 필요하다. 이 매개변수는 패스스루 모듈에서 백엔드 ODBC 드라이버로 32비트 ODBC 핸들을 사용하게 한다.
- SqlpassthroughRead/SqlpassthroughWrite: 이 매개변수는 읽기 및 쓰기 명령문의 기본 패스스루 모드를 지정한다. 이전 섹션에서 설명한 바와 같이 가능한 값은 NONE, CONDITIONAL 및 FORCE이다.
참고: 패스스루 모드는 SET PASSTHROUGH와 SET TRANSACTION PASSTHROUGH 명령문을 사용하여 런타임 시에 변경할 수 있다.
이 기사의 예제에서는 다음과 같은 소프트웨어와 레벨을 사용한다.
표 1. 예제 시나리오에서 사용한 소프트웨어
| 운영 체제 | 소프트웨어 |
|---|---|
| AIX 6.1 | IBM solidDB V6.5.0.2 Fix Pack 2 |
| IBM Data Server Driver For ODBC and CLI V9.7.0 | |
| Windows 2008 Server | IBM DB2 V9.7 Fix Pack 1 for Windows |
Linux, Unix 및 Windows용 DB2와 solidDB 간에 SQL 패스스루 설정
- 사용자 "solid"를 작성하고 새 사용자로 로그인한다.
- solidDB 6.5.0.2 FP2를 사용자 "solid"로
/home/solid/solidDB6.5.0.2
아래에 설치한다. /home/solid아래에 디렉토리 solid_db를 작성한다. 데이터베이스 파일은 이 디렉토리 아래에 작성된다.- 라이센스 파일(
solid.lic)을/home/solid/solid_db로 복사한다. /home/solid/solid_db로 이동한다. 사용자 이름을 "mysoluser"로 비밀번호를 "mysolpwd"로 하여 solidDB 데이터베이스(MYSOLDB)를 작성한다.solid -f -x exit -Umysoluser -Pmysolpwd -CMYSOLDB
명령을 사용한다.- 다음 명령을 사용하여 solidDB 서버를 중지한다.
solcon -eshutdown MYSOLDB mysoluser mysolpwd
- 빈
solid.ini파일을 작성하고 다음 항목을 이 파일에 복사한다.
목록 1. solid.ini 파일의 항목[General] DefaultStoreIsMemory=yes [IndexFile] Cachesize=100M [LogReader] LogReaderEnabled=yes [Logging] DurabilityLevel=1 [Com] Listen=tcp 21315 [Data Sources] SOLDB=tcp 21315
- 다음 명령을 사용하여
/home/solid/solid_db에서 다시 한 번 solidDB 서버를 시작한다.solid
solidDB 서버는solid.ini파일에 정의된 항목을 사용하여 시작된다. /home/solid/software/odbc_cli/
아래에 IBM Data Server Driver for ODBC and CLI를 설치한다.- 64비트 운영 체제에 필요한
shr_64.o가 생기도록 공유 라이브러리(/home/solid/software/odbc_cli/clidriver/lib/libdb2.a)를 추출한다. 혼동되지 않도록 하기 위해 이 파일의 이름을libdb2.so로 변경한다. 아래에 있는 명령을 사용한다.cd /home/solid/software/odbc_cli/clidriver/lib/ ar -x -X 64 libdb2.a mv shr_64.o libdb2.so
solidDB는 드라이버를 동적으로 로드하기 때문에 AIX에서는 이 단계가 필요하다. 나중에는 libdb2.so 파일 이름을 Passthrough.RemoteServerDriverPath 매개변수와 함께 사용한다. - DB2NOEXITLIST 환경 변수를 ON으로 설정한다.
export DB2NOEXITLIST=ON
백엔드(Windows 2008 Server 시스템) 설정
- Windows 사용자 "db2admin"을 작성한다.
- DB2 V9.7.0 Fix Pack 1을 설치한다.
- 사용자와 비밀번호를 모두 "db2admin"으로 하여 DB2 데이터베이스(SAMPLE)를 작성한다. 이 사용자에게는 SAMLPLE 데이터베이스에서 테이블을 작성하고 수정, 삭제할 수 있는 권한이 있어야 한다.
SQL 패스스루 모드를 구성하여 그 기능을 사용하기 전에 solid.ini 구성 파일에서 ODBC 드라이버와 백엔드 데이터베이스 간에 연결을 정의해야 한다. 이 연결은
직접 링크하거나 드라이버 관리자를 사용하여 작성할 수 있다.
이 기사에서는 직접 링크하는 방법을 사용한다. 아래 예제에서는 DB2 데이터 서버 노드의 IP 주소가 9.126.84.161이며 포트 번호는 50000이다.
다음 단계에서는 프론트엔드 solidDB와 백엔드 DB2 서버 간에 연결을 구성하는 방법을 살펴본다.
- AIX 시스템에 로그인하여 solid.ini 파일을 연다.
- SQL 패스스루 섹션 아래에 다음 행을 추가한다.
목록 2. AIX에서의 solid.ini 파일의 항목[Passthrough] RemoteServerDriverPath=/home/solid/solid_db/odbc_cli/clidriver/lib/libdb2.so RemoteServerDSN="Driver={IBM DB2 ODBC Driver};Database=sample;Hostname=9.126.84.161; Port=50000;Protocol=TCPIP;" Force32bitODBCHandles=yes passthroughEnabled=yes SqlpassthroughRead=Conditional SqlpassthroughWrite=Conditional
- 파일을 저장한 후, 종료한다.
solidDB SQL Editor를 사용하여 solidDB와 DB2 LUW 간의 SQL 패스스루를 나타내는 데모(solsql)
이 예제에서는 SQLpassthroughRead와 SQLpassthroughWrite 매개변수를 CONDITIONAL로 설정한다.
다음 단계를 수행하기 전에 DB2 서버가 시작되어 실행 중인지 확인해야 한다.
- 다음 명령을 사용하여 DB2 데이터베이스를 연결하고 테스트 테이블을 작성한다.
목록 3. 테스트 테이블 작성1) Start->Run->db2cmd 2) db2 "connect to sample user db2admin using db2admin" 3) db2 "create table testtab(name varchar(20), id int)" 4) db2 "insert into testtab values ('John', 435617), ('Sally', 564876), ('Larry', 987290)" 5) db2 "commit" 6) db2 "select * from testtab" NAME ID -------------------- ----------- John 435617 Sally 564876 Larry 987290
- 서버가 이미 시작되었으면 이 명령을 사용하여 solidDB 서버를 중지한다. 그렇지 않으면 이 단계를 무시한다.
solcon -eshutdown SOLDB mysoluser mysolpwd
- 프론트엔드에서
/home/solid/solid_db로 이동하고 다음 명령을 사용하여 solidDB 서버를 시작한다.solid
- solidDB SQL Editor를 시작하고 다음 명령을 사용하여 solidDB 데이터베이스를 연결한다.
solsql SOLDB mysoluser mysolpwd
- 다음 명령을 사용하여 백엔드 로그인 데이터를 작성한다.
create remote server MYSERVER username 'db2admin' password 'db2admin'; commit work;
CREATE REMOTE SERVER 명령문은 백엔드 서버의 로그인 데이터를 SYS_SERVER 테이블에 저장한다. SYS_SERVER 테이블의 내용을 쿼리할 수는 있지만, SYS_SERVER 테이블을 직접 수정할 수는 없다. 또한, 비밀번호는 숨겨지므로 SYS_SERVER 테이블의 PWD 열에는 NULL이 표시된다.팁: SYS_SERVER에 이미 로그인 데이터가 있는 경우에는 다음과 같은 오류가 발생한다.
SOLID Table Error 13460: Server <server_name> already exists
이 경우에는 다음과 같이 DROP REMOTE SERVER 명령문을 사용하여 로그인 데이터를 제거하고 다시 작성한다.
목록 4. 로그인 데이터의 제거 및 재작성drop remote server; commit work; select * from sys_server; NAME DRIVER CONNECT UID PWD ---- ------ ------- --- --- 0 rows fetched. create remote server MYSERVER username 'db2admin' password 'db2admin'; commit work;
- CONDITIONAL 모드의 패스스루 기능이 작동하는지 확인하기 위해 아래와 같이 solidDB에서 SQL문을 실행한다.
- testtab 테이블을 쿼리한다.
목록 5. 조건부 패스스루의 테스트select * from testtab; NAME ID ---- -- John 435617 Sally 564876 Larry 987290 3 rows fetched.
결과: SQLpassthroughRead 매개변수를 CONDITIONAL로 설정했고 프론트엔드에 'testtab' 테이블이 없기 때문에 solidDB는 SQL문을 전달하여 백엔드 DB2 데이터베이스에서 데이터를 페치한다.
- 다음 명령을 사용하여 solidDB 데이터베이스에서 testtab 테이블을 작성한다.
create table testtab(name varchar(20), id int); commit work;
- 다음 데이터를 testtab 테이블에 추가한다.
insert into testtab values('Amit', 663456); commit work; - testtab 테이블을 다시 쿼리한다.
select * from testtab; NAME ID ---- -- Amit 663456 1 rows fetched. commit work;
결과: SQL 쿼리는 프론트엔드에 존재하는 하나의 열을 페치한다. 이는 solidDB가 SQL문에서 참조된 테이블을 프론트엔드 데이터베이스에 찾을 수 있기 때문이다.
- testtab 테이블을 쿼리한다.
구성 파일에 지정된 기본 SQL 패스스루 모드는 SET TRANSACTION PASSTHROUGH와 SET PASSTHROUGH 명령문을 사용하여 세션이나 트랜잭션마다 대체할 수 있다.
- 하나의 트랜잭션에 SQL 패스스루를 설정하려면 다음 명령을 사용한다.
- 다음 트랜잭션의 읽기 레벨 패스스루 모드를 FORCE로 설정한다.
set transaction passthrough read force;
- testtab 테이블을 쿼리한다.
select * from testtab; NAME ID ---- -- John 435617 Sally 564876 Larry 987290 3 rows fetched.
결과: SQL 패스스루 읽기 레벨을 FORCE로 설정했기 때문에 백엔드 testtab 테이블의 데이터가 표시된다. FORCE로 설정하면 프론트엔드 데이터베이스에서의 testtab 테이블의 존재 여부와 관계없이 애플리케이션은 언제나 데이터를 백엔드 데이터베이스에서 쿼리한다.
- 트랜잭션을 커미트하고 다시 SQL 쿼리를 실행한다.
commit work; select * from testtab; NAME ID ---- -- Amit 663456 1 rows fetched.
결과: 하나의 트랜잭션에 대해서만 Read 패스스루 모드를 FORCE로 설정했기 때문에 쿼리에서 프론트엔드의 데이터가 표시된다.
- 다음 트랜잭션의 읽기 레벨 패스스루 모드를 FORCE로 설정한다.
- 하나의 세션에 패스스루를 설정하려면 다음 명령을 사용한다.
- 세션의 읽기 레벨 패스스루 모드를 FORCE로 설정한다.
set passthrough read force; commit work;
- testtab 테이블을 쿼리한다.
select * from testtab; NAME ID ---- -- John 435617 Sally 564876 Larry 987290 3 rows fetched.
- 트랜잭션을 커미트하고 다시 SQL 쿼리를 실행한다.
commit work; select * from testtab; NAME ID ---- -- John 435617 Sally 564876 Larry 987290 3 rows fetched.
결과: 쿼리를 여러 번 실행하면 백엔드의 데이터가 리턴된다. 이러한 결과는 전체 세션의 읽기 레벨 패스스루 모드를 FORCE로 설정했기 때문이다.
- 세션의 읽기 레벨 패스스루 모드를 FORCE로 설정한다.
이 기사에서는 SQL 패스스루를 성공적으로 설정하는 데 필요한 매개변수와 기본 단계를 살펴보았다. 또한, 다양한 매개변수를 어떻게 사용할 수 있는지 그리고 이러한 매개변수가 SQL 패스스루에 어떻게 영향을 주는지 단계별로 설명했다. 이 기사를 성공적으로 마치게 되면 SQL 패스스루를 구성할 수 있게 된다.
기술적인 내용을 검토해 준 Jussi Vuorento와 이 기사의 내용을 검토해 준 Katriina Vakkila에게 감사 드린다. 이분들의 지원과 격려가 없었다면 이 기사는 완성될 수 없었을 것이다.
교육
- IBM solidDB 6.5 및 IBM solidDB Universal Cache 6.5 Information Center에서 solidDB에 관해 자세히 배우자.
- IBM DB2 Database for Linux, UNIX, and Windows Information Center에서 DB2에 관해 자세히 배우자.
제품 및 기술 얻기
-
자신에게 가장 적합한 방법으로 IBM 제품을 평가해 보자. 시험판 제품을 다운로드하거나 온라인으로 제품을 사용해 보거나 클라우드 환경에서 제품을 사용하거나
SOA Sandbox에서 SOA(Service Oriented Architecture)를 효과적으로 구현하는 방법을 배울 수 있다.
토론
- 포럼에 참여하기.
- My developerWorks 커뮤니티에 참여하자.
개발자가 운영하고 있는 블로그, 포럼, 그룹 및 위키를 살펴보면서 다른 developerWorks 사용자와 의견을 나눌 수 있다.
