ora-01000的處理思路

kakaxi9521發表於2017-07-31
今天有開發的同學發過來一個問題,在執行程式的時候報ora-01000錯,所以研究了下。
從網上找了些帖子看了下,連結:
http://blog.csdn.net/msdnchina/article/details/49755025

從某種程度上說,ora-01000 是會阻塞業務的,應該是某個session 開啟的cursor數量超過了open_cursors之後,該session 就無法對外提供服務了。

摘自:
IF: How to Find SQLs Causing ORA-1000 (文件 ID 2014381.1)

1.使用如下sql檢查當前各個session的open cursor情況:

SELECT s.sid, s.serial#, s.username, a.value "OPEN CURSOR COUNT"   
FROM v$sesstat a, v$statname b, v$session s   
WHERE a.statistic# = b.statistic#   
AND s.sid=a.sid AND b.name = 'opened cursors current'   
AND s.username IS NOT NULL  
ORDER BY a.value desc;

2. 檢查可疑session的open cursor情況,從上一步獲得 open cursor高的sid,帶入下面的sql。
SELECT sid ,sql_text, user_name, count(*) as "OPEN CURSORS"   
FROM v$open_cursor   
WHERE sid IN ($SID)   
GROUP BY sid ,sql_text, user_name;

注意,如上指令碼只能看current的的情況,不能分析已經過去的時間段(比如昨天早上)的資料庫的情況。因為v$open_cursor沒有對應的dba_hist檢視


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/21374452/viewspace-2142857/,如需轉載,請註明出處,否則將追究法律責任。

相關文章