Oracle 官方建議:Java 程序連接 Oracle 時,OCI 驅動(厚驅動)性能優於 Thin 驅動(純 Java)。主要區別:Thin 無需安裝客戶端;OCI 需安裝 Oracle Client 或 Instant Client。
| 方案 | 優點 | 缺點 |
| 完整 Oracle Client | 功能完整,含所有工具 | 安裝包大(~2GB),安裝耗時 |
| Instant Client | 輕量(~70MB),免安裝解壓即用 | 功能精簡,無 GUI 工具 |
生產推薦:Instant Client,部署簡單、佔用資源少。
環境變量配置(關鍵)
Windows + 完整 Client
PATH 添加 %ORACLE_HOME%\bin、%ORACLE_HOME%\lib。
CLASSPATH 添加 %ORACLE_HOME%\jdbc\lib\ojdbc8.jar,或拷貝到 tomcat/lib。
- 設置
NLS_LANG(註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_...),如 SIMPLIFIED CHINESE_CHINA.ZHS16GBK,與數據庫字符集一致,防止亂碼。
Windows + Instant Client (假設解壓至 D:\instantclient_19_3)
PATH 添加 D:\instantclient_19_3。
CLASSPATH 添加 D:\instantclient_19_3\ojdbc8.jar,或拷貝到 tomcat/lib。
- 在 Instant Client 目錄下創建
tnsnames.ora 配置服務名。
- 設置
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();
%>
總結清單
- 選擇 Instant Client,輕量部署。
- 正確配置
PATH/LD_LIBRARY_PATH、NLS_LANG、tnsnames.ora。
ojdbc8.jar 僅放在 Tomcat 共享 lib 目錄,不放入 WEB-INF/lib。
- 連接字符串使用
jdbc:oracle:oci8:@TNS_ALIAS。
- 測試驗證字符集、事務、長連接穩定性。
- 上一篇文章: JDBC 連接 Oracle 數據庫常見問題排查全攻略
- 下一篇文章: DB2 與 Oracle 常用函數對照表:遷移開發快速參考
Copyright ©
程式碼之家 All Rights Reserved