IBM의 중형 컴퓨터 AS/400 (iSeries, System i)은 역시 IBM의 메인프레임(zSeries, System z)과 마찬가지로 매우 폐쇄적인 시스템으로, OS 자체적으로 데이터베이스 서버도 내장하고 있는 것이 한 특징입니다. AS/400의 OS 자체가 데이터베이스와 완전히 통합되어 있는 구조인데요.
AS/400의 데이터베이스를 ‘DB2’라고 부르기는 하지만 유닉스나 윈도우, 리눅스 등 오픈 시스템(LUW)에서 사용하는 ‘일반 DB2’와는 완전히 다른 별개의 데이터베이스입니다. 내부 구조와 설정, 사용법도 다를 뿐만 아니라 심지어 SQL 문법조차 크게 다르니, IBM이 브랜드만 억지로 ‘DB2’라고 통합시켜놨을 뿐 실제로는 전혀 별개의 데이터베이스 제품입니다.
따라서 AS/400 DB2에 연결하기 위해서는 일반적인 DB2 연결 방법으로는 연결이 안됩니다. 델파이/C++빌더에서도, 기존의 BDE나 dbExpress는 물론 최신의 FireDAC에서도 네이티브 연결이 불가능했으며, 대신 ODBC 브리지 연결을 하는 것이 일반적이었습니다. 이에 대해서는 몇년 전에도 한번 포스트로 썼던 적이 있습니다. AS/400과 델파이/C++빌더 (2)
그런데 최근 소리소문 없이 FireDAC에서 AS/400 네이티브 연결을 지원하기 시작했습니다. 10.1 Berlin 버전의 DB/2 연결 관련 문서에 AS/400 연결 방법을 살짝 추가해놨는데요. 그런데, 혹시나 해서 테스트 해보니 10 Seattle 버전에서도 동일한 방법으로 연결이 가능했습니다. (Seattle 버전의 문서에는 해당 내용이 없습니다)
Connect to IBM DB2 Server (FireDAC)
DB2 AS400
FireDAC에서 DB2 AS400에 연결하기 위해서는 “iSERIES ACCESS ODBC DRIVER” 드라이버가 필요합니다.DB2 AS400에 연결하기 위해서는 다음의 절차를 따르십시오.
-
폼에 TFDConnection 및 TFDPhysDB2DriverLink 컴포넌트를 추가하십시오.
-
TFDPhysDB2DriverLink.ODBCDriver 속성을 ‘iSeries Access ODBC Driver’로 설정하십시오.
-
TFDConnection을 더블클릭하고 DriverID를 DB2로 설정하십시오.
-
Wizard 버튼을 누르십시오.
-
ODBC 드라이버 다이얼로그를 이용하여 연결 파라미터를 채워넣으십시오.
-
OK 버튼을 눌러 파라미터들을 저장합니다.
ODBC 드라이버가 필요하다고 되어 있어서 혼란스러울 수도 있는데, ODBC 드라이버의 설치는 필요하지만 통상 ODBC 연결에 필수적인 요소인 DSN 설정이 필요하지 않으며, 순수하게 애플리케이션 측에서 TFDConnection 컴포넌트의 설정만으로 연결됩니다. 그러니까 ODBC 드라이버를 네이티브 드라이버의 용도로 사용하는 것입니다.
네이티브 드라이버 대신 ODBC 드라이버를 이용하는 것은 아마도, AS/400 DB2의 전용 네이티브 드라이버가 매우 고가의 별매 옵션이어서일 겁니다. AS/400의 네이티브 드라이버는 IBM의 별매 옵션인 DB2 Connect의 일부로서만 구할 수 있습니다. 이에 대해서도 위의 제 이전 포스트에서 언급한 적이 있습니다.
어쨌든, 위의 절차대로 설정하고 나면 FDConnection과 FDPhysDB2DriverLink 컴포넌트의 속성들은 다음과 같이 됩니다. 위의 절차대로 잘 안되시는 분들은 아래 컴포넌트 코드를 텍스트 복사해서 폼에 그대로 붙여놓고 유저네임/패스워드/서버주소만 수정하면 됩니다.
1 2 3 4 5 6 7 8 9 10 |
object FDConnection1: TFDConnection Params.Strings = ( 'User_Name=xxxx' 'Password=xxxx' 'ODBCAdvanced=SYSTEM=xxx.xxx.xxx.xxx' 'DriverID=DB2') LoginPrompt = False Left = 32 Top = 24 end |
1 2 3 4 5 |
object FDPhysDB2DriverLink1: TFDPhysDB2DriverLink ODBCDriver = 'iSeries Access ODBC Driver' Left = 121 Top = 24 end |
AS/400을 사용하는 업체는 많이 적어졌습니다만, 그런만큼 AS/400 관련 정보를 찾는 것도 어렵습니다. 도움이 될 개발자분들은 적겠지만 당사자에게는 큰 도움이 될 거 같아 포스트로 작성해봤습니다.
[덧붙임 2016. 7. 7.]
Seattle 버전에서 AS/400 지원 중 일부 기능이 제대로 동작하지 않는 것을 발견했습니다. 파라미터가 있는 Insert/Update 등의 SQL문을 실행하면 “Driver not capable” 에러가 발생하고 SQL이 실행되지 않습니다. (파라미터가 없는 텍스트만의 SQL문은 아무 문제 없이 실행이 됩니다)
이 문제는 Berlin 버전에서는 해결되었습니다. 결국엔, Berlin 버전부터 AS/400을 정식으로 지원하는 게 맞았네요.