이글루스 로그인


Oracle 9.2 에서 Hibernate 로 CLOB 을 사용한다면 9.2.0.8 로 업그레이드를..

 
Hibernate 3.0 이상에서 Oracle의 CLOB 를 사용할 때 여러가지 방법이 있지만,
내가 추천하는 방법은 string 으로 쓰면서 column 의 sql-type 을 clob 으로 하는 것이다.
즉 다음과 같이...
<property name="content" type="string">
    <column name="CONTENT" sql-type="clob"/>
</property>
위와 같이 매핑을 하면 schemaexport 를 사용할 때 CLOB 으로 export 를 하고 그냥 String 으로 긴 텍스트를 사용할 수 있다.
단 조건이 있다.
오라클 9.2.0.8 이상에서 Oracle 10.2.0.x 버전의 JDBC 버전의 드라이버를 쓰는 것이다.
이 드라이버에서는 CLOB 을 ResultSet.getString() 으로 가져와도 4000byte 의 한계가 없도록 수정이 되어있다.
따라서 CLOB 을 쓸 때 CLOB 라는 객체로 변환해서 쓰지 않아도 되는 장점이 있다.

9.2.0.1 의 JDBC 드라이버를 쓰면 다음과 같은 오류가 나는 프로그램이 10.2.0.x 의 JDBC 드라이버를 사용하면 문제없이 실행된다.
9.2.0.1.0
Exception in thread "main" java.sql.SQLException: 데이터 크기가 해당 유형의 최대 크기보다 큽니다: 136192
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
        at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
        at oracle.jdbc.ttc7.TTCItem.setArrayData(TTCItem.java:147)
        at oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem(DBDataSetImpl.java:2461)
        at oracle.jdbc.driver.OraclePreparedStatement.setItem(OraclePreparedStatement.java:1155)
        at oracle.jdbc.driver.OraclePreparedStatement.setString(OraclePreparedStatement.java:1572)
        at DriverTest.main(DriverTest.java:40)


단 오라클 9.2.0.7 이전의 데이터베이스에서는 중간에 텍스트의 일부가 누락되는 버그가 있으므로 데이터베이스를 9.2.0.8 로 업그레이드를 해야 한다.

10g의 드라이버를 사용하면 또 다른 장점도 있다.
오라클의 10g 드라이버의 소개페이지를 보면 다음과 같은 성능에 관한 데이터가 있다.
We recommend the Oracle JDBC 10g drivers, which are at least 33% faster on average; SQL types to Java types conversion up to 30 times faster (customer feedback).
대략 SQL 타입을 자바타입으로 변환하는 속도가 30배정도 빠르다는 것..
(이전 것이 얼마나 느렸다는 것인가? ^^;)

이에 대한 논의는 http://www.hibernate.org/56.html 에서 많이 볼 수 있다.

by sayjava | 2006/12/13 20:49 | Programmer's notes | 트랙백 | 덧글(1)

트랙백 주소 : http://sayjava.egloos.com/tb/2862363
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 임형구 at 2008/09/09 15:16
드라이버를 업그레이드하면 간단히 해결되는 것을...

대단히 감사합니다.

:         :

:

비공개 덧글


◀ 이전 페이지          다음 페이지 ▶