没有必胜的秘籍,没有方程式遵循~~
要赢~~只有全身心的投入!
晶晶实验二十一:一个简单4031例子的引申:
上一篇 /
下一篇 2008-03-26 07:51:47
/ 个人分类:晶晶oracle实验系列
查看( 880 ) /
评论( 32 )
一个简单4031例子的引申:
w2rV"cSq-\%ap-U0
ITPUB个人空间(p.S.b`:AI9W
内存,像来是兵家必争之地。内存,像来也是一个注定要多事的地方。内存的管理,稍有不甚,即会内存泄露。就算不泄露,如果应用大量占用内存而不释放,再大也嫌少的内存将会迅速告磬。在Oracle中,常用的内存组件中,最容易出问题的,就是共享池了。共享池内存不足后,会报出一个ORA-04031错误,下面就处理这个错误方面的问题,说一下简单的例子,请ITPUB中的坛友补充。
2e)|3p7_R0
ITPUB个人空间A/x1i&DL.?s-^ c
开发人员说在测试环境中,有一个应用运行后不久就会报出4031错误,因为是9.2.0.1的系统,我设置了如下参数:
+w
\d \]0
alter system set events '4031 trace name errorstack level 3';ITPUB个人空间']H{]-x?.Akr0M
ITPUB个人空间,l wN
O7a0INGf%P
又运行一遍应用。果然,运行不久后,又报出了4031错误,查看DUMP文件,报出错误的语句是:ITPUB个人空间]1And z
R?~,H)l"A8c)^{0
select id from t3 where myid=XXXX
}-c;TExtf0
ITPUB个人空间^)b`4c(@3H
iB.T2S
并且,在DUMP文件中发现大量select COL from TABLE where COL=1、select COL from TABLE where COL=2,直到COL=XXXX的语句,至此,这例4031错误已经真相大白,开发人员没有使用绑定变量,并且打开的游标没有关闭。打开源代码看了一下,果然有一段循环不停的打开游标、执行查询,好,错误的原因到此,水落石出。开发人员说,一开始先报了一个01000,超出游标数,他将open_cursor设为6000后,就报出了4031错误。ITPUB个人空间H c7t'i](LQ(~
*t3U"sA S$f*W0
这是一个非常简单的例子,下面我来模拟一下:ITPUB个人空间/f0u
J/ISu8q+P
步1:修改打开游标数:ITPUB个人空间N;PmXD ]j"Px+^
Z6Ql
alter system set open_cursors=5000;ITPUB个人空间%A1V#V!W}r
L5n(u"YpO1V0
步2:跟踪错误堆栈:
s@S[]-T;Me0
alter system set events '4031 trace name errorstack level 3';ITPUB个人空间 N$vj'W C&UaI1Z2W
E
ITPUB个人空间1zhD!?3K$l&dN5Lz
步3:执行下如下ITPUB个人空间9x*g$~Po;C
declare
;o/p.C'K&`#Nj]HR0
msql varchar2(500);ITPUB个人空间#t H;w2|'g
}+G
mcur number;