ASP.NET連接Oracle的四個常見問題
ASP.NET連接Oracle問題1:System.Exception: System.Data.OracleClient requires Oracle client software version 8.1.7 or greater
原因:NTFS權(quán)限問題,在ORACLE9I時總是遇到
解決方法:
1、以管理員的用戶登錄;
2、找到ORACLE_HOME文件夾(我的是C:\oracle\ora92),點(diǎn)右鍵,選屬性--安全,在組或用戶欄中選“Authenticated Users”,在下面權(quán)限列表中把“讀取和運(yùn)行”的權(quán)限去掉,再按應(yīng)用;重新選上“讀取和運(yùn)行”權(quán)限,點(diǎn)擊應(yīng)用;選權(quán)限框下面的“高級”按鈕,確認(rèn)“Authenticated Users”后面的應(yīng)用于是“該文件夾、子文件夾及文件”,按確定把權(quán)限的更改應(yīng)用于該文件夾;
3、重新啟動計(jì)算機(jī),讓權(quán)限設(shè)置生效(請注意,這一步很重要);
4、登錄后運(yùn)行asp.net應(yīng)用,正常取得Oracle數(shù)據(jù)庫的數(shù)據(jù)。
ASP.NET連接Oracle問題2:ORA-12560: TNS: 協(xié)議適配器錯誤
解決方法:
①.檢查Terminal Service, 遠(yuǎn)程桌面是不是起因
②.環(huán)境變量set oracle_sid=需要的服務(wù)名
③.listener.ora, tnsnames.ora等內(nèi)機(jī)器名或者IP地址是否正確
④.netstat -a檢查端口是否被占用
⑤.檢查注冊表HKEY_LOCAL_MACHINE\Software\Oracle\Home0新增字符串USE_SHARED_SOCKET =True
ASP.NET連接Oracle問題3:ORA-12571、ORA-03113、ORA-03114、ORA-01041
特征:客戶端(代理或應(yīng)用服務(wù)器)有時報這類斷連錯誤
原因:如果偶爾出現(xiàn)一次,則可能為網(wǎng)絡(luò)原因或用戶異常中止,如果經(jīng)常出現(xiàn)則為客戶端與服務(wù)端的字符集不一致。
措施:如果偶爾出現(xiàn),可在服務(wù)端的協(xié)議配置文件PROTOCOL.ORA中增加一行TCP.NODELAY=YES;
如果經(jīng)常出現(xiàn),則為客戶端與服務(wù)端字符集不一致或網(wǎng)絡(luò)原因。
客戶端的字符集在注冊表里定義:
HKEY__LOCAL__MACHINE/SOFTWARE/ORACLE/NLS__LANG
在客戶端注冊表中的TCP參數(shù)項(xiàng)中設(shè)置:
TCPMAXDATARETRANSMITIONS=20。
ASP.NET連接Oracle問題4:使用VS.NET鏈接Oracle時報錯:
ORA-03114: not connected to Oracle
解決方法:
在打了下面的補(bǔ)丁后,問題依舊:
FIX: A pooled connection is not disposed by Microsoft .NET Managed Provider for Oracle when an exception occurs
http://support.microsoft.com/default.aspx?scid=kb;en-us;830173
產(chǎn)生該原因是ADO.NET將一個無效的Oracle連接放回了連接池,當(dāng)下一次使用時就會產(chǎn)生問題。所以解決方法是禁用連接池。禁用連接池的方法是在連接字符串中將pooling 設(shè)為false。
最后,通過禁用連接池并在每次session開始的時候關(guān)閉連接然后重新建立解決了問題。
問題由于oracle重啟或者連接中斷而ADO.Net仍然未釋放連接所致,解決方法是通過禁用OracleClient的Pooling,禁用方法是在連接字符串中加上Pooling=false.
另外,據(jù)了解,Sql Server重啟也會引起Asp.Net類似的問題,如果使用SqlClient,也可以用同樣的方法禁用Pooling.若是OLEDB的連接方式,則在連接字符串中加上OLE DB Services=-4;來禁用Connection Pool.
【編輯推薦】