萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> oracle教程 >> Oracle的ORA-00604錯誤案例學習

Oracle的ORA-00604錯誤案例學習

ORA-00604 error occurred at recursive SQL level string

Cause:An error occurred while processing a recursive SQL statement (a statement applying to internal dictionary tables).

Action:If the situation described in the next error on the stack can be corrected, do so; otherwise contact Oracle Customer Support.

ORA-00604: 遞歸某個SQL 層時出現錯誤

原因:在運行一條遞歸SQL語句(該語句將應用於對內部表或數據字典的操作)時,發生錯誤。

方案:如果上述描述的錯誤所在棧可以被修復,則修復並繼續運行;否則,請聯系Oracle客服。當然,那是Oracle官方的解決辦法。我曾經記得有個高手總結了關於ORA-00604/ORA-04031問題的解決:

修改INIT.ora

添加

_db_handles_cached = 0

並重新啟動數據庫.

分析:ORA-00604這個信息表明,在數據庫執行內部SQL語句時,發生了錯誤。比如,要往表中插入一行數據,但沒有可擴展的空間。ORACLE於是去查尋,哪兒可以建立下一個擴展空間,它有多大小,但沒有成功。一般在發生ORA-00604錯誤時,還伴隨著其它的錯誤,例如:ORA-1547等。

首先,應當檢查警告文件alertSID.log,查找有關ORA-600類的信息。

該錯誤最常見的原因是數據庫文件initSID.ora中的參數OPEN_CURSORS值太小。可以修改initSID.ora文件,OPEN_CURSORS的值一般為255。修改完後,宕下ORACLE,再重新啟動。

還可以設置並啟動數據庫的事件跟蹤功能。在initSID.ora中加上一行:

event = "00604 trace name errorstack"

宕下並重新啟動ORACLE,使這個事件跟蹤參數起作用。這樣,當再發生ORA-604錯誤時,有關信息就保存在TRACE文件中。

造成ORA-604錯誤的其它原因可能有:

- initSID.ora中,參數DC_FREE_EXTENTS或ROW_CACHE_ENQUEUES太低。可以根據操作系統和數據庫的情況,適當增加這兩個參數的值,宕下並重新啟動ORACLE。

- 運行超出空間(伴隨ORA-1547錯誤)。這時,要對表空間添加新文件,即增加表空間的大小。

- 達到了MAX_EXTENTS(伴隨ORA-1556錯誤)。如果這樣,就要修改表,允許更多的擴展。請從技術手冊中查找MAX_EXTENTS的最大值。如果已經達到了最大值,必須用compress extents選項,把表卸出(export),再導入(import)數據庫中。

案例一:Oracle執行遞歸查詢的時候出錯

問題描述:我經常遇到ORA-00604 和ORA-01000(開啟游標數量達到最大值)錯誤。然而,當我檢查代碼的時候,所有的結果集和語句對象都在最後的塊中關閉了(我使用的是JDBC)。我執行的查詢是一個Oracle遞歸查詢(以這個開始並通過這個連接)。您能告訴我是哪裡出現了問題,以及在什麼樣的情況下會出現上述的錯誤嗎?

解決方案:可能是init.ora 文件中的open_cursors 參數值的設置太低了。這個參數的默認值是非常低的(50)。它應該設置為200或者更高。即使是你關閉了結果集,但是你並沒有在JAVA代碼中關閉SQL語句,就會導致這個問題。

如果設置為yes的話,那麼確保你的活動連接池啟用了(為了性能的原因),否則設置為no。

請你的數據庫管理員監視數據庫,並看看使用V$OPEN_CURSORS 和 V$SYSSTAT數據字典視圖的條目。

  • 共4頁:
  • 上一頁
  • 1
  • 2
  • 3
  • 4
  • 下一頁
copyright © 萬盛學電腦網 all rights reserved