1. 程式人生 > >C#程式碼連線Oracle資料庫一段時間以後[connection lost contact]的問題

C#程式碼連線Oracle資料庫一段時間以後[connection lost contact]的問題

最近在使用C#程式碼連線Oracle資料庫,分為兩部分,WCF的客戶端與服務端。程式啟動與執行都沒有問題,部署到伺服器上後,執行也沒有問題。但是第二天再訪問的時候,就會丟擲下邊所示的異常。這是怎麼回事?

  1. Oracle.DataAccess.Client.OracleException ORA-03135: connection lost contact  
  2.     Process ID: 22574  
  3.     Session ID: 799 Serial number: 43225    Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck)  
  4.        at Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)  
  5.        at Oracle.DataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)  
  6.        at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)  
相關的用於連線Oracle資料庫的程式碼也非常典型,沒有一點複雜。
  1. public DataSet ExcuteDataSetForOralce(string sql, CommandType type, List<OracleParameter> paras)  
  2.         {  
  3.             DataSet ds = new DataSet();  
  4.             OracleCommand cmd = null
    ;  
  5.             try
  6.             {  
  7.                 using (OracleConnection conn = new OracleConnection(ConnectionString))  
  8.                 {  
  9.                     using (cmd = new OracleCommand(sql, conn))  
  10.                     {  
  11.                         if (paras != null)  
  12.                         {  
  13.                             foreach (OracleParameter p in paras)  
  14.                             {  
  15.                                 cmd.Parameters.Add(p);  
  16.                             }  
  17.                         }  
  18.                         cmd.CommandType = type;  
  19.                         OracleDataAdapter oda = new OracleDataAdapter();  
  20.                         oda.SelectCommand = cmd;  
  21.                         conn.Open();  
  22.                         oda.Fill(ds, "tempTable");  
  23.                         conn.Close();  
  24.                     }  
  25.                 }  
  26.             }  
  27.             catch (Exception ex)  
  28.             {  
  29.                 log.Error("error", ex, LogType.Error);  
  30.             }  
  31.             return ds;  
  32.         }  

通過多方查詢,發現這並不是程式碼的問題。而且Provider與資料庫連線的問題。實際上,我們new一個連線的時候,是從資料庫連線池裡邊拿到的連線,這些連線放在.NET Provider裡邊。Conn.Close()並不是關閉了連線,而是把連線還給了連線池。

現在的問題是Oracle Provider的問題,而不是程式碼的問題。你的程式很久沒有跟資料庫互動了,資料庫伺服器端就把連線的Open狀態關了,但是Provider沒有及時處理,依然給了C#程式碼用,所以就丟擲了這個異常。

解決辦法就是,不使用連線池,每次直接連資料庫,雖然不會出現這個問題,但是會有效能上的損失。

在app.config的配置檔案中,在DataSource=((Description...)這個字串中,加入不使用連線池。

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=1521)))(CONNECT_DATA =(SERVICE_NAME=xxx)(SERVER = DEDICATED)));User ID=xxx;password=xxxxx;Pooling=false

相關推薦

C#程式碼連線Oracle資料庫時間以後[connection lost contact]的問題

最近在使用C#程式碼連線Oracle資料庫,分為兩部分,WCF的客戶端與服務端。程式啟動與執行都沒有問題,部署到伺服器上後,執行也沒有問題。但是第二天再訪問的時候,就會丟擲下邊所示的異常。這是怎麼回事?Oracle.DataAccess.Client.OracleExcept

Can't connect to host ' ' 由於連線方在時間後沒有正確答覆或連線的主機沒有響應

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

scrapy_由於連線方在時間後沒有正確答覆或連線的主機沒有反應,連線嘗試失敗。錯誤及解決

問題描述: 在使用scrapy的middleware使用ip代理的時候,也給代理添加了"https://"或者"http://", 但還是報錯了(之前還是好好的) 報錯如下: 2019-01-05 21:46:44 [scrapy.downloadermiddlewares.retry]

ASP.NET(C#) VS2010連線Oracle資料庫

    首先介紹個人環境:win7 + VS2010 + Oracle 11g Client (注意:我這裡只是安裝的client,如果安裝了整個資料庫也是可以的)  。     正題:    一.

Linux解決:svn: Can't connect to host '*.*.*.*': 由於連線方在時間後沒有正確答覆或連線

svn服務啟動了,在伺服器上可以使用命令把檔案檢出,但是其他電腦上就無法檢出,一直提示: "svn: Can't connect to host '*.*.*.*': 由於連線方在一段時間後沒有正確答

Asp.net+Mysql,查詢出錯:由於連線方在時間後沒有正確答覆或連線的主機沒有反應,連線嘗試失敗

在網上看到的解決方案基本都是說host檔案中127.0.0.1 localhost 的對應, 但我查看了host檔案,並沒有問題,糾結半天,拿查詢語句在Mysql Workbench上執行,報了一個錯,說是子查詢包含多個結果,我去~!這很簡單的一個錯誤asp.net竟然沒能

openvpn記住使用者名稱和密碼,自動連線,避免隔時間自動斷開的方法

openvpn記住使用者名稱和密碼,自動連線 1, 開啟openvpn安裝目錄 2, 在config目錄中, 找到VPN伺服器的配置檔案, 我的是222.ovpn, 記事本開啟, 可能的配

unable to connect to 192.168.3.193:5555: cannot connect to 192.168.3.193:5555: 由於連線方在時間後沒有正確答覆或連線

概述 最近在開發自動售貨機的專案,客戶老是一會兒拿個十寸屏Android 4.0的機子來,一會兒拿個6寸屏Android5.0的機子來,由於開發這個專案需要除錯,而且安卓平板又放在距離電腦遠的地方,連線usb除錯起來不太方便,所以只能採取使用wifi進行連

由於目標計算機積極拒絕,無法連線。由於連線方在時間後沒有正確答覆或連線的主機沒有反應,連線嘗試失敗。 python爬蟲

採用爬蟲下載視訊,更換下載連結後,程式意外報錯,如下: Failed to establish a new connection: [WinError 10061] 由於目標計算機積極拒絕,無法連線。

用Navicat連線Oracle資料庫時報錯ORA-28547:connection to server failed, probable Oracle Net admin error

  用Navicat連線Oracle資料庫時出現如下錯誤     上網一查原來是oci.dll版本不對。因為Navicat是通過Oracle客戶端連線Oracle伺服器的,Oracle的客戶端分為兩種,一種是標準版,一種是簡潔版,即Oracle Install Clie

解決oracle連線時間就斷連的問題

(1) SQL>show parameter resource_limit; 如果為FALSE,則將其修改為TRUE,否則配置不會生效: SQL>alter system set resource_limit=true; (2) 建立一個新的profile檔案: SQL>create pro

客戶端時間不訪問,第一次訪問資料庫自動斷開連線,重新整理可以正常連線

資料庫應用開發過程中,我們可能會遇到一個問題:應用使用了資料庫連線池,每經過指定時間後,發出到資料庫伺服器的任何請求都會失敗,而且有且僅有一次失敗,之後的正常訪問都沒有問題。尤其是在Web應用中,如果晚上時段沒有訪問,而第二天第一個訪客的經歷就是碰到一個數據庫訪問錯誤,如果開發系統的程式設計師沒有注意這個問

解決終端SSH連線伺服器時間不操作之後卡死的問題

  卡死是因為LIUNX安全設定問題,在一段時間內沒有使用資料的情況下會自動斷開,解決方法就是讓本地或者伺服器隔一段時間傳送一個請求給對方即可   在本地開啟配置檔案(不建議在server端設定) 1 sudo vim /etc/ssh/ssh_config   新增以下引數,如果有直接修改

次jdbc連線oracle資料庫佔用CPU過高的問題排查

    背景:     公司有一個通訊系統,主要是通訊資料到客戶端程式所指定的資料庫,目前支援sqlserver、mysql和oracle三種類型的資料庫,此篇主要記錄一次oracle資料庫佔用CPU飆高的問題。   &nbs

Oracle資料庫,當前時間轉為星期的語句和查詢某欄位轉為星期顯示的種方法。

1、當前時間的星期 select to_char(sysdate,'day') from  dual  ;   2、指定欄位的星期 select decode (substr(to_char(t.欄位,'d','NLS_DATE_LANGUAGE

阿里雲ECS進行ssh時,時間不操作就自動斷開連線的解決方法

vim /etc/ssh/sshd_config 找到以下兩項配置 #ClientAliveInterval 0 #ClientAliveCountMax 3 修改為 ClientAliveInterval 30 ClientAliveCountMax 86400

MySql 資料庫中sql語句取時間的每天的最後

使用場景: 使用者每天都有上報資料,後臺需要檢視某個使用者近期一段時間內每天的資料走勢。於是需要查詢該使用者在這段時間內每天最後上報的那條資料。 程式碼如下: SELECT * FR

C#連線Oracle資料庫(直接引用dll使用),查詢資料

    首先,下載Oracle.ManagedDataAccess.dll將其放到自己的專案中,然後引用。程式碼如下:      static void Main(string[] args)     &

c++中如何讓程式等待時間

標頭檔案ctime(早期為time.h檔案)提供瞭解決該問題的方案。 CLOCKS_PER_SEC    //ctime中定義的常量,等於每秒鐘包含的系統時間單位數。 clock()                             //c++庫中定義的函式,其返回程

阿里雲伺服器ssh連線,客戶端時間沒響應就斷掉的解決辦法

1.開啟配置檔案 vim /etc/ssh/sshd_config 2.找到下面兩行 #ClientAliveInterval 0 #ClientAliveCountMax 3 去掉註釋,並修改 ClientAliveInterval 30 //客戶端每隔多少秒向服務