代碼訪問Oracle,出現ORA-01000超出開啟遊標的最大數 錯誤之解決方案

來源:互聯網
上載者:User

前天一同事在從excel中大量匯入資料時,出現 ORA-01000 的錯誤。

網上google了下,有類似現象出現過,是Java代碼訪問oracle時出現的,而我們用的是c#,應該原因是一樣的。

Java情景如下(虛擬碼描述):

1、建立Connection,建立Transaction

2、迴圈建立Statement,附sql,執行Statement

3、事務Commit,Conn關閉釋放

 

C#情景如下(虛擬碼描述):

1、建立Connection,建立Transaction

2、迴圈建立Commander,附sql,執行Commander

3、事務Commit,Conn關閉釋放

  

 但結果都出現如題錯誤,當多大量操作時。

看下遊標的預設串連數:show paramenter cursor , 300

而我們同事執行大量匯入的執行次數也是在>300時出錯。 由此可斷定與cursor的設定有關。

解決方案:

1、增大預設cursor數量(但很別動)

2、程式碼中解決。

分析:上述情境代碼中,迴圈體中的Statement和Commander對象,都是每次建立的。難道是這個引起的:每次迴圈後就該被回收(.NET&JAVA都可自動回收對象),但因為GC來不及處理,導致來不及釋放,而導致cursor超過預設限制數?

嘗試:迴圈體中每次都手動關閉Statement和Commander對象。 結果錯誤不在...

原因:果真是我們想象的那樣,一個Statement/Commander也即對應一個Connection上的一個cursor。

解決方案:那就很簡單了,既然知道這個原因。恩,每次迴圈體中關閉Statement/Commander,或者在迴圈體外聲明此對象,迴圈體內進行sql的賦值即可解決該問題。 ^_^  

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.