系統運行一段時間後拋出 ORA-01000: maximum open cursors exceeded 錯誤,導致應用程式無法繼續執行資料庫操作。
以 SQL*Plus 連線資料庫,執行:
SHOW PARAMETER open_cursors;
若未曾調整,預設值通常為 300。
執行下列查詢,找出佔用游標最多的 Session:
SELECT o.sid, osuser, machine, COUNT(*) AS num_curs
FROM v$open_cursor o, v$session s
WHERE o.sid = s.sid
GROUP BY o.sid, osuser, machine
ORDER BY num_curs DESC;
結果極大機率會顯示某些 Session 的游標數已超過 300。
依據業務需求調整參數(需具備 ALTER SYSTEM 權限):
ALTER SYSTEM SET open_cursors = 2000 SCOPE = BOTH;
修改後再次查詢參數確認生效,隨後重新執行應用程式即可恢復正常。