본문 바로가기

DB/Tibero

[Tibero] Driver(ODBC, OLE DB, JDBC, ESQL)연결 가이드

ODBC, OLE DB, JDBC, ESQL와 같은 다양한 인터페이스를 통해 Tibero로 연결하기 위한 각 Driver 연동 방법을 소개한다.

 

제1장 ODBC 연결

본 장에서는 ODBC에 대한 개념과 Tibero ODBC의 설치 및 구성에 대해서 설명한다.

 

1.1. ODBC 개념

ODBC(Open DataBase Connectivity)는 모든 DBMS에 독립적인 데이터베이스 애플리케이션을 작성하기 위한 API의 집합으로 특정 DBMS 사용자가 ODBC 드라이버를 통해 다른 DBMS를 사용할 수 있게 한다. 따라서 DBMS에 연결하기 위해 ODBC 드라이버 관리자를 호출하여 사용하려는 드라이버를 호출하고 그 드라이버는 SQL을 사용하여 DBMS와 교신한다. 즉, ODBC는 사용자와 각 데이터베이스 엔진 사이를 연결해 사용자가 공통된 인터페이스로 각각의 다른 데이터베이스 엔진에 접근하게 하여 원하는 데이터를 참조할 수 있도록 한다.

● tbCLI

Tibero가 제공하는 Call Level Interface(CLI)로 사용자의 애플리케이션 프로그램과 Tibero간의 SQL 인 터페이스 역할을 수행한다. tbCLI는 ODBC 및 X/Open Call Level Interface Standard를 기초로 개발되 었으며 Tibero ODBC=tbCLI로 인식해도 무방하다.

 

1.2. Tibero ODBC 설치 및 구성

본 절에서는 ODBC의 설치 파일과 드라이버 등록 및 연결하는 방법에 대해서 설명한다. 기본적으로 32bit 클라이언트 OS 환경에서는 32bit ODBC 설치, 64bit 클라이언트 OS 환경에서는 64bit ODBC 설치 방법을 설명한다.

 

1.2.1. ODBC 설치 파일

클라이언트 인스톨러나 ODBC 인스톨러의 경우 GUI 환경에서 설치 및 등록을 자동으로 진행할 수 있다. 만약, 수동으로 진행하려면 Tibero 서버가 설치된 환경에서 설치하고자 하는 클라이언트 컴퓨터 환경에 맞게 설치 파일을 가져온다.

 

● UNIX 계열 서버

구분 바이너리 위치
Windows 32bit $TB_HOME/client/win32
Windows 64bit $TB_HOME/client/win64

● Windows 계열 서버

– 32bit 바이너리

Tibero 버전 구분 위치
Tibero 4 SP1 및 이전 버전 Windows 32bit %TB_HOME%\client\lib
Windows 64bit %TB_HOME%\client\win64
Tibero 5 이상 Windows 32bit %TB_HOME%\bin
Windows 64bit %TB_HOME%\client\win64

– 64bit 바이너리

Tibero 버전 구분 위치
Tibero 4 SP1 및 이전 버전 Windows 32bit %TB_HOME%\client\win32
Windows 64bit %TB_HOME%\client\lib
Tibero 5 이상 Windows 32bit %TB_HOME%\client\win32
Windows 64bit %TB_HOME%\bin

다음은 배포되는 바이러리 파일명이다. 해당 파일은 Tibero 5 기준이며 다른 버전의 경우 exe 파일명이 일부 다를 수 있다.

구분 바이너리 파일명
Windows 32bit libtbcli.dll, libtbcli.lib, tbodbc_driver_installer_5_32.exe
Windows 64bit libtbcli.dll, libtbcli.lib, tbodbc_driver_installer_5_64.exe

서버와 버전이 일치하는지 확인하기 위해 libtbcli.dll 파일에서 오른쪽 마우스 버튼을 클릭한 뒤

[속성] > [자세히]의 Product version을 확인한다.

1.2.2. ODBC 드라이버 등록

ODBC 드라이버 등록 순서는 다음과 같다.

 

1. Tibero ODBC의 bit 선택

Tibero ODBC의 32bit 또는 64bit 선택은 설치하는 클라이언트 OS 환경에 맞추기 보다는 Tibero ODBC 를 사용하는 실제 어플리케이션의 bit에 맞춘다.

 

2. 바이너리 복사 Tibero 버전에 따라 ODBC 바이너리를 복사하는 위치가 다르다. 버전에 맞게 ODBC 바이너리를 위치 한다.

● Tibero 4 SP1 및 이전 버전 %WINDIR%\system32(예 : c:\windows\system32)

● Tibero 5 이상 임의의 위치로 가능하다. 단, 드라이버를 등록할 경우 해당 경로로 지정이 필요하다. (예 : c:\tibero\odbc) 3. 드라이버 등록 command 창을 열어 ODBC 바이너리가 위치한 곳으로 이동한 후 명령어를 실행한다. 만약 Windows 7 이상일 경우 command 창을 관리자 권한으로 실행한다.

 

● 등록 방법

tbodbc_driver_installer_5_xx.exe -i <driver path>
항목 설명
<driver path> ODBC 바이너리 디렉터리이다.

● 등록 예

CD D:\tibero6\client\win32\bin 

tbodbc_driver_installer_6_32.exe -i D:\tibero6\client\win32\lib

4. 드라이버 등록 확인

[시작] > [제어판] > [관리도구] > [데이터 원본(ODBC)] > [드라이버]에서 Tibero 드라이버가 등록된 것 을 확인한다.

1.2.3. ODBC 연결

Tibero ODBC를 사용하는 애플리케이션에서 연결 문자열(Connection String)을 사용하는 방식과 ODBC 관리자에 DSN(Data Source Name)을 등록하는 방식에 대해서 설명한다.

 

연결 문자열을 사용하는 방식

버전에 따라서 일부 문자열이 다르다. ODBC 함수 중에서 SQLDriverConnect를 사용할 경우 아래와 같은 정보가 필요하다. 실제 사용할 때는 한줄로 입력하며 Tibero 5에서 DB 항목의 경우는 DB NAME에 해당하는 정보를 입력한다.

 

● Tibero 4 SP1

DRIVER={Tibero 4 ODBC Driver};SERVER=192.168.70.185;PORT=8629;UID=dbtech;PWD=dbtech;

● Tibero 5

DRIVER={Tibero 5 ODBC Driver};SERVER=192.168.70.185;PORT=8629;DB=t5;UID=dbtech;PWD=dbtech;

예시

DRIVER={Tibero 6 ODBC Driver};SERVER=localhost;PORT=8629;DB=tibero;UID=TEST01;PWD=tibero;

DSN을 등록하는 방식

ODBC 함수 중에서 SQLConnect를 사용할 때 DSN 정보가 필요하므로 [제어판] > [관리도구] > [데이터 원본(ODBC)] > [시스템 DSN]에 데이터소스를 추가한다.

[그림 1.4] ODBC 데이스소스 추가

접속방법은 IP, PORT 방식 또는 SID 방식이 있다.

● IP, PORT 방식을 이용한 접속 Tibero 클라이언트 또는 서버의 설치 없이 ODBC Driver를 등록한 이후에 바로 사용할 수 있다.

● SID 방식을 이용한 접속 Tibero 클라이언트 또는 서버가 설치된 경우 사용할 수 있으며 클라이언트 설정 파일인 tbdsn.tbr 파일 (Tibero 4 이전 버전의 경우 tbnet_alias.tbr 파일)에 SID 이름이 등록되어 있어야 한다.

 

DSN 등록 후 [Test] 버튼을 클릭하여 정상적으로 접속이 되는지 확인한다. 만약 실패할 경우 Tibero 서버 의 기동, 방화벽 차단, 접속 정보 등을 확인한다.

 

 

접속 테스트 성공후 윈도우 파워쉘에서 테스트 예제를 돌려보자

$connectstring = "DSN=tibero;Uid=TEST01;Pwd=tibero;"
$sql = "select * from emp"
$conn = New-Object System.Data.Odbc.OdbcConnection($connectstring)
$conn.open()
$cmd = New-Object System.Data.Odbc.OdbcCommand($sql,$conn)
$ds = New-Object System.Data.DataSet
(New-Object System.Data.odbc.odbcDataAdapter($cmd)).fill($ds) | out-null
$conn.close()
$ds.Tables[0]

 

## OS가 64비트이면 64비트로,  32비트면 32비트로 설치해주자.... 만약 설치가 안된다면... 설치 드라이버를 다시 다운받아서 해보자.....  64비트 설치 드라이버가 작동이 안되서 32비트로 했다가 시간 엄청 잡아먹었다.... (TEST는 작동하는데 실행 예제시 안됨)##

64비트 설치 드라이버를 다른곳에서 다운로드후..... 64비트로 잡아주니 정상작동

 

1.3. ODBC Manager 설치

본 절에서는 UNIX 계열(Linux 포함)에서 iodbc 설치 및 연동하는 과정을 설명한다. UNIX 계열의 경우 ODBC Manager가 존재하지 않으므로 iodbc 또는 UNIX ODBC를 별도로 설치해야 한다.

 

다음은 ODBC Manager 설치 과정에 대한 설명이다.

1. Driver Manager 설치

2. profile 설정

3. ODBC 환경 파일 설정 및 확인

 

각 과정에 대한 상세한 설명은 해당 절의 내용을 참고한다.

 

Driver Manager 설치

다음은 Driver Manager를 설치하는 과정에 대한 설명이다.

1. 다운로드

http://iodbc.org/

 

iODBC Driver Manager: iODBC.org

This HTML5 document contains 8 embedded RDF statements represented using HTML+Microdata notation. The embedded RDF content will be recognized by any processor of HTML5 Microdata. Prefix Namespace IRI schema http://schema.org/ n2 http://www.iodbc.org/datasp

www.iodbc.org

에서 설치 파일 다운로드 후 설치를 원하는 서버에 업로드한다.

 

다음은 libiodbc-3.52.7.tar.gz 파일을 다운받아 서버에 설치한 결과이다. 만약, tar 옵션의 xvzf가 적용되 지 않을 경우 먼저 gunzip으로 압축을 해제한 후 tar -xvf 옵션으로 해제한다.

2. iodbc 설치

tar.gz 파일을 가지고 설치를 진행할 경우 아래와 같은 순서를 따른다.

 

설치 전 사전환경 점검에서 prefix를 설정하지 않으면 기본적으로 /usr/local 아래에 설치되기 때문에 특정 디렉터리를 지정하여 설치하고, 컴파일 및 설치 작업을 다시 수행할 경우 make clean 이후에 진행 한다.

 

a. '$HOME/iodbc' 디렉터리에 설치 전 사전환경 점검을 한다.

./configure --prefix=/tibero_odbc/libiodbc-3.52.12 --disable-gui --sysconfdir=/etc CC=/usr/bin/gcc CFLAGS="-m64"

b. 점검한 결과 문제가 없으면 컴파일한다.

make

c. 컴파일된 파일을 설치한다.

sudo make install

만약, ODBC Manager가 64bit로 설치됐다면 내부적으로 사용하는 Tibero ODBC 역시 64bit여야 하며 재설치가 필요할 경우 make clean 이후에 진행한다.

 

profile 설정

profile 내에 아래와 같은 내용을 추가한다. IODBC_HOME의 경우 iodbc를 설치한 위치로 설정한다.

# iodbc setting
export IODBC_HOME=/usr/local
export LD_LIBRARY_PATH=$IODBC_HOME/lib:$LD_LIBRARY_PATH
export PATH=$IODBC_HOME/bin:$PATH

주의

OS에 맞게 환경변수 LD_LIBRARY_PATH(Linux), LIBPATH(AIX), SHLIB_PATH(HP)를 설정한다.

 

ODBC 환경 파일 설정 및 확인

ODBC Driver Manager의 환경 파일에 Tibero ODBC Driver를 등록하는 방법이다. 연결 테스트 전에 Tibero 클라이언트 또는 서버의 설치 및 관련 환경설정이 되어야 한다.

 

1. 환경 파일 위치 및 이름 설정

 /etc/odbc.ini(공통설정)로 설정 가능하다

 

● ODBC 환경 파일 설정 방법

vi /etc/odbc.ini

[ODBC Data Sources]
tibero6 = Tibero6 ODBC driver

[ODBC]
Trace = 1
TraceFile = /usr/local/libiodbc-3.52.12/tmp/odbc.trace

[tibero6]
Driver = /tibero_engine/tibero6/client/lib/libtbodbc.so
Description = Tibero6 ODBC Datasource
SID = tibero1
User = TEST01
Password = tibero

 

vi /etc/odbcinst.ini

;
; odbcinst.ini
;
[Tibero 6 ODBC Driver]
Description = ODBC Driver for Tibero 6
Driver = /tibero_engine/tibero6/client/lib/libtbodbc.so
UsageCount = 1

 

 

2. 연결 테스트

$IODBC_HOME/bin 폴더에 있는 iodbctest를 이용하여 연결 테스트를 수행한다.

테스트에 문제가 발 생하는 경우 ODBC 환경 파일 이름 및 위치와 설정을 확인한다.

 

odbc드라이버와 odbc데이터소스를 iodbc관리자에 등록

iodbc-config --odbcini --odbcinstini

다음은 iodbctest를 이용한 연결 테스트 설정 방법이다.

iodbctest "DSN=<dsn>;UID=<user>;PWD=<pwd>"
항목 설명
DSN ODBC 환경 파일에서 설정한 ODBC Datasources 이름이다.
UID, PWD 테스트 할 접속 계정 및 패스워드이다.

다음은 iodbctest를 이용한 연결 테스트 실행 예이다.

iodbctest "DSN=tibero6;UID=TEST01;PWD=tibero"

제2장 OLE DB 연결

 

본 장에서는 OLE DB에 대한 개념과 기능, Tibero OLE DB Provider 설치 및 구성에 대해서 설명한다.

 

2.1. OLE DB 개념

ODBC는 응용 프로그램이 데이터베이스를 일정한 방식으로 액세스하는 방법을 제공하였다. 언어, 테이블 구조, 내부 정보 등에 관계없이 데이터베이스를 액세스하는 공통의 추상적인 API를 제공했지만 IT기술이 발전함에 따라 새로운 방식으로 DB기반 응용 프로그램을 설계하고 구축하는 상황에 ODBC는 부적합하 게 되어 OLE DB라는 새로운 개방형 DB 연결방식이 생겨났다. OLE DB는 Microsoft UDA(Universal Data Access)의 개념을 구체화한 프로그래밍 인터페이스 모델이다. UDA는 단일 COM 기반 프로그래밍 인터페이스를 사용하여 관계형, 비관계형, 계층형 등과 같은 모든 유형의 데이터를 액세스할 수 있는 기능을 제공한다. Tibero OLE DB Provider는 현재 Windows 운영체제만을 지원한다. Tibero OLE DB Provider는 ADO 또는 OLE DB 기반 애플리케이션이 Tibero 데이터베이스에 접근하는 환경의 성능 및 안정성을 보장한다. Tibero OLE DB Provider가 최신 OLE DB 및 ADO 스펙과 호환하므로 ADO, OLE DB 개발자는 Tibero 환경으로의 애플리케이션 마이그레이션 작업을 쉽고 간단하게 수행할 수 있다. 또 Tibero OLE DB Provider는 PSM 저장 프로시저, LOB 등 Tibero 환경이 제공하는 기능을 활용하는 것을 가능하게 하며 Microsoft OLE DB .NET data provider를 통해 .NET 환경을 완벽하게 지원한다. OLE DB .NET을 사용하는 경우 모든 종류의 .NET 프로그래밍 언어를 사용하여 Tibero 데이터베이스에 접근할 수 있다.

 

2.1.1. OLE DB의 역할

기본적으로 분산되어 있는 데이터들에 대한 통합된 view를 제공하는 역할을 한다. 아래 그램처럼 UDA 기술은 ADO와 OLEDB를 사용하여 SQL 데이터 뿐만 아니라 비 SQL적인 데이터(메일, 텍스트, 디렉터리 서비스 등)에도 접근 가능하고 OLE DB가 기존의 ODBC를 이용한 데이터 연결도 사 용할 수 있게 되어있다. OLE DB를 통한 접근은 기존의 ODBC가 부족했던 점을 보완하여 접근 속도 또한 많은 향상을 가져왔다.

 

2.1.2. OLE DB 내부 구조

OLE DB 내부 구조 및 각 항목에 해당하는 설명은 아래와 같다.

● Data Source

OLE DB provider 초기화 및 환경구축을 하고 접속 정보를 받아 한 개 이상의 연결(Session)을 생성한다.

● Session

하나의 연결 단위로 일반적으로 한 개 이상의 명령문(Command)을 생성하고, 직접적으로 한 개 이상의 결과 테이블(Rowset)을 생성한다.

● Command SQL

문장 실행의 단위로 SELECT 문일 경우 한 개 이상의 Rowset을 생성한다.

● Rowset

쿼리에 의해 서버로부터 가져온 데이터들의 집합으로 순방향, 역방향, 특정위치 row 접근을 지원한다.

2.1.3. OLE DB 기능

OLE DB의 몇가지 특징적인 기능들에 대해서 살펴본다.

 

Updatable Cursor

쿼리의 결과 테이블의 데이터를 직접 수정하여 서버에 반영시키는 기능이다. 기본적으로 rowid를 추가로 쿼리에 첨부하여 보내고 rowid를 붙일 수 없는 쿼리는 Updatable Cursor가 될 수 없다. 추가, 삭제, 수정 모두 내부적으로 rowid를 이용한 DML로 작성되어 서버로 보내진다.

 

Updatable Cursor의 기능들은 다음과 같다.

– 새로운 Row 추가 : 추가된 row는 결과 테이블에 저장되지 않는다.

– 기존 Row를 삭제 : 삭제된 row는 삭제 되었다고 표시만 해놓는다.

– 기존 Row의 데이터를 수정 : 수정된 데이터는 바로 조회가 가능하다.

 

다음은 Updatable Cursor의 사용 예제(PHP)이다.

$conn = new COM("ADODB.Connection");
$conn->Open("Provider=tbprov.Tbprov.5; Data Source=t5; User ID=dbtecj; Password=dbtech;Updatable Cursor=True;“);
$rs = new COM("ADODB.Recordset");
$rs->CursorLocation = adUseServer;
$rs->Open("for_member", $conn, adOpenKeyset, adLockPessimistic, adCmdTable);
$rs->MoveNext();
$rs->Fields("EMAIL")->value = "test@tibero.com";
$rs->Fields("PASSWORD")->value = "tmax123";
$rs->Fields("NAME")->value = “TESTUSER”;
$rs->Update();
$rs->Close();

 

Schema Rowset

DB의 스키마 정보(테이블, 프로시저 등)를 테이블 형태로 알려주는 기능으로 대부분 내부적으로 DB의 static view를 조회하여 해당 정보들을 추출한다. DB접근이 필요없는 경우 OLE DB단에서 해당 스키마 정보를 저장하고 있다가 추출하고 Power Builder, Report Designer 등의 툴로 Schema Rowset을 통하여 각종 테이블, 뷰, 인덱스 등의 정보를 가져와 활용한다. Schema Rowset이 지원하는 항목들은 다음과 같다.

 

– TABLES

– VIEWS

– COLUMNS

– INDEXES

– PRIMARY_KEYS

– PROCEDURES

– PROCEDURE_PARAMETERS

– PROVIDER_TYPES

– CATALOGS(빈 결과물 리턴)

지원되지 않지만 필요한 Schema 종류일 경우 요청에 의해 지속적으로 추가한다.

 

다음은 Schema Rowset의 사용 예제(PHP)이다.

$conn = new COM("ADODB.Connection");
$conn->Open(“Provider=tbprov.Tbprov.5; …”);
$arr[0] = "";
$arr[1] = "dbtech";
$arr[2] = "EMP";
$rs = new COM("ADODB.Recordset");
$rs->CursorLocation = adUseClient;
$rs = $conn->OpenSchema(adSchemaPrimaryKeys, $arr);

Connection Pooling

동일한 계정으로 반복 연결을 할 경우 기존의 연결을 닫지 않고 저장해 두었다가 재사용하는 기능이다. 연결하는 데 드는 시간을 절약하는 효과가 있다.

 

Connection Pooling의 설정 방법은 다음과 같다.

● 연결 문자열에 OLE DB Services 항목을 추가한다.

– OLE DB Services=-1 : 풀링을 사용한다.

– OLE DB Services=-2 : 풀링을 사용하지 않는다.

● PHP의 경우 무조건 사용하도록 설정된다.

 

2.2. Tibero OLE DB Provider 설치 및 구성

Tibero OLE DB의 경우 내부적으로 Tibero ODBC를 사용하므로 OLE DB를 설치한다면 앞장의 ODBC 내용을 참조하여 미리 설치를 한다. 만약 32bit OLE DB를 사용한다면 32bit ODBC를 설치하고 64bit OLE DB를 사용한다면 64bit ODBC를 설치한다. 본 절에서는 OLE DB의 설치 파일과 OLE DB Provider 등록 및 연결하는 방법에 대해서 설명한다. 기본적 으로 32bit 클라이언트 OS 환경에서는 32bit OLE DB 설치, 64bit 클라이언트 OS 환경에서는 64bit OLE DB 설치 방법을 설명한다.

 

2.2.1. OLE DB 설치 파일

클라이언트 인스톨러나 OLEDB 인스톨러의 경우 GUI 환경으로 설치 및 등록을 자동으로 진행할 수 있다. 만약 수동으로 진행하려면 Tibero 서버가 설치된 환경에서 설치하고자 하는 클라이언트에 맞게 설치 파일 을 가져온다.

 

다음은 바이너리 파일에 대한 설명이다.

파일명 설명
tbprov5.dll OraOLEDB의 데이터 타입 spec을 맞춘 바이너리로 Provider를 등록할 때 사용한다.
msdtb5.dll MSDAORA의 데이터 타입 spec을 맞춘 바이너리로 Provider를 등록할 때 사용한다
Tibero.DbAccess.dll .Net 환경에서의 지원을 위해 추가된 바이너리로 .NET을 연동할 때 사용한다.
EntLibContrib.Da ta.Tibero.dll MS Enterprise Library 지원을 위해 추가된 바이너리로 MS Enterprise Library 를 연동할 때 사용한다.

참고

1. Tibero 5 r67771 이전 버전의 경우 tbprov.dll, msdtb.dll 파일을 사용한다.

2. 확장자가 pdb(Program Database)인 경우는 디버깅 작업을 위해서 사용하는 파일이다. 릴리즈 버전에 따라 포함되어 있지 않는 경우도 있다.

 

2.2.2. OLE DB Provider 등록

OLE DB Provider 등록 순서는 다음과 같다.

 

1. 바이너리 복사

Tibero 버전에 따라 OLE DB 바이너리를 복사하는 위치가 다르다. 버전에 맞게 OLE DB 바이너리를 위치한다.

● Tibero 4 SP1 및 이전 버전 %WINDIR%\system32(예 : c:\windows\system32)

● Tibero 5 이상 임의의 위치로 가능하다. 단, 미리 설치된 ODBC 바이너리가 있는 디렉터리에 위치해야 한다.

 

2. Provider 등록 및 해제

● 등록

command 창을 열어 OLE DB 바이너리를 위치한 곳으로 이동한 후 명령어를 실행한다. 만약 Windows 7 이상일 경우 command 창을 관리자 권한으로 실행한다.

– 등록 방법

regsvr32 <dllname>
항목 설명
<dllname> 등록할 dll 파일명을 입력한다.

– Tibero 4 SP1 또는 Tibero 5 r67770 이전
• tbprov.dll : OraOLEDB의 데이터 타입 spec
• msdtb.dll : MSDAORA의 데이터 타입 spec

– Tibero 5 r67770 이후
• tbprov5.dll : OraOLEDB의 데이터 타입 spec
• msdtb5.dll : MSDAORA의 데이터 타입 spec

등록을 하면 아래와 같은 팝업창이 나타난다.

● 해제

Provider 해제가 필요한 경우 아래와 같이 수행한다. 만약 Windows 7 이상일 경우 command 창을 관 리자 권한으로 실행한다.

– 해제 방법

regsvr32 /u <dllname>
항목 설명
<dllname> 기존에 이미 등록이 된 dll 파일 중에서 해제할 dll 파일명을 입력한다.

– Tibero 4 SP1 또는 Tibero 5 r67770 이전
• tbprov.dll : OraOLEDB의 데이터 타입 spec
• msdtb.dll : MSDAORA의 데이터 타입 spec

– Tibero 5 r67770 이후
• tbprov5.dll : OraOLEDB의 데이터 타입 spec
• msdtb5.dll : MSDAORA의 데이터 타입 spec

– 해제 예

D:\tibero6\client\win64\lib>regsvr32 /u tbprov6.dll
D:\tibero6\client\win64\lib>regsvr32 /u msdtb6.dll

3. Provider 등록 확인

바탕화면에 tibero.udl 파일을 새로 생성한다.

생성한 tibero.udl 파일을 더블클릭한 후 [Provider] 탭을 선택하면 Tibero OLE DB Provider를 확인할 수 있다.

[그림 2.5] OLE DB 등록 확인

2.2.3. OLE DB 연결

Tibero OLE DB를 사용하는 애플리케이션에서 연결 문자열(Connection String)을 사용하는 방식과 Provider 테스트 방식에 대해서 설명한다.

 

연결 문자열을 사용하는 방식 
● 사용 방법

Provider=<공급자 이름>;Data Source=<데이터 원본 이름>;User ID=<접속 사용자 ID>;
Password=<접속 패스워드>;Updatable Cursor=<Updateable Cursor 사용여부>;
OLE DB Services=<Connection Pooling 사용여부>
항목 설명
<공급자 이름> Tibero 버전 및 리비전에 따라 공급자 이름이 조금씩 다르다.

– Tibero 4 SP1 또는 Tibero 5 r67770 이전
• tbprov.Tbprov 또는 tbprov.Tbprov.1 : OraOLEDB의 데이터 타입 spec
• tbprov.MSDTB 또는 tbprov.MSDTB.1 : MSDAORA의 데이터 타입 spec

– Tibero 5 r67770 이후(Tibero 4, Tibero 5 용 OLE DB를 같은 클라이언트에 서 동시에 사용하기 위해서는 해당 리비전 이후를 사용한다)
• tbprov.Tbprov 또는 tbprov.Tbprov.5 : OraOLEDB의 데이터 타입 spec
• tbprov.MSDTB 또는 tbprov.MSDTB.5 : MSDAORA의 데이터 타입 spec
<데이터 원본 이름> 데이터 원본 이름에는 아래와 같은 항목이 있다. 단, Tibero 버전에 따라 일부 다른 정보가 들어가기도 한다. 

– ODBC 데이터 원본 관리자에 등록된 이름
– IP, PORT(Tibero 4 SP1) 또는 IP, PORT, DBNAME(Tibero 5)
<접속 사용자 ID> Tibero 서버에 접속할 사용자 이름이다.
<접속 패스워드> Tibero 서버에 접속할 패스워드이다.
<Updateable Cursor 사용 여부> Updatable Cursor 사용여부를 설정한다. (기본값 : False) 
– True : 사용한다.
– False: 사용하지 않는다.
<Connection Pooling 사용 여부> Connection Pooling 기능 사용여부를 설정한다. (기본값 : -1)
– -1 : 사용한다.
– -2 : 사용하지 않는다.

● 사용 예

Provider=tbprov.Tbprov.5;Data Source=t5;User ID=dbtech;Password=dbtech;Updatable Cursor=True;OLE DB Services=-2

 

Provider 테스트 앞절에서 만든 tibero.udl 파일로 연결 테스트를 할 수 있으며 아래와 같이 2가지 방식으로 가능하다.

 

● IP, PORT 등의 정보를 이용한 직접 연결 방식

데이터 원본에 IP, PORT, DB NAME 순으로 설정하여 접속한다. (예 : 192.168.70.185,8629,t5)

만약 Tibero 4 SP1 및 이전 버전의 경우 DB NAME 정보없이 IP, PORT만으로 접속이 가능하다.

(예 : 192.168.70.185,8629)

 

[그림 2.6] OLE DB 직접 연결 방식

● ODBC 원본 관리자의 DSN 또는 tbdsn.tbr의 Alias를 이용한 방식

데이터 원본에 ODBC 원본 관리자의 DSN 또는 "$TB_HOME/client/config/tbdsn.tbr"의 Alias를 이용하여 Tibero에 접속이 가능하다. 해당 Alias 정보를 찾는 방법은 [ODBC 원본 관리자] > [tbdsn.tbr의 Alias] 순서대로 찾는다.

2.3. Tibero OLE DB 연동

OLE DB를 사용하는 인터페이스에 대하여 연동하는 방법을 설명한다.

해당 인터페이스를 사용하는 서버에 미리 Tibero OLE DB가 설치되어야 한다.

 

2.3.1. ADO(ActiveX Data Objects)

Microsoft사에서 개발한 데이터베이스 연동용 인터페이스로 ADO 컴포넌트를 사용해 데이터페이스에 접근 후 여러 작업을 할 수 있다.

– 데이터베이스에 접근하기 위한 COM 객체들의 모음이다.

– 사용자의 프로그래밍 언어와 OLE DB사이를 연결하는 계층이다.

– Windows 운영체제를 설치할 때 자동으로 설치된다.

– ASP, PHP, VB 등의 환경에서 사용 가능하다.

– 사용자가 복잡한 OLE DB API 대신 ADO의 단순화된 API로 용이하게 개발이 가능하다.

– 각종 Script 언어와 연동되어 있으므로 다양한 환경에서의 개발이 가능하다.

 

다음은 ADO에서 사용하는 주요 객체이다.

● Connection

데이터베이스를 연결할 때 사용하는 객체이다.

Set conn=Server.CreateObject(“ADODB.Connection”);

● Recordset

조회 쿼리를 보내 그 쿼리 결과를 받을 때 사용한다.

Set rs = Server.CreateObject(“ADODB.Recordset”) rs.open “select * from emp”,conn

● Command

이 객체만 데이터베이스 연결, 명령, 쿼리 실행 등이 가능하고 주로 프로시저 실행이나 매개변수가 포함 된 쿼리를 실행할 때 사용한다.

Set Cmd = Server.CreateObject("ADODB.Command") with Cmd .ActiveConnection =
objConn .CommandType = adCmdStoredProc
.CommandText = "ADD"
…
End with
Set Cmd = Nothing

● Transaction

트랜잭션을 처리할 때 사용 트랜잭션은 Connection객체의 .BeginTrans와 .CommitTrans 메소드 호출 사이에 존재한다.

myConnection.BeginTrans
While Not myRecordset.EOF
mcounter = mcounter + 1
myRecordset.Update
myRecordset.MoveNext
Wend

myConnection.CommitTrans
myRecordset.Close
myConnection.Close

● Property

ADO 객체의 동적인 속성을 가지고 있다.

set prop=Server.CreateObject("ADODB.Property")
for each prop in rs.Properties
response.write("Attr:" & prop.Attributes & "<br>")
response.write("Name:" & prop.Name & "<br>")
response.write("Value:" & prop.Value & "<br>")
next

● Field

ADO Field 객체는 Recordset 객체의 컬럼에 대한 정보를 가지고 있다.

set f=Server.CreateObject("ADODB.Field")

for each f in rs.Fields
response.write("Attr:" & f.Attributes & "<br>")
response.write("Name:" & f.Name & "<br>")
response.write("Value:" & f.Value & "<br>")
Next

● Parameter

Stored Procedure 또는 쿼리에서 사용되는 파라미터의 정보를 제공한다. (파라미터 타입 : input,output, input/output, return)

set comm=Server.CreateObject("ADODB.Command")
set para=Server.CreateObject("ADODB.Parameter")

para.Type=adVarChar
para.Size=20
para.Direction=adParamInput
para.Value=username

comm.Parameters.Append para

● Error

실행할 때 발생한 에러를 Errors collection에 저장한다.

for each objErr in objConn.Errors
response.write("<p>")
response.write("Description: ")
response.write(objErr.Description & "<br>")
response.write("Help context: ")
response.write(objErr.HelpContext & "<br>")
response.write("Help file: ")
response.write(objErr.HelpFile & "<br>")
response.write("Native error: ")
response.write(objErr.NativeError & "<br>")
response.write("Error number: ")
response.write(objErr.Number & "<br>")
response.write("Error source: ")
response.write(objErr.Source & "<br>")
response.write("SQL state: ")
response.write(objErr.SQLState & "<br>")
response.write("</p>")
next

Cursor Location

다음은 Cursor 서비스 위치를 가르키는 속성값이며 Connection 또는 Recordset 단위로 설정 가능하다.

속성값 설명
adUseNode OBSOLETE(하위 호환을 위해서만 존재한다)

Value 1
adUseServer 사용자가 row를 이동할 때마다 OLE DB로부터 조금씩 데이터를 가져오는 방식으 로 row를 일부만 가져올 경우(전체 메모리 사용량이 적음)에 유리하고 접속을 끊 은 후에는 데이터를 가져올 수 없다.

Updatable Cursor가 지원된다.

Value 2(기본값)
adUseClient OLE DB로부터 전체 데이터를 가져와 ADO단에서 저장해 두었다가 ADO 함수를 통하여 row를 이동할 때 바로 꺼내어 쓰는 방식으로 이미 필요한 데이터를 가져온 상태이므로 접속을 끊어도 데이터에 접근이 가능하다.

Updatable Cursor는 지원되지 않는다.

Value 3

사용 예제(ado_query.vbs)

다음은 ADO를 사용하는 VBScript 예제이다.

Dim conn, rs, sql
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=tbprov.Tbprov.6;Data Source=tibero;User ID=TEST01;Password=tibero;"
Set rs = CreateObject("ADODB.RecordSet")
sql = "select empno, ename, JOB, HIREDATE, SAL from TEST01.emp"
rs.Open sql, conn
While Not rs.EOF
wscript.echo "empno: "&rs(0)
wscript.echo "name: "&rs(1)
wscript.echo "job: "&rs(2)
wscript.echo "hiredate: "&rs(3)
wscript.echo "sal: "&rs(4)
RS.moveNext
Wend
rs.Close()
Set rs = Nothing
Set conn = Nothing

.vbs 파일에 해당 코드를 입력하고,  cmd 창에서  cscript 파일명.vbs 를 입력하면 따로 비주얼 스튜디오 설치없이 확인이 가능하다.

 

제3장 JDBC 연결

본 장에서는 JDBC에 대한 개념과 Tibero JDBC의 드라이버 연동에 대해서 설명한다.

 

3.1. JDBC 개념

Java Database Connectivity의 약자로서 Java로 만들어진 클래스와 인터페이스로 이루어진 API이다. DBMS의 종류와 관련없는 독립적인 프로그래밍을 가능하게 해주며 JDBC는 java.sql, javax.sql 두 개의 패키지에 포함된다.

– java.sql은 데이터베이스에 접근하고 데이터를 검색하거나 업데이트 하는 핵심 JDBC API를 제공한다.

– javax.sql은 JDBC 클라이언트가 서버측의 데이터소스를 접근할 수 있게 하는 API를 제공한다.

 

JDBC Driver Types

● Type 1 : JDBC-ODBC Bridge Driver

ODBC 같이 다른 Data Access API와 매핑하는 형태의 JDBC API를 구현한 것이다. 이것은 Native Client Library에 종속적으로 되는 경우가 많아 이식성에 제약이 있다. Sun의 JDBC-ODBC Bridge Driver가 이 에 속하지만 JDBC 3.0의 지원이나 멀티 쓰레딩을 사용할 수 없는 등의 여러가지 제약을 지닌다.

● Type 2 : Native-API

Driver Native Code와 Java Code가 혼합되어 구현이 되어있다. 주로 Interface만 Java인 경우가 많고 접근하는 데이터소스에 따라 각기 다른 Native Client Library가 필요하다. 그래서 이것을 Thick Driver 라고도 한다. Native Code로 인하여 이식성에 제한이 있다.

● Type 3 : Net-Protocol Driver

데이터베이스에 독립적인 프로토콜을 이용하는 미들웨어 서버와 통신하고 순수 자바 클라이언트를 사용하는 드라이버로 미들웨어 서버는 클라이언트의 요청을 데이터소스에 독립적인 프로토콜로 변환하여 사용한다. 이 경우 드라이버가 직접 데이터베이스를 제어하지 않고 미들웨어를 통하여 제어하기 때 문에 유연성을 지닌다.

● Type 4 : Native-Protocol Driver

모두 자바로 구현되어 있어 플랫폼에 제한을 받지 않으며 별도의 클라이언트 소프트웨어가 없이 표준 자바 소켓을 이용하여 데이터소스와 직접 통신한다. 보통 Thin Driver라고 한다.

3.2. Tibero JDBC 본 절에서는 JDBC 드라이버 설명과 연동하는 방법에 대해서 설명한다.

참고

Tibero에서는 현재 Type 4만 지원한다.

 

3.2.1. JDBC 드라이버

JDBC 드라이버는 "$TB_HOME/client/lib/jar" 경로에 존재한다.

다음은 드라이버 파일에 대한 설명이다.

● 파일명 규칙

tibero[DB_MAJOR_VERSION]-jdbc-[JDK_VERSION]-[DEBUG].jar
항목 설명
[DB_MAJOR_VERSION] Tibero 제품의 메인 버전를 표시한다.
[JDK_VERSION] JDBC 드라이버가 동작하는 JDK 버전을 표시한다. 기본형의 경우 생략한다.
[DEBUG] 문제가 발생할 때 로그를 발생하는 JDBC 파일(디버그 용도)인지 알려준다.

● 사용 예

파일명 설명
tibero5-jdbc.jar JDK(또는 JRE) 1.6 이상에서 수행 가능한 드라이버 파일(기본형)이다.
tibero5-jdbc-dbg.jar JDK(또는 JRE) 1.6 이상에서 수행 가능한 JDBC 파일(디버그 용도)이다.
tibero5-jdbc-14.jar JDK(또는 JRE) 1.4 이상에서 수행 가능한 드라이버 파일(JRE 버전 문제가 발생할 경우 주로 사용)이다.
tibero5-jdbc-14-dbg.jar JDK(또는 JRE) 1.4 이상에서 수행 가능한 JDBC 파일(디버그 용도)이다.

버전 확인

주로 JDBC 리비전 정보가 필요할 때 아래와 같은 방법으로 확인할 수 있다.

● 형식

java -jar [driver_name]
항목 설명
[driver_name] JDBC 드라이버 파일명이다.

● 사용 예

[TIBERO1]root@tibero1:/tibero_engine/tibero6/client/lib/jar>  java -jar tibero6-jdbc.jar

3.2.2. 드라이버 연동

Tibero JDBC를 가지고 서버와 연동할 때 연동할 때 다음의 클래스를 사용한다.

– Connection을 맺을 때 사용하는 클래스 이름 : com.tmax.tibero.jdbc.TbDriver

– 데이터소스를 사용할 때 클래스 이름 : com.tmax.tibero.jdbc.ext.TbConnectionPoolDataSource

– XA 데이터소스를 사용할 때 클래스 이름 : com.tmax.tibero.jdbc.ext.TbXADataSource

 

 

데이터베이스 URL

데이터베이스 URL은 Single 노드 구성과 TAC 노드 구성으로 나누어 설명한다.

● Single 노드 구성 1개의 Tibero 서버로 구성된 경우이다.

– 사용 방법

jdbc:tibero:thin:@<ip>:<port>:<db_name>
항목 설명
<ip> 접속하려는 Tibero 서버 IP 주소이다.
<port> 접속하려는 Tibero 서버 포트 번호이다.
<db_name> 접속하려는 Tibero 서버 DB 이름이다.

– 사용 예

jdbc:tibero:thin:@127.0.0.1:8629:t5

● TAC 노드 구성

2개로 구성된 TAC 서버일 경우이다.

– 사용 방법

jdbc:tibero:thin:@(description=
          (failover=on)(load_balance=on)
          (address_list=(address=(host=<node1_ip>)(port=<node1_port>))
                        (address=(host=<node2_ip>)(port=<node2_port>))
          )(DATABASE_NAME=<db_name>))
항목 설명
failover 연결이 끊어진 경우 자동으로 복구해주는 기능(on 또는 off 설정)으로 순차적 방식 으로 새로운 서버에 접속하며 현재는 데이터베이스와의 연결만 복구한다.
load_balance 사용자 Connection을 여러 서버로 분산시키는 기능(on 또는 off 설정)으로 Dedicate 방식(=전용방식)으로 구성할 경우 해당 기능을 off 한다.
<node1_ip>
<node1_port>
1번 노드에 대한 접속 정보이다. (IP 주소, 포트 번호)
<node2_ip>
<node2_port>
2번 노드에 대한 접속 정보이다. (IP 주소, 포트 번호)
<db_name> 접속하려는 TAC의 DB 이름이다.

– 사용 예

jdbc:tibero:thin:@(description=
          (failover=on)(load_balance=on)
          (address_list=(address=(host=127.0.0.1)(port=8629))
                        (address=(host=127.0.0.2)(port=8629))
          )(DATABASE_NAME=t5))

JAVA 소스 예제

package Tibero_Test_Package;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Tibero_Test_JDBC{
	private String ip = "localhost";
    private int port = 8629;
    private String database = "tibero";
    private String user = "TEST01";
    private String password = "tibero";

    private final String DRIVER_NAME = "com.tmax.tibero.jdbc.TbDriver";
    private final String TIBERO_JDBC_URL = "jdbc:tibero:thin:@" + ip + ":" + port + ":" + database;

    private Connection conn = null;

    private void connect() {
        try {
        Class.forName(DRIVER_NAME);
            conn = DriverManager.getConnection(TIBERO_JDBC_URL, user, password);
        } catch(ClassNotFoundException e) {
            System.err.println(e);
        } catch(SQLException e) {
            System.err.println(e);
        }
    }

    private void executeQuery() {
        String sql = "select EMPNO, ENAME, JOB, HIREDATE, SAL from TEST01.emp";
        try {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            
            while(rs.next()) {
                System.out.println("empno: "+rs.getString(1)+", ename: "+rs.getString(2)+", job: "+rs.getString(3)+", hiredate "+rs.getString(4)+", sal: "+rs.getString(5));
                
            }
        } catch(SQLException e) {
            System.err.println(e);
        }
    }
    
    private void disconnect() {
        if(conn != null) {
            try {
                conn.close();
            } catch(SQLException e) {
                System.err.println(e);
            }
        }
    }
    
	public static void main(String[] args) {
		Tibero_Test_JDBC tibero = new Tibero_Test_JDBC();

        tibero.connect();
        tibero.executeQuery();
        tibero.disconnect();
	}
}

이클립스에서 프로젝트 생성시 프로젝트 레이아웃을 아래와같이 체크아웃 해줘야지 import java.sql.*  클래스에서 에러가 안뜬다.

프로젝트 생성후 프로젝트 속성창에서 라이브러리에 Add External Jars... 에 티베로 jdbc를 추가해줘야한다.

티베로 jdbc 파일은 티베로 설치경로 -> client -> lib -> jar 에 있다.

JAVA 소스 결과

제4장 tbESQL 연결

 

본 장에서는 tbESQL에 대한 개념과 사용 방법에 대해서 설명한다.

 

4.1. tbESQL 개념

ESQL(Embedded SQL : 내장 SQL)은 프로그래밍 언어의 연산 능력과 SQL의 데이터베이스(Database)를 조작하는 능력을 결합하기 위한 방법이며 ANSI 및 ISO 표준으로 정의되어 있다.

tbESQL은 ESQL의 사용을 위해 Tibero가 제공하는 인터페이스이며 C와 COBOL을 제공한다.

 

4.1.1. tbESQL 기본동작

tbESQL에서는 프리컴파일, 컴파일 및 링크 과정을 거친다. 처리가 완료된 실행 파일을 가지고 실행하게 되면 Tibero 서버에 접속하게 되는 것이다. 참고로 tbESQL은 내부적으로 tbCLI(=ODBC) 인터페이스를 사용한다. 따라서 tbCLI(=ODBC) 관련 환경 변수가 모두 적용 가능하다.

다음은 tbESQL의 기본동작을 나타내는 그림이다.

 

 

시험삼아 간단한 tbc 코딩을 해보자

$ vi test1.tbc
#include <stdio.h>

int main(void)
{
    printf("hello world!\n");

    return 1;
}
$ tbpc test1.tbc

해당 에러가 발생하였다.....  원인을 찾는데 하루종일 걸렸다....

 

이유는 vi $TB_HOME/client/config/tbpc.cfg 경로에 있는 버전이 틀려서였다....

gcc -v 명령어를 입력하고 나오는 버전으로 수정해주면 해결완료!!

다시 컴파일하면 정상 처리된다.

소스 예제

#include <stdio.h>
#include <string.h>

int main(void)
{
    char *conn_str = "TEST01/tibero";
    VARCHAR empno[30][30], ename[30][30], job[30][30], hiredate[30][30], sal[30][30];
	int i=0;


    EXEC SQL CONNECT :conn_str;

    if (sqlca.sqlcode == 0)
        printf("Connected.\n");
    else
        return -1;

    EXEC SQL SELECT EMPNO, ENAME, JOB, HIREDATE, SAL INTO :empno, :ename, :job, :hiredate, :sal FROM TEST01.EMP;
	
	
	for (i=0; i < sqlca.sqlerrd[2]; i ++)
	{
		printf("EMPNO: %s ENAME: %s JOB: %s HIREDATE: %s SAL: %s\n", empno[i].arr,ename[i].arr,job[i].arr,hiredate[i].arr,sal[i].arr);		
	}
	
    printf("number of returned rows = %d\n", sqlca.sqlerrd[2]);

    return 0;
}

실행 결과

'DB > Tibero' 카테고리의 다른 글

[Tibero] Log 확인하기  (0) 2023.03.09
[Tibero] External Procedure(JEPA, EPA) 안내서  (0) 2023.03.02
[Tibero] PHP, ODBC 연동 가이드  (0) 2023.02.16
[Tibero] RawDevice + TAC 설치 하는법  (1) 2023.02.02
[Tibero] tbexport & tbimport  (1) 2023.02.01