首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Java Web 應用使用 OCI 驅動連接 Oracle:Tomcat 多應用部署最佳實踐

     編輯:Oracle 資料庫基礎

為什麼選擇 OCI 驅動?

Oracle 官方建議:Java 程序連接 Oracle 時,OCI 驅動(厚驅動)性能優於 Thin 驅動(純 Java)。主要區別:Thin 無需安裝客戶端;OCI 需安裝 Oracle Client 或 Instant Client。

連接字符串切換

# Thin
jdbc:oracle:thin:@10.1.1.2:1521:shdb

# OCI
jdbc:oracle:oci8:@shdb  -- 使用本地服務名(TNSNAMES 配置)

客戶端安裝兩種方案

生產推薦:Instant Client,部署簡單、佔用資源少。

環境變量配置(關鍵)

Windows + 完整 Client

  1. PATH 添加 %ORACLE_HOME%\bin、%ORACLE_HOME%\lib。
  2. CLASSPATH 添加 %ORACLE_HOME%\jdbc\lib\ojdbc8.jar,或拷貝到 tomcat/lib。
  3. 設置 NLS_LANG(註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_...),如 SIMPLIFIED CHINESE_CHINA.ZHS16GBK,與數據庫字符集一致,防止亂碼。

Windows + Instant Client (假設解壓至 D:\instantclient_19_3)

  1. PATH 添加 D:\instantclient_19_3。
  2. CLASSPATH 添加 D:\instantclient_19_3\ojdbc8.jar,或拷貝到 tomcat/lib。
  3. 在 Instant Client 目錄下創建 tnsnames.ora 配置服務名。
  4. 設置 NLS_LANG 環境變量(系統或用戶級)。

Linux + 完整 Client

# ~/.bash_profile 或 /etc/profile
export ORACLE_HOME=/u01/app/oracle/product/19.0.0
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
# ojdbc8.jar 拷貝到 $CATALINA_HOME/lib

Linux + Instant Client

export ORACLE_HOME=/opt/instantclient_19_3
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
# tnsnames.ora 放在 $ORACLE_HOME/network/admin/
# ojdbc8.jar 拷貝到 $CATALINA_HOME/lib

Tomcat 多應用共享驅動 jar 關鍵規則

絕對不要 在每個應用的 WEB-INF/lib 下放入 ojdbc8.jar!

必須 將 ojdbc8.jar 放在 $CATALINA_HOME/lib(Tomcat 7/8/9)或 common/lib(Tomcat 6)下。

原因:避免 java.lang.LinkageError / ClassCastException — 不同 WebApp ClassLoader 加載同一 JDBC 驅動類導致類身份不一致,引發「驅動類重複加載」、「無法註冊驅動」等錯誤。

Instant Client 配置 tnsnames.ora 示例

# D:\instantclient_19_3\tnsnames.ora
SHDB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.1.236)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = shdb)
    )
  )

驗證連接

// 簡單 JSP 測試
<%@ page import="java.sql.*" %>
<%
  Class.forName("oracle.jdbc.OracleDriver");
  Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:@SHDB", "user", "pass");
  out.println("OCI 連接成功:" + conn.getMetaData().getDatabaseProductVersion());
  conn.close();
%>

總結清單

  1. 選擇 Instant Client,輕量部署。
  2. 正確配置 PATH/LD_LIBRARY_PATH、NLS_LANG、tnsnames.ora。
  3. ojdbc8.jar 僅放在 Tomcat 共享 lib 目錄,不放入 WEB-INF/lib。
  4. 連接字符串使用 jdbc:oracle:oci8:@TNS_ALIAS。
  5. 測試驗證字符集、事務、長連接穩定性。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
方案優點缺點
完整 Oracle Client功能完整,含所有工具安裝包大(~2GB),安裝耗時
Instant Client輕量(~70MB),免安裝解壓即用功能精簡,無 GUI 工具