OCI VS THIN
OCI_Treiber
 

Der Oci-Treiber



Um per Java auf Oracle-Datenbanken zuzugreifen, muss zunächst der Datenbank-spezifische JDBC-Driver geladen sein. Er heisst »oracle.jdbc.driver.OracleDriver« und wird aus einem Zip- Archiv in »$ORACLE_HOME/jdbc/lib« geladen, das je nach eingesetzter Oracle- beziehungsweise JVM-Version »classes111.zip« oder »classes12. zip« heisst. Die entsprechende Datei sollte in »$CLASSPATH« enthalten sein. Über diese Archive sind beide Typen der JDBC-Treiber erreichbar:
Thin-Driver und OCI-Driver. Erst der Connect-String legt fest, welcher der beiden Verwendung findet: Den Thin-Driver erreicht man durch den Connect-String »jdbc:oracle: thin:@Hostname:Port:SID«, während der OCI-Teiber mit »jdbc:oracle:oci8:@TNS-Alias« angesprochen wird.

Was unterscheidet die beiden Treibertypen im Fall von Oracle? Der Thin-Driver implementiert das SQL*Net-Protokoll von Oracle komplett in Java auf Basis der Java-Sockets. Das ist portabel, kommt ohne weitere Client-Installation aus und ist daher leichtgewichtig. Der OCI-Driver bildet nur eine dünne Java-Schicht über der OCI-C-Library, die über JNI angesprochen wird. Das setzt natürlich eine komplette Installation der Oracle-Client-Software voraus, verbietet sich also insbesondere für Applets oder Programme, die direkt aus einem JAR lauffähig sein sollen. Der große Vorteil des OCI-Treibers besteht darin, dass er alle Oracle-spezifischen Erweiterungen im Vergleich zum JDBC-Standard verfügbar macht. Nur mit dem OCI-Treiber können die Clients Datenbankverbindungen nutzen, die nicht über TCP eröffnet werden. Oracle behauptet, dass mit der C-Library des OCI die Performance gesteigert wird, was zunächst auch einleuchtet. Allerdings wissen Arbeitskollegen des Autors von einer Applikation zu berichten, die über den Thin-Driver merklich schneller lief. Mit Hilfe von »strace« und »tcpdump« war herauszufinden, dass der OCI-Treiber etwa doppelt so viele Netzwerk-Roundtrips zum Server durchführte als der Thin-Driver. Beispiel eines Connection-Strings auf eine Oracle 8i Datenbank:
jdbc:oracle:oci8:@(description=(address=(host=hmttc5)(protocol=tcp)

Java Beispiele:



Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@PO8.WORLD", "","");

DriverManager.getConnection("jdbc:oracle:oci8:@description=(address=(host=vulcan)(protocol=tcp)(port=1521))(connect_data=(sid=PO8)))", "un", "passwd");

DriverManager.getConnection ("jdbc:oracle:oci8:@vulcan:1521:PO8", "un","passwd")

Über thin wäre es folgender String:

DriverManager.getConnection ("jdbc:oracle:thin:@vulcan:1521:PO8", "un","passwd");

[ Home ] [ Stuff ] [ Fotogalerie ] [ IT ] [ Profile ] [Contact] [MyDomains]