簡體   English   中英

Oracle JDBC:用戶名/密碼無效 (ora-01017)

[英]Oracle JDBC : invalid username/password (ora-01017)

我在 jdbc 連接到 oracle 數據庫服務器時遇到一個奇怪的問題。

我們在 tomcat 服務器上運行應用程序。 這些應用程序使用 oracle 數據庫。 所有應用程序都使用相同的憑據。

應用程序全天運行良好。 晚上沒有活動。 早上,當應用程序嘗試重新連接到數據庫時,我們會收到一些(2 或 3 個)ORA-01017(無效的用戶名/密碼)錯誤。

然后重新連接工作,應用程序將正常運行。

這工作了幾天(大約 5 天),然后是一個或多個應用程序塊。 所有重新連接嘗試均失敗。

我們跟蹤了網絡通信,發現如果連接失敗並顯示ORA-01017 NO CREDENTIALS where sent。

當然,沒有人在晚上接觸系統。

一種解決方法是我們每天早上 6 點重新啟動 tomcat 服務器以清理每個連接緩存或連接池。 它沒有幫助。

怎么了? 有任何想法嗎?

在完全阻塞的情況下持續 5 天的間隔(同時每天重申)對我來說看起來很奇怪。

配置

Database Oracle 10.2, JDBC Driver 11.2 thin, tomcat 6.0.24, JDK 6, OS windows, 部分應用為Avaya Voice Portal 5.0的Dialogs。

我們自己的(非 VP)應用程序使用簡單的連接(無池)。


該系統最初設置在 Windows 2003 服務器上,在 apserver 和 tomcat 服務器之間有一個 WAN。

現在系統遷移到數據庫服務器附近的一台linux(CentOS)服務器上,運行正常。 不再有 ORA-01017。

對我來說,OracleDriver 的不兼容版本導致了這個問題您的應用程序應該手動注冊 oracle 驅動程序(我需要使用哪個 jar)或者 agter java 6 ojdbc.jar 應該在您的應用程序的類路徑中。 因此,適用於您的 oracle 安裝的 google 兼容驅動程序版本,並在您的 pom 文件中聲明它(使用需要的插件將其放入生成的 jar 中)並從代碼中手動引用它,或者將 ojdbc.jar 放在您的 jar 可以看到它的某個位置 有用的鏈接:

關於連接oracle db: https : //www.codejava.net/java-se/jdbc/connect-to-oracle-database-via-jdbc

關於 java 類路徑: https : //docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html

正如 Nikita Poberezkin 所說,我檢查了我的 JDBC 驅動程序版本,發現它與我們的測試服務器不同。 我刪除了它並安裝了相同版本的測試服務器,我想它現在已經解決了。

奇怪的。 一些想法:

  1. 將用戶名和密碼記錄幾天,以確保它們正確無誤。 代碼中的某些錯誤可能會覆蓋您不期望的值。

  2. 考慮將 JNDI 與 Tomcat 提供的連接池一起使用。 DBCP 有一些非常高級的選項來檢查連接是否仍然有效以及如何重新連接它。 之后,您不應再在日志中看到任何與連接相關的問題。 這也將提高安全性,因為所有應用程序都不再需要知道數據庫密碼。

  3. 這可能是資源泄漏的問題(如果應用程序從不返回連接,就會發生這種情況),但我預計會出現不同的錯誤消息。

  4. 一些數據庫(DB2、H2)允許創建視圖,使來自其他數據庫的遠程表像本地表一樣可見。 不確定 Oracle 是否支持這一點,但如果支持,則該遠程表的用戶名/密碼可能是錯誤的。

還要考慮這篇博文中的要點: Oracle ORA-01017 提示

乍一看,帖子中的任何內容都不會導致您的問題,但也許某些腳本正在操縱tnsnames.ora (例如分發新副本)。

或者 DBA 在每日備份期間禁用所有用戶。

我會檢查 Oracle 偵聽器和跟蹤日志。 正如 Aaron Digulla 所說,這聽起來確實有些資源枯竭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM