DBA與專案的那堆事 3 開發之 游標顧頭不顧尾

2021-12-29 23:01:17 字數 1854 閱讀 7539

不知有人碰到過這種情況沒,程式執行一段時間後,報ora-01000: 超出開啟游標的最大數。

這種情況很大可能是開發在寫程式時,對游標誤用或沒有注意引起。

如有可能在乙個迴圈中,在開啟游標後,並沒有即時或沒有關閉游標,很容易就出現這種問題了,這時一定要讓開發記得,有始要有終 ,游標要記得即時關閉。

另一種比較小的可能性是資源釋放沒有問題,確實是資料庫的最大游標數太小了.

具體分析下.

1. 檢視游標相關引數--檢視庫中每個session可開啟的最大游標數

show parameter open_cursors;

--pl/sql 游標快取記憶體

--快取記憶體可以避免使用者再次執行語句時重新進行語法分析。這個值設定得足夠高, 可以防止應用程式耗盡開啟的游標。

show parameter session_cached_cursors;2.統計庫當前庫游標使用情況-- 輸入指定使用者名稱查詢,要查全部可輸入'%'

select o.sid, s.osuser, s.machine, count(*) num_curs

from v$open_cursor o, v$session s

where o.sid=s.sid

and o.user_name like '&1'

group by o.sid, osuser, machine

order by num_curs desc;3. 對懷疑的sid檢視其具體的sql情況select o.sid,q.sql_text

from v$open_cursor o, v$sql q

where q.hash_value =o.hash_value

and o.sid = 158;上面是分步說明,為了省事,下面把它們合成一條語句了.with cso as

( select o.sid, s.osuser, s.machine, count(*) num_curs

from v$open_cursor o, v$session s

where o.sid=s.sid

and o.user_name like '&1'

group by o.sid, osuser, machine

) select o.sid,q.sql_text

from v$open_cursor o, v$sql q

where q.hash_value=o.hash_value and o.sid = (

select sid from cso where num_curs =

(select max(num_curs) from cso)

) ;解決方法:

如確實是資料庫的session最大游標數太小了--1.加大open_cursors引數

alter system set open_cursors=1000 scope=both;

--2.加大標快取記憶體數

alter session set session_cached_cursors=100;

-- 附上一條sql,可查指定sid的當前游標引數使用情況

select sid,n.name,s.value used

from

sys.v_$statname n,

sys.v_$sesstat s

where s.statistic# = n.statistic#

and n.name in ('opened cursors current', 'session cursor cache count')

and sid= sid號

如由程式引起. 由具體sql排查相關程式,找到責任人,小小k他一頓. 嘿嘿.

mail:[email protected]

blog:

DBA參與開發專案的意義

1.為什麼dba 要了解業務需求 dba 了解業務需求後會給專案代來哪些建議?dba 了解業務需求後 就明白了業務流程 熟悉了業務流程就清楚了資料的流向 然後就可以站在資料的角度來分析資料變化的情況 如資料增長情況 資料分布情況 是否有特殊性資料等 有了以上這些分析 dba 就可以更好的配合開發同事...

與JAVA專案的融合

protected abstractpacfileparser loadscriptparser file script throws exception log.info importerservice 載入groovy指令碼 script return abstractpacfileparser...

產品與專案的區別

產品經理 靠想,是在想著怎麼做正確的事,能否給公司帶來利潤,目標是否正確,是否符合市場的需要。專案經理 靠做,是如何把事情做好做正確,在時間 成本 資源有限的情況下高效的完成目標。1 目標不同 產品的目標是解決一件事,或是滿足使用者的需求。專案的目標是在規則的時間內利用有限的資源高質量的完成這個使用...