【问题标题】:What is the difference between OCI and THIN driver connection with data source connection between java and oracle XE?java和oracle XE之间的OCI和THIN驱动连接与数据源连接有什么区别?
【发布时间】:2014-03-09 18:49:01
【问题描述】:

我正在编写以下代码,用于使用 3 种方式(OCI、THIN 和数据源)在 java 和 Oracle 10g XE 之间进行连接,代码运行成功,但不知道 THIN 和 OCI 与数据源之间的区别连接。

1-

public static void main (String args[]) throws SQLException
 {
  OracleDataSource ods = new OracleDataSource();
  ods.setURL("jdbc:oracle:thin:hr/hr@localhost:1521/XE");
  Connection con = ods.getConnection();
  System.out.println("Connected");
  con.close();
 }

2-

public static void main(String args[])
     {
      try
      {
       // load oracle driver
      Class.forName("oracle.jdbc.driver.OracleDriver");
      // connect using Thin driver
      Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","hr","hr");
      System.out.println("Connected Successfully To Oracle");
      con.close();
      }
      catch(Exception ex)
      {
        ex.printStackTrace();
      }
 }

3-

public static void main(String args[])
     {
      try
      {
       // load oracle driver
      Class.forName("oracle.jdbc.driver.OracleDriver");
      // connect using Native-API (OCI) driver
      Connection con = DriverManager.getConnection("jdbc:oracle:oci:@","hr","hr" );
      System.out.println("Connected Successfully To Oracle using OCI driver");
      con.close();
      }
      catch(Exception ex)
      {
        ex.printStackTrace();
      }
 }

【问题讨论】:

    标签: java oracle jdbc database-connection


    【解决方案1】:

    JDBC 瘦驱动程序和 JDBC OCI 驱动程序都使用相同的网络协议。从服务器的角度来看,两者之间没有区别。 JDBC 瘦驱动程序是 100% Java 并包含在一个独立的 jar 中(高级功能需要一些额外的 jar)。 JDBC OCI 驱动程序对 OCI C 客户端库进行 JNI 调用,因此依赖于要安装的 Oracle 完整客户端(OCI 也是 sqlplus 使用的)。 Oracle 建议使用大多数客户使用的 JDBC 瘦驱动程序。它是最快的驱动程序,也是最强大的驱动程序。

    【讨论】:

    • Oracle WebLogic Server 仅支持瘦(不支持 JDBC OCI)。这意味着所有 Oracle 融合应用程序都使用精简驱动程序。此外,所有 Oracle 性能出版物(SPecJ 和 YCSB)都使用 JDBC 瘦驱动程序。在我们所有的 OOW 演示中,我们建议使用瘦驱动程序。顺便说一句,我为 Oracle 工作,我的团队负责这些驱动程序的开发。够正式吗?
    • 对我来说听起来不错:-)。我希望我们的 DBA 能听到你的声音。但似乎他们不喜欢瘦驱动程序,因为故障转移配置必须在 JDBC URL 中完成,而不是通过 tnsnames.ora。或者有没有办法让瘦驱动程序也读取这个文件。如您所见,我不是这方面的专家,我只是一个开发人员,对必须始终保持 Oracle 客户端和驱动程序同步感到非常恼火。我自己更喜欢使用瘦客户端。
    • @LordOfThePigs 是的,您可以将 tnsnames.ora 与瘦驱动程序一起使用。为此,您需要通过将属性“oracle.net.tns_admin”设置为连接属性或 Java 系统属性(使用 java -D 设置)来设置驱动程序知道在哪里找到文件。该值应该是 tnsnames.ora 所在的目录。那么 url 就是 jdbc:oracle:thin:@。如果您需要这方面的帮助,请直接与我联系。
    • 我刚刚收到了更多反馈。有人告诉我,瘦驱动程序不支持透明应用程序故障转移 (TAF),但只支持快速连接故障转移 (FCF)。这份文件 (oracle.com/technetwork/database/…) 似乎是这么说的,但它现在已经 8 岁了。这仍然是真的吗?我认为这个讨论仍然与这个问题的范围有关。稍后可能会在您的答案中添加额外的说明。
    • 虽然 TAF 确实仅在 JDBC-OCI 驱动程序中受支持,但从 12.2.0.1 开始,JDBC Thin 支持更完整的重放功能,称为应用程序连续性 (AC)。我们鼓励所有客户使用 AC 而不是 TAF。
    【解决方案2】:

    Oracle 为其数据库提供了四种类型的驱动程序,但我将仅列举您询问的两种。

    OCI 驱动程序是一个type 2 JDBC 驱动程序,并使用本机代码连接到数据库。因此,它只是具有可用本机 Oracle 驱动程序的平台上的一个选项,它不是“纯”Java 实现。

    Oracle 的 JDBC Thin 驱动程序是一个 type 4 JDBC 驱动程序,它使用 Java 套接字直接连接到 Oracle。它直接实现了 Oracle 的 SQL*Net TCP/IP 协议。因为它是 100% Java,它独立于平台,也可以从 Applet 运行。 (不是你应该)

    【讨论】:

    • 能否分享更多关于 OCI 的信息。任何好的阅读链接都会很棒。
    • @suvasis 在我的回答中点击 oci,然后滚动到外部链接部分。
    • 此链接详细介绍了编程和与 ProC 概念的比较。我在问您是否有任何链接可以描述我们需要在应用程序端和服务器端配置的所有设置的差异。更多关于实施/发展的观点。如果你有的话。
    • @Suvasis OCI 只是驱动程序使用的协议。除了用户名、密码、地址、端口和名称(通常在 tnsnames.ora 中)之外,应用程序端或服务器端没有需要配置的设置。基本上,AFAIK,如果你能正确配置它。
    • 这包含一些有用的信息:stackoverflow.com/questions/2896265/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2011-04-04
    • 2014-07-06
    • 2023-03-29
    • 2011-09-19
    • 2020-06-15
    相关资源
    最近更新 更多