經過不斷嘗試,發現:
如果是更新該錶的主key,就會發生發生ora-01000錯誤;
如果是更新該錶的其他字段,並不會發生ora-01000錯誤;
如果要刪除該錶的資料,就會發生ora-01000錯誤;
如果向該錶插入資料,並不會發生ora-01000錯誤;
檢查資料庫的open_cursors,發現open_cursors只有50
而指向該錶的外來鍵共有101個
將open_cursors修改為104後,更新及刪除的問題全部解決。
alter system set open_cursors=104 scope=both;
猜想原因:
由於其他表的外來鍵指向該錶,所以在刪除該錶資料或修改該錶的主key時,oracle將會檢查新資料是否符合外來鍵要求。
每個外來鍵都將開啟乙個新的游標,如果open_cursors值太小,就會發生ora-01000錯誤。
至於為什麼指向該錶的外來鍵有101個,而open_cursors要設定為104才能正常執行,也許是oracle本身也要占用幾個游標吧
關於「ORA 01000 超出開啟游標的最大數」
當我們需要查詢資料庫,並且返回的結果集有多條記錄時,如何一條條的定位讀取記錄呢?這時候就需要游標了。oracle中所謂的游標,用來標記當前所指向的位置,預設是在第一條記錄之前,rs.next,就下移一位,一直到最後一條記錄之後。資料庫的連線一般都會占用一定的資源,如何保證連線的速度以及系統的效率,實...
ORA 01000案例分析,游標超限
最近做櫃檯開發,自己通過c ocilib執行 oracle資料庫的儲存過程,獲取分頁表資訊,儲存過程如下 create or replace procedure p rm paging query p pagesql in varchar2,sql p curpage in out number 當...
關於回滾段導致的ORA 01555錯誤
在1點鐘,有個使用者a發出了select from table1 此時不管將來table1怎麼變化,正確的結果應該是使用者a會看到在1點鐘這個時刻的內容。這個是沒有疑問的。在1點30分,有個使用者b執行了update命令,更新了table1表中的第4000萬行的這條記錄,這時,使用者a的全表掃瞄還沒...