DBMS 접속시 사용되는 방식중 Thin 과 OCI 방식을 정리 한다.
THIN => 순수하게 자바 패키지(클래스들)만으로 바로 DB와 연결,
범용성이 높다, 상대적으로 OCI보다 속도가 느리다.
OCI => Oracle Call Interface
.DLL과 .SO 파일과 같이 특정 운영체제 내에서만 돌아가는 Native Module을 통해 DB에 연결한다.
각 하드웨어/소프트웨어(O/S) 별로 전용의 DB연결 프로그을 OCI라고 부른다는 소리.
하드웨어 또는 소프트웨어 전용의 Module이다 보니, Thin보다 속도가 빠르다.
http://blog.naver.com/play08?Redirect=Log&logNo=20057220485
http://blog.naver.com/hanorom?Redirect=Log&logNo=100003734568
블로그에서 퍼왔습니다.
<< Thin/OCI Driver란 무엇인가? >>
오라클 JDBC 드라이버는 type2 형태의 OCI(Oracle Call Interface)Driver와 type4형태의 Thin Driver를 제공한다.
= Type2/Type4 =
type2 JDBC Driver란 오라클로 말하면 sql*net를 필요로 하며,
.dll or .so 형태의 하드웨어 종속적인 형태의 native module을 통해 DB와 연결된다.
오라클의 경우 JDBC type2 형태를 OCI(oracle call interface)Driver라고 부른다.
type4 형태의 JDBC Driver는 순수하게 자바 패키지만으로 바로 DB와 연결이 가능하다 오라클에서 통상 thin Driver라 부른다.
type2 형태가 보다 빠른 성능을 낸다. 반면 sql*net(oracle 경우)과 같은 native module이 항상 있어야 하므로
물리적인 하드웨어 구성에 다소 종속적인 형태가 될 수 밖에 없다.
반면 type4 형태 일 경우는 클라이언트에서 필요로 하는 것은 유일하게 자바클래스들만으로 디비와 접속이 가능하니
어떤 하드웨어 OS에서도 유연하게 디비연결이 가능하다.
대신 OCI형태보다 성능이 떨어진다.
= thin/oci =
OCI Driver : 오라클은 애플리케이션에서 DB의 데이터를 얻기 위해 OCI를 규정하고 있다.
바로 오라클이 제공하는 DB를 사용하기 위한 인터페이스 규정이 OCI이고 C/C++ 형태의 OCI 라이브러리를 제공한다.
그러므로 OCI 드라이버는 플랫폼에 영향을 받는다. 자바 역시 OCI 라이브러리를 이용하기 위해 네이티브 메소드를
이용하므로 플랫폼에 종속되는 것이다. OCI 드라이버는 type2형태의 드라이버로 오라클 DB를 접속하기 위해 SQL*NET이 필요하다.
모든 클라이언트가 SQL*NET을 인스톨해야 하는 불편함이 있는 반면 SQL*NET이 지원하는 고급 네트워킹 옵션이나 암호화 등을
이용할 수 있는 장점도 있다. libjdbc*.so파일이 필요하며 해당 디렉토리가 shared library path에 등록되어 있어야 한다.
즉 최소한 오라클 클라이언트 제품이 머신에 설치되어 있어야 한다.
JDBC thin Driver : 100% 순수 자바 드라이버로 애플릿에서 곧바로 DB에 접속하기 위해서는 반드시 필요하다.
여기서 'thin'의 의미는 네트워크를 타고 클라이언트 브라우저로 전송이 가능하다는 의미로 굳이 의미를 표현한다면
아마도 '가벼운 드라이버' 정도로 해석이 가능할 것 같다.
사용 전에 리스너(listenter)가 실행된 상태인지 반드시 확인해햐 한다.
멀티바이트 코드의 지원 여부 : thin 드라이버는 USUASCII, WE81SO8859P1, AL24UTFFSS, UTF8과 같은 4종류의 코드 체계만을 지원한다.
물론 OCI드라이버는 모든 코드 체계를 지원하고 있다. 그러므로 씬 드라이버를 사용하기 위해서는 이들 코드 체계로 DB가 설정돼 있어야 한다. classes111.zip파일이(아마 버전에 따라 다를듯) 필요하다 thin방식의 경우는 이 파일만 있으면 되며 오라클관련 제품이 로컬머신에 설치되어 있을 필요가 없다.
JDBC thin 드라이버의 효용성
순수 자바 드라이버의 의미를 주로 애플릿만 염두에 두고 이용하는 경우가 많은데,
순수 자바 드라이버의 경우 그 이용 가치가 넓다. 현재까지 제공되는 오라클 JDBC OCI 드라이버는 썬의 솔라리스용이 전부라고 가정하자.
본문에서도 말햇듯이 OCI드라이버는 플랫폼에 영향받기 때문에 반드시 자신의 플랫폼을 지원하는 드라이버를 써야 한다.
그런데 만약 HP-UX에서 이용하려면 방법이 없을까?
바로 순수 자바 드라이버를 이용하면 가능하다
HP-XP용 JDK를 설치한 후 자바 가상 머신만 만들어지면 바로 이 순수 드라이버를 사용해 로컬 또는 원격지의 DB를 사용할 수 있다.
바로 이런 점이 자바가 지향하는 철학이라고 할 수 있다.
각 플랫폼을 지원하는 자바 가상 머신만 있다면 사용자는 별다른 문제없이 이를 어디서나 이용할 수 있다.
ODBC 라면 해당 플랫폼을 지원하는 드라이버가 나올때까지 기다리거나 직접 ODBC 드라이버를 만들 수 밖에 없을 것이다.
Oracle OCI Driver와 Thin Driver
Sun에서는 각 Vender들(Oracle, informix, sybase,etc..)에게 4가지 종류의 JDBC Driver가 있음을 공표 했습니다.
그 중에서도 Type 2와 Type 4형태의 Driver를 Vender들이 많이들 제공하는데, Type 2 JDBC Driver란, Oracle로 얘기하면 Sql*Net을 필요로 하며,
.dll혹은 .so형태의 H/W 종속적인 형태의 Native Module을 통해 DB와 연결됩니다.
Oracle의 경우 JDBC Type 2 형태를 통상 OCI(Oracle Call Interface) Driver라 부릅니다.
반면 Type 4 형태의 JDBC Driver는 순수하게 Java package만으로 바로 DB와 연결이 가능합니다. Oracle에서는 통상 thin Driver가 부릅니다.
Type 2형태가 보다 빠른 성능을 냅니다. 반면, SQL*Net(Oracle의 경우) 과 같은 native module이 항상 있어야 하므로 물리적인 H/W구성에
다소 종속적인 형태가 될 수 밖에 없습니다.
반면 Type 4의 형태일 경우는 Client에서 필요로 하는 것은 유일하게 Java클래스들만으로 DB와 접속이 가능하니 어떤 H/W,
OS에서도 유연하게 DB연결이 가능 합니다. 대신 OCI 형태보다 성능이 떨어진다고 합니다.
그러나 이건 어디까지나 Oracle JDBC Driver에 한해서 그러할 뿐, 다른 DB Vendor는 특정 Type의 JDBC Driver만 제공하기도 합니다.
Oracle의 경우, OCI Driver와 thin Driver를 사용하는 방법은 다음과 같습니다.
OCI Driver:
libjdbc*.so 파일이 필요하며, 해당 디렉토리가 Shared Library Path에 등록되어
있어야 합니다. 즉, 최소한 Oracle Client 제품이 머신에 설치되어 있어야 합니다.
자세한 사항은 다음의 문서를 참조하세요.
http://javaservice.net/~java/bbs/read.cgi?m=dbms&b=jdbc&c=r_p&n=956117778
classes111.zip 이 필요합니다.
[사용법]
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:oci8:@ORA8i_alias";
String user = "scott"; String password = "tiger";
Class.forName(dirver);
Java.sql.Connection conn = DriverManager.getConnection(url, user, password);
NOTE: $ORACLE_HOME/network/admin/tnsnames.ora 파일에 해당 alias가 등록되어
있어야 합니다.
Thin Driver:
classes111.zip 이 필요합니다. thin 방식의 경우는 이 파일만 있으면 되며, Oracle관련
제품이 Local머신에 설치되어 있을 필요가 없습니다.
[사용법]
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@210.220.251.96:1521:ORA8i";
String user = "scott"; String password = "tiger";
Class.forName(dirver);
Java.sql.Connection conn = DriverManager.getConnection(url, user, password);
NOTE: thin 방식으로 접속할 경우, 원격지 Oracle DB의" Listener"가 떠 있어야 합니다.
본게시판의 JDBC FAQ 를 참조하세요
NOTE: 프로그램 소스상의 유일한 차이점은 DB URL이 OCI는 Remote DB에 대한 Local Alias를
사용하는 반면, Thin Driver는 Remote 머신의 IP Address와 Port번호, 그리고
해당 DB의 SID를 필요로 한다는 것만이 차이가 있을 뿐입니다.
'Oracle > Admin' 카테고리의 다른 글
[Oracle] CRS (grid infrastructure) 구동 시 참고 (0) | 2024.05.27 |
---|---|
[Oracle]Fatal NI connect error 12170. (0) | 2024.05.27 |
[Oracle] Oracle Dump (0) | 2024.05.09 |
[Oracle ] Enq: TX - allocate ITL entry (0) | 2024.05.09 |
[Oracle]Oracle log 관리 명령어 정리 (0) | 2024.05.07 |