問題描述:
用ASP.net基於oracle寫的BS web應用程序,出現一個困擾很久的問題,就是過一段時間就會莫名其妙地出現無法連接數據庫的問題。可是直接通過sqlplus本地連接又是可以的。只能是重啓oracle開頭的所有服務,連接成功。
查找原因:
剛開始以爲是程序的問題,數據庫開了沒關,查找了很久也沒有找到。又以爲是iis的問題,重啓iis、設置連接數、配置連接池什麼的都不行。後來偶然發現是因爲服務器重啓導致的,每次重啓之後就發現網站無法連接的問題,有幾次試着重啓tnslisener監聽,發現問題解決。上網發貼問了好久,有個熱心人回答試着在listener.ora中加入靜態註冊。
於是在服務器重啓之後,利用命令lnsrctl status 查看監聽程序,果然是服務orcl沒有啓動。在listener.ora中加入靜態註冊之後,再重啓服務器連接正常。
解決方案:
listener.ora完整文件,黑體部分是後來新增的靜態註冊文件。
# listener.ora Network Configuration File: D:\app\Administrator\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
(GLOBAL_DBNAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.11.13)(PORT = 1521))
)
)
ADR_BASE_LISTENER = D:\app\Administrator
一些猜測:
我本機的配置是 win7 32位+oracle 11g,沒有出現這個問題。
服務器的配置是windows server 64位+oracle 11g 32 位,會出現這個問題,有可能是系統與數據庫版本兼容的問題?