1. 程式人生 > >遠端主機強迫關閉了一個現有的連線;通訊連結失敗;sde入庫程式。

遠端主機強迫關閉了一個現有的連線;通訊連結失敗;sde入庫程式。

我有個ArcGIS,sde庫的程式,我用排程每隔幾分鐘就會對sde庫匯入資料,剛開始執行的時候沒問題,資料可以成功匯入。但過一段時間就會報錯:

先是(訪問 DBMS 伺服器失敗 [08S01:[Microsoft][SQL Server Native Client 11.0]TCP 提供程式: 遠端主機強迫關閉了一個現有的連線。)

接下來就一直是這個(訪問 DBMS 伺服器失敗 [[Microsoft][SQL Server Native Client 11.0]通訊連結失敗] [ArcSDE.sde.GDB_Items];
最後的處理方式:
             1、對所有沒有關閉資料庫連線的地方添加了關閉連線語句。
             2、對sde庫進行操作中,對工作空間判斷為空的,進行資源釋放。
             3、縮短排程的週期,2到3分鐘一排程。        
             4、對查詢資料庫時新增一些沒有判空影響程式進行的部分加條件語句。


我剛開始的時候是以為排程間隔太短,多執行緒序訪問資料庫,導致遠端主機強迫關閉連線。但後來發現把排程間隔越延長,遠端主機強迫關閉連線更快了,程式執行時段更短,我百思不得其解,後來把排程的週期縮短到2到3分鐘後,竟然可以長時間運行了,應該是由於排程時間過長時,連線處於長時間的空閒狀態,導致遠端主機關閉了這個不活躍的連線。

後來查詢資料發現:

如上圖所示,原來sql server為了節省記憶體的開銷,在連線空閒時間超過固定時間後,就會自動關閉。