1 引言
在用kettle開發抽取oracle數據的腳本時,時常會出現 Error occured while trying to connect to the database 錯誤,但是仔細觀察日誌,引起這個錯誤的原因不盡相同。這個錯誤看起來很簡單,但是有時候越簡單的錯誤越沒有耐心改,尤其是忙的時候,不小心填錯了某個參數導致這個錯誤但是自己感覺沒問題卻跑不成功,這是最煩人的。這時候需要淡定、不妨上網查查,錯誤也許就可以愉快的解決了。下面給出這錯誤的更細節錯誤的不同發生情況。
2 示例
有個很簡單的ktr腳本(當前kettle版本3.0.4),如下圖:
表輸入正常的配置信息如下:
下圖 kettle安裝文件目錄(有jar包)的情況:
按照上述配置,ktr腳本是可以正常執行完的。
1 首先來看 缺少ojdbc jar包的錯
下圖是ojdbc包被刪除的運行情況:
日誌信息:
重點是
exception while loading class oracle.jdbc.driver.OracleDriver。 意思是加載類 oracle.jdbc.driver.OracleDriver 異常 這很有可能就是jar包出問題。
2 下面是ip地址輸入錯誤
運行後:
日誌給出的錯誤信息:
Io異常大概意思是:網絡適配器不能建立連接。
3 數據庫名錯誤
運行後:
日誌報錯的情況:
An error occurred, processing will be stopped: Error occured while trying to connect to the database
2014/11/18 23:34:40 - 表輸出.0 - ERROR (version 3.0.4, build 53 from 2008/06/24 18:14:00) : Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor The Connection descriptor used by the client was:127.0.0.1:1521:orc
大概意思:監聽由於下面的錯誤拒絕了連接:TNS(oracle 服務端和客戶端通信協議)監聽不知道當前的sid(數據庫的唯一標示),這個sid在連接描述器中給出,使用這個描述器的客戶端是127.0.0.1:1521:orc
4 端口號不正確
運行後:
日誌情況:
錯誤與ip地址不準確一樣:
5 用戶名或密碼錯誤
運行後:
用戶名或者密碼錯誤,日誌信息都是如下:
大概意思是:無效的用戶名或密碼,登陸被拒絕
6 運行服務器沒有權限訪問遠程數據庫
從運行服務器ping 遠程數據庫機器ip:
從運行服務器telnet 遠程數據庫端口:
都是通的,但是表輸出是這個 的腳本會報錯:
運行後:
logon rejected 拒絕登陸。運行腳本的機器沒有訪問數據庫的權限導致此錯誤。
在這裏 是表輸出的數據庫 設置了黑白名單 而運行服務器不在它的白名單裏 導致此錯誤
3 總結
遇到類似的此類錯誤,需要淡定仔細的觀察日誌,使用排除法,才能快速的定位並解決掉問題。