(ODBC, OLEDB, JDBC) 본문서에서는 ODBC, OLEDB, JDBC 와같은다양한인터페이스를통해 Tibero RDBMS 로연결하기위한각 Driver 연동방법을소개한다
Contents 1. ODBC 연결가이드... 2 1.1. ODBC 란... 2 1.2. TIBERO ODBC DRIVER 연동... 3 1.2.1. Tibero ODBC Driver 확인... 3 1.2.2. Tibero ODBC Driver 등록... 3 1.2.3. ODBC 연결... 4 1.2.4. [ 참고 ] ODBC를이용한 Tibero연동예제 (DSN이용)... 6 2. OLEDB 연결가이드... 8 2.1. OLEDB 란... 8 2.2. TIBERO OLE DB PROVIDER 연동... 10 2.2.1. Tibero OLE DB Driver 확인... 10 2.2.2. Tibero OLE DB Driver 등록... 10 2.2.3. Tibero OLE DB 연결... 11 2.2.4. [ 참고 ] OLEDB를이용한 Tibero연동예제... 18 3. JDBC 연결가이드... 19 3.1. JDBC란?... 19 3.2. TIBERO JDBC DRIVER 연동... 20 3.2.1. Tibero JDBC Driver 위치... 20 3.2.2. Tibero JDBC Driver Connection String... 20 3.2.3. 어플리케이션에서 LOB 타입사용소스변홖... 21 3.2.4. [ 참고 ] JDBC를이용한 Tibero연동예제... 22 Update History Date Worker Comments 2011.03.11 박근용 문서서식업데이트 2010.12.06 이규철 내용보완 2009.10.00 정영섭 문서서식업데이트및내용보완 2009.08.14 백서현 문서취합및내용보완 2007.08.14 김짂수 최초작성 1
1. ODBC 연결가이드 1.1. ODBC 란 ODBC는 Open DataBase Connectivity의약자이며모든 DBMS에독립적인데이터베이스애플리케이션을작성하기위한 API(Application Programming Interface) 의집합으로, 특정한 DBMS를사용하는사람이 ODBC 드라이버를통하여다른 DBMS를사용할수있게한다. 따라서 DBMS에연결하기위해단지 ODBC 드라이버관리자 (ODBC Driver Manager) 를호출하여사용하려는드라이버를호출하기만하면된다. 그러면그드라이버는 SQL(Structured Query Language) 을사용하여 DBMS와교싞하게된다. 즉, ODBC는사용자와각데이터베이스엔짂사이를연결해주어사용자가공통된인터페이스로각각의다른데이터베이스엔짂에접근하게하여원하는데이터를참조할수있도록한다. [ 그림 1. ODBC Driver] 2
1.2. Tibero ODBC Driver 연동 1.2.1. Tibero ODBC Driver 확인 Window 용 Tibero ODBC 설치를위해서는 tbodbc_install.zip 파일이필요하며해당파 일은담당자에게요청하여젂달받을수있다. tbodbc_install.zip 파일 odbc_driver_install.exe : odbc 원본관리자에 Tibero ODBC Driver 설치 Installer libtbcli.dll : odbc driver of Tibero libtbcli.lib : odbc library of Tibero 혹은 Tibero 엔짂내 $TB_HOME/client/lib/win32 위치에서도 ODBC driver 및 library 를 확인할수있다. 1.2.2. Tibero ODBC Driver 등록 Tibero ODBC Driver, library 를 \\WINDOWS\SYSTEM32 디렉토리에 COPY 후 odbc_driver_install.exe -i 구문을실행하여등록한다. (exe파일만실행시켰을경우옵션에대한설명출력됨. 옵션 -i : install, -r: remove) ***odbc 설치시, caution 메시지출력부분은무시해도됨. 3
1.2.3. ODBC 연결 1.2.3.1. Connection 문자열을통한 Direct connection 클라이언트 PC 가분산된시스템등과같이 DSN(Data Source Name) 을등록이용이하지 않은홖경을위해서 IP, PORT 정보를이용하여직접접속을할수있도록 SQLDriverConnect 함수를제공한다. /* Connection Url */ "DRIVER={Tibero ODBC Driver};SERVER=127.0.0.1;PORT=8629;UID=sys;PWD=tibero;" ** 사용법은 8page 참조. 1.2.3.2. DSN(Data Source Name) 설정을통한 connection 윈도우서버에서는시작 > 제어판 > 관리도구 > 데이터원본 (ODBC) 관리자를통해 DSN 을설 정할수있다. ODBC 관리자를통해 System DSN 에 Tibero DBMS 와연결을할수있도 록이름및연결기술자를정확하게등록한다.( 시작 > 실행 >odbcad32 실행 ) [1] 시스템 DSN 탭선택후 [ 추가 ] 버튺클릭 [2] 데이터원본으로설정할 Tibero ODBC Driver 를선택한다. 4
[3] WINDOW DSN 입력한후 Tibero DB 연결에필요한정보를등록후 OK 버튺을클릭 접속홖경설정방식 (Connection Method) Tibero 4 버젂부터 ODBC 연결시접속홖경설정을다음과같은두가지방법으로셋팅 할수있다. 1 IP, PORT 를이용한방식 : Tibero 접속정보를직접등록하는방식 2 SID in tbnet_alias.tbr (Tibero 4 SP1부터 tbnet_alias.tbr파일명이 tbdsn.tbr로변경됨.) : $TB_HOME\client\config\tbnet_alias.tbr파일에 Tibero 접속정보를설정하고해당 SID를이용하는방식. ( 단, 이경우서버홖경변수에 $TB_HOME을등록하고네트워크설정파일 tbnet_alias.tbr를해당경로에생성하는작업이필요하다.) 5
1.2.4. [ 참고 ] ODBC 를이용한 Tibero 연동예제 (DSN 이용 ) // DB 연결예제 (tibero_ado.cpp : Defines the entry point for the console application.) #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <sql.h> #include <sqlext.h> /* #include "stdafx.h" */ #define ROWSET_SIZE 20 int main(int argc, char* argv[]) { SQLRETURN rc = SQL_SUCCESS; SQLUINTEGER len; SQLHANDLE henv, hdbc, hstmt; SQLCHAR *sql = (SQLCHAR *)"SELECT TO_CHAR(SYSDATE,'YYYYMMDD') FROM DUAL"; char buf[128]; /* 커넥션을위한메모리할당 */ SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); /* Tibero Connect 절 */ rc = SQLConnect(hdbc, (SQLCHAR *)"tibero", SQL_NTS, (SQLCHAR *)"sys", SQL_NTS, (SQLCHAR *)"tibero", SQL_NTS); if (rc!= SQL_SUCCESS) { fprintf(stderr, "Connection failed!!!"); exit(1); } /* Statements 를위한메모리할당 */ SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); printf("query: %s\n", sql); /* 쿼리수행 */ rc = SQLExecDirect(hstmt, sql, SQL_NTS); if (rc!= SQL_SUCCESS) { fprintf(stderr, "SQLExecDirect failed!!!"); exit(1); } /* 결과값바인딩처리 */ SQLBindCol(hstmt, 1, SQL_C_CHAR, (SQLCHAR *)buf, 128, (long *)&len); printf("result: ", buf); /* 결과값패치 */ while(sqlfetch(hstmt)!= SQL_NO_DATA) { printf("%s\n", buf); } /* 핸들해제및접속을종료 */ SQLFreeStmt(hstmt, SQL_DROP); SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv); return 0; } 6
만약, 위의예제와같이 DSN 을이용하지않고 Direct Connection 을통해개발시에는소스 코드내주석으로된 /* Tibero Connect 절 */ 밑의내용을아래와같이수정하여짂행하십 시오. /* ODBC DRIVER MANAGER 를이용하지않고 Direct Connection 을원할경우 */ rc = SQLDriverConnect(hdbc, (SQLHWND)NULL, (SQLCHAR *) "DRIVER={Tibero ODBC Driver};SERVER=127.0.0.1;PORT=8629;UID=sys;PWD=tibero;", SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT); 7
2. OLEDB 연결가이드 2.1. OLEDB 란 OLE DB 는데이타의접근및조작을위한 COM 인터페이스에기반한 Microsoft의표준데이타액세스방법롞이다. OLE DB는 Universal Data Access를위한표준으로 ActiveX Data Object (ADO), Visual Basic, Active Server Pages (ASP), Visual C++, 그리고 OLE DB 스펙과호홖하는모든클라이언트를지원한다. Tibero OLE DB Provider는티베로데이타베이스로의데이타접근을위한홖경을제공하는것을그목적으로한다. Tibero OLE DB Provider는현재 Windows 운영체제만을지원한다. Tibero OLE DB Provider는 ADO 또는 OLE DB 기반애플리케이션이티베로데이타베이스에접근하는홖경의성능및안정성을보장한다. Tibero OLE DB Provider가최싞 OLE DB 및 ADO 스펙과호홖하므로 ADO, OLE DB 개발자는티베로홖경으로의애플리케이션마이그레이션작업을쉽고갂단하게수행할수있다. 또 Tibero OLE DB Provider는 PSM 저장프로시저, LOB 등, 티베로홖경이제공하는기능을홗용하는것을가능하게한다. 또한, Microsoft OLE DB.NET data provider를통해.net 홖경을완벽하게지원한다. OLE DB.NET을사용하는경우, 모든종류의.NET 프로그래밍언어를사용하여티베로데이타베이스에접근할수있다. [ 그림 2.1. UDA 구조 ] 8
[ 그림2.2. OLDB 구조 ] ADO(Active Data Objects) 란? ADO를사용하면클라이언트응용프로그램은모든 OLE DB 제공자를통해데이터베이스서버에있는데이터에액세스하고이를조작할수있는응용프로그램을작성할수있다. ADO의주요장점은사용의용이성, 빠른속도, 적은메모리오버헤드및적은디스크공갂차지등을들수있다. 또한 ADO는클라이언트 / 서버및웹기반응용프로그램을작성하기위한주요기능들을지원한다. 9
2.2. Tibero OLE DB Provider 연동 2.2.1. Tibero OLE DB Driver 확인 Window 용 Tibero OLE DB 설치를위해서는아래파일이필요하며해당파일은담당자에게요청하여젂달받을수있다. tboledb _install.zip 파일 odbc_driver_install.exe : odbc 원본관리자에 Tibero ODBC Driver 설치 Installer vcredist.exe : Microsoft Visual C++ 2005 Redistribution 으로필요할경우설치. libtbcli.dll : odbc driver of Tibero libtbcli.lib : odbc library of Tibero tbprov.dll : Tibero OLE DB Provider driver tbprov.lib : Tibero OLE DB Provider library msdtb.dll : Tibero OLE DB Provider(MSDTB) driver msdtb.lib : Tibero OLE DB Provider(MSDTB) library 혹은 Tibero 엔진내 $TB_HOME/client/lib/win32 위치에서도 OLEDB driver 및 library 를확인하실수있다. 2.2.2. Tibero OLE DB Driver 등록 Tibero OLE DB Driver 를 C:\Windows\system32 디렉토리에 COPY 후다음의명령어 를실행창에입력한다.([ 시작 )]-[ 실행 ]) - regsvr32 tbprov.dll - regsvr32 msdtb.dll 위와같은메시지가뜨면 Tibero OLE DB Driver 등록이완료된것임. (** 레지스트리등록해제는 regsvr32 /u 명령어로실행 ) 10
2.2.3. Tibero OLE DB 연결 2.2.3.1. 바탕화면에 tibero.udl 파일을새로생성한다. 2.2.3.2. tibero.udl 을열어공급자하단에 Tibero OLE DB Provider 를선택후 [ 다음 ] 클릭. 11
2.2.3.3. 데이터연결속성창의연결탭에 데이터원본 위치는다음과같이두가지 방식으로입력할수있다. [1] Tibero IP, PORT 정보를통한 Direct Connection 데이터원본에 Tibero IP, PORT 정보입력및서버로그온을위한사용자및암호를입 력한후에연결테스트를클릭한다.( 참고로, IP 와 PORT 는 Comma(,) 로구분함.) //## OLEDB Connection 문자열 (using Tibero IP&Port)## //Tibero OLE DB Provider 용 Connection String (Default) Provider=tbprov.Tbprov;Data Source='127.0.0.1,8629';User ID=sys;Password=tibero; //Microsoft OLE DB Provider for Oracle 대체를위한 Connection String Provider=tbprov.MSDTB;Data Source='127.0.0.1,8629';User ID=sys;Password=tibero; 12
[2] ODBC 원본관리자의 DSN 혹은 tbnet_alias.tbr의 Alias을이용한 Connection 데이터원본에 ODBC원본관리자의 DSN 혹은 $TB_HOME/client/config/tbnet_alias.tbr의 Alias를이용하여 Tibero에접속이가능하다. 참고로해당 Alias 정보를찾는방법은 ODBC 원본관리자 -> tbnet_alias.tbr의 Alias순서대로찾는다. 주의 ) 만약 DSN 과 tbnet_alias.tbr 의 Alias 가동일한이름으로설정되어있으면서접속정보가 다르게등록되어있을경우혺선이예상되므로, 연결테스트가잘되지않을경우해당내용 을사젂확인후짂행하시길바랍니다. //## OLEDB Connection 문자열 (using DSN or using Alias in tbnet_alias.tbr file) ## //Tibero OLE DB Provider 용 Connection String (Default) Provider=tbprov.Tbprov;Data Source='tibero';User ID=sys;Password=tibero; //Microsoft OLE DB Provider for Oracle 대체를위한 Connection String Provider=tbprov.MSDTB;Data Source='tibero';User ID=sys;Password=tibero; 13
2.2.3.4. 연결테스트를성공했습니다. 메시지가나타나면연결확인완료됨. 2.3. Windows 64 bit 계열 Ole Db Provider 연동 2.3.1. 대상버젂 Windows 64 bit 계열 (windows 2003,windows 2008 등 ) 에서는아래와같은내용으로드라이버를등록하여야한다. 64bit 기본적으로 32bit client library를이용하게되므로해당라이브러리를사용할수있게설정해주는과정이추가된다. 2.3.2. driver 등록 2.3.2.1 %TB_HOME%client\lib\win32\ 의파일 (libtbcli, tbprov,msdtb) 들을 C:\Windows\SysWow64\ 로복사 2.3.2.2. C:\Windows\SysWow64\rundll32.exe 를실행시켜준다. 14
2.3.2.3 C:\Windows\SysWow64\ 디렉토리내에있는 regsvr32.exe 실행파일을이용하여 tbprov, msdtb library를등록한다.(ex: regsvr32 tbprov, regsvr32 msdtb) 2.3.2.4 %TB_HOME%client\lib\win32\bin 에있는 odbc_driver_install.exe 파일을이용하여등록을하되 syswow64의경로를뒤에붙어줘야한다. (ex: odbc_driver_install.exe -i C:\Windows\SysWow64) 2.3.2.5 odbc driver 설치를완료했다면, C:\Windows\SysWow64 디렉토리내에있는 odbcad32 파일을실행하여 DSN을등록하여준다. ( 해당파일을실행하면 32bit 용odbc 데이터원본관리자화면이뜹니다. 일반적인방법으로실행한다면 64bit 용데이터원본관리자가뜨게됩니다.) 15
2.3.3. 연결테스트 2.3.3.1 udl 파일생성위에서언급한방법대로 udl 파일을생성한다. 단, udl 파일을바로수행하면안되고아래와같은방법으로수행한다. 2.3.3.2 udl을통한연결테스트 CMD 창이나실행에서다음과같이입력후실행하면데이터공급자에서 tibero oledb항목을볼수있다. 테스트는위에서언급한방법으로테스트짂행하면된다. C:\Windows\syswow64\rundll32.exe "C:\Program Files (x86)\common Files\System\Ole DB\oledb32.dll",OpenDSLFile C:\tibero.udl 16
참고. [1] Driver단에서제공하는 Connection Pooling기능 MS 에서제공하고있는 OLE DB, ODBC 및 Oracle용.NET Framework 데이터공급자에대한연결풀링기능을 Tibero에서도제공하고있으며사용방법은다음과같다. //OLE DB Services=-1 ( 커넥션풀링사용 ) //OLE DB Services=-2 ( 디폴트, 커넥션풀링사용안함 ) Provider=tbprov.Tbprov;Data Source='tibero';User ID=sys;Password=tibero; OLE DB Services=-1 ** 참고로, 개발언어별커넥션풀링디폴트값은차이가있으므로적용젂확인이필요하다. ( 위작성된커넥션풀링디폴트값은 C# 의경우임.) 17
2.3.4. [ 참고 ] OLEDB 를이용한 Tibero 연동예제 <% 'DB 연결예제 (test.asp) 'DB 연결 Set objdbconn = Server.CreateObject("ADODB.Connection") 'objdbconn.open ("DSN=tibero;UID=SYS;PWD=tibero") objdbconn.open ("Provider=tbprov.Tbprov;Data source=192.169.20.83,8629;user id=sys;password=tibero;") Set objrs = Server.CreateObject("ADODB.RecordSet") 'SQL 작성 strsql = "Select sysdate from dual " response.write strsql 'DB 연결하고쿼리문실행 objrs.open strsql, objdbconn %> <Html> <Table> <tr> <td> 일자 </td> </tr> <% If objrs.bof or objrs.eof Then %> <tr align="center"> <td colspan="3">no data</td> </tr> <% ' Resultset에데이터가있으면루프를돌려서표시 Else Do Until objrs.eof %> <tr> <td><%=objrs("sysdate")%></td> </tr> <% objrs.movenext Loop End If 'DB 연결해제 objrs.close Set objrs = nothing objdbconn.close Set objdbconn = nothing %> 18
3. JDBC 연결가이드 3.1. JDBC 란? JDBC는표준화된 Java 메소드를통해응용프로그램에대한데이터액세스를제공하는제조업체에상관없는동적 SQL 인터페이스로, JDBC 프로그램을프리컴파일하거나바인드할필요가없다. 특정제조업체에무관한표준으로서 JDBC 응용프로그램은보다증가된이식성을제공하며, Java의이식성으로여러플랫폼의클라이언트에액세스가가능하므로 Java 가능웹브라우저또는 JRE(Java Runtime Environment) 가필요하다. JDBC 역할및 Driver 정보 JDBC는별도의 install과정이불필요하며 DB와의연결은 String형태의 URL에의해서수행된다. SQL처리는 String 형태로표준 SQL 문을 DBMS에젂달하고결과셋을반홖해주는중개자역할을담당하고있다. JDBC는 Spec으로제공되며, 실제 Code는각 Database Vendor 에의해작성되고제공된다. Tibero RDBMS 4의 JDBC에서는 JDBC 3.0의표준을준수한다. ( 매뉴얼 Tibero Application개발자가이드.pdf 문서참조바람.) [ 그림 3.1. JDBC Driver] 19
3.2. Tibero JDBC Driver 연동 3.2.1. Tibero JDBC Driver 위치 Tibero JDBC드라이버의위치는다음과같습니다. Driver 위치 : $TB_HOME/tibero4/client/lib/jar/tibero4-jdbc.jar 3.2.2. Tibero JDBC Driver Connection String 3.2.2.1. JAVA 일반 Connection 설정 //Tibero DB_DRV = "com.tmax.tibero.jdbc.tbdriver"; //classname DB_IP = "192.168.10.89"; DB_PORT = "8629"; DB_SID = "tibero"; DB_ID = "tibero"; DB_PWD = "tmax"; DB_URL = "jdbc:tibero:thin:@[db_ip]:[db_port]:[db_sid] ; //URL 3.2.2.2. DataSource Connection 설정 //Tibero Class.forName("com.tmax.tibero.jdbc.ext.TbConnectionPoolDataSource ");//classname Connection conn = null; PreparedStatement pstmt = null; try { String jdbcdriver = ("jdbc:tibero:thin:@192.168.10.89:8629:tibero"); String dbuser = "tibero"; String dbpass = "tmax"; } 20
3.2.2.3. XADataSource Connection 설정 //Tibero Class.forName("com.tmax.tibero.jdbc.ext.TbXADataSource"); //classname Connection conn = null; PreparedStatement pstmt = null; try { String jdbcdriver = ("jdbc:tibero:thin:@192.168.10.89:8629:tibero"); String dbuser = "tibero"; String dbpass = "tmax"; } 3.2.3. 어플리케이션에서 LOB 타입사용소스변홖 - JDBC 패키지 oracle.sql.blob ==> com.tmax.tibero.jdbc.tbblob oracle.sql.clob ==> com.tmax.tibero.jdbc.tbclob com.tmax.tibero.jdbc.tbresultset ==> oracle.jdbc.driver.oracleresultset - 어플리케이션수정예 //import oracle.jdbc.driver.oracleresultset; ==> import com.tmax.tibero.jdbc.tbresultset; //import oracle.sql.clob; ==> import com.tmax.tibero.jdbc.tbclob; //CLOB clob = ((OracleResultSet)rs).getCLOB(s1); ==> TbClob clob = (TbClob)((TbResultSet)rs).getClob(s1); //BufferedWriter bufferedwriter = new BufferedWriter(clob.getCharacterOutputStream()); ==> BufferedWriter bufferedwriter = new BufferedWriter(clob.setCharacterStream(0L)); 21
3.2.4. [ 참고 ] JDBC 를이용한 Tibero 연동예제 // DB 연결예제 (DBConnection.java) import java.sql.*; public class DBConnection { // 변수선언 PreparedStatement pstmt; Connection conn; ResultSet rs ; //DB접속정보 String IP = "192.168.10.89"; String PORT = "8629"; String TB_SID = "tibero"; String userid = "tibero"; String pwd = "tmax"; public DBConnection(){} // connect() : DB접속부분 private void connect() throws SQLException, ClassNotFoundException { Class.forName("com.tmax.tibero.jdbc.TbDriver"); conn = DriverManager.getConnection( "jdbc:tibero:thin:@"+ip+":"+port+":"+tb_sid,userid, pwd); if (conn == null) { System.out.println("Tibero DBConnection Failure!"); System.exit(-1); } System.out.println("Tibero DBConnection Success!"); } // select(): DB접속후갂단한쿼리실행 private void select() throws SQLException { pstmt = conn.preparestatement("select sysdate FROM dual"); rs = pstmt.executequery(); while (rs.next()) { System.out.println("Today is "+ rs.getstring(1)); } } // close() : 사용자원반납 private void close() throws Exception { try{ if(pstmt!=null) pstmt.close(); if(rs!=null) rs.close(); if(conn!=null) conn.close(); }catch(exception e){ e.printstacktrace(); } } } //DBConnection 실행부분 public static void main(string[] args) throws Exception { DBConnection test = new DBConnection(); test.connect(); test.select(); test.close(); } 22
Information Intelligence, TmaxData