|
|
|
| [일반] 오라클 8i ORA-00604 ,ORA-04031 에러 처리 |
|
| 호석 님께서 쓴 글입니다 - 211.♡.74.31 |
읽음:7058 |
|
|
ERROR:
ORA-00604: error occurred at recursive SQL level 2
ORA-04031: unable to allocate 4048 bytes of shared memory ("shared
pool","TRIGGER$SYS","sga heap","state objects")
ORA-00604: error occurred at recursive SQL level 1
ORA-04031: unable to allocate 4048 bytes of shared memory ("shared
pool","unknown object","sga heap","state objects")
오라클 817의 버그라는 군여
그래서 패치를 해야 한답니다...
아니면.. 파라미터에
_db_handles_cached = 0
을 추가해 주면 해결된다는데요...
*************************************************************************************************************************
ORA-04031 에러 - 2 ORACLE
2004/12/20 17:05
http://blog.naver.com/simonkbj/40008950855
오늘 이 에러땜에 고생했다.(2004년 12월 20일)
에러 원인은 아래로 짐작된다.
--> BUG 1397603: ORA-4031 / SGA memory leak of PERMANENT memory occurs for buffer handles. (Workaround: _db_handles_cached=0, Fixed: 8172, 901 )
sga_pool_size는 196MB 였으나, 에러시 상황은 shared pool free memory가 10,056,464였고
shared pool miscellaneous은 182,395,936로 free Memory 부족으로 ORA-04031: unable to allocate 4064 bytes of ... 의 에러가 계속 해서 나고 있었다. 결국 Oracle Restart로 일단 상황은 해결했으나 patch 를 하지않는 이상 한달 정도 후에 같은 에러가 다시 날것으로 예상된다. shared pool miscellaneous 가 계속해서 증가 하고 있는 상황이다. 다음 에러시 _db_handles_cached=0 옵션을 적용해 볼 예정이다. T.T (폭탄을 들고 가야하나...)
아래는 ORA-04031에러에 대한 내용
출처 : http://oracle.mania.co.kr/board/content.asp?code=tuning&number=2&page=1&ref=2&startpage=1
----------------------------------------------------------------------------------------
linux든 aix든
oracle 8.1.7에서
간혹 ORA-04031 이란 error를 접했을 수 있습니다.
+++++++++++++++++++++++++++++++++
ORA-04031: unable to allocate 4096 bytes of shared
memory ("shared pool","....
Error accessing package DBMS_APPLICATION_INFO
ERROR:
ORA-04031: unable to allocate 4096 bytes of shared
memory ("shared pool","BEGIN ....
+++++++++++++++++++++++++++++++++
이런 경우에 몇가지 검토해 봐야 합니다.
정말로 shared_pool size가 작은 것인지....
작지 않은데도 이런 문제가 발생한다면
이는 oracle 자체의 bug으로 보셔야 합니다.
즉 8.대에서 8i로 넘어가면서 block handle 방식이 바뀌면서
8i에서는 sh쪽에서 사용한 block을 release시키지 않는
오류가 있어서 부족하다는 메세지가 나오게 됩니다.
이를 위해선
최소 8.1.7.2 로 patch를 적용하는게 제일 좋고,
이게 무리수라면
_db_handles_cached=0
를 이용하면 block handle방식을 8.대의 방식으로 전환하는
것으로 이해하면 됩니다만 release문제를 해결할수 있습니다.
이로 인한 성능 저하는 아직 보고된바 없다고 합니다.
저는 linux에서 2001년도에 발생해 적용해서
아직 재부팅 한번만 할 정도로 안정적으로 운영하고 있고
오늘 aix에서도 발생하여 적용했습니다.
************************************************************************************
ORA-04031 에러 : 메모리 단편화 | [Q&A]데이터베이스 2005.09.21 11:56
do82ng http://cafe.naver.com/dbaclub/4
ERROR:
ORA-00604: error occurred at recursive SQL level 2
ORA-04031: unable to allocate 4048 bytes of shared memory ("shared
pool","TRIGGER$SYS","sga heap","state objects")
ORA-00604: error occurred at recursive SQL level 1
ORA-04031: unable to allocate 4048 bytes of shared memory ("shared
pool","unknown object","sga heap","state objects")
DB를 관리하면서 다음과 같은 에러를 직면할때가 있느데 이럴 경우에는 신속하게
대처할 수 있는 방법
1. 오래된 세션을 끊어서 shared pool 에 잡고 있는 메모리를 해제 시켜준다.
2. alter system flush shared_pool; 명령어를 통해 메모리 조각모임을 해준다.
장기적인 대책은
단편화 시키는 SQL를 찾아내고 바인딩 변수화 시킨다.
ORA-04031 의 경우 shared pool 내에 메모리 조각화에 따라서 연속된 parsing 공간을 제공하지 못하기 때문에 발생하는 에러입니다.
다시 말해서 parsing 에러가 발생하는 것입니다.
이를 해소 해주기 위한 방법으로
개체가 큰 자주 사용되는 프로시져등을 메모리에 pined 해주면 되며,
shared pool 사이즈를 늘려 주는것이 가장 좋으며,
상황이 여의치 않는 경우 단편화된 shared pool 의 조각화을 다시 flush 해주는 방법
등이 있습니다.
SQL> alter system flush shared_pool;
shared pool 의 hit 율을 잘 분석해 보시고 오라클의 권장사항에 따라서 튜닝 가이드 라인을 정하는게 중요합니다.
너무 크게 줘서 free size 가 너무 많이 남는 경우 즉 hit 율은 좋은데, free size 가 너무 큰 경우는 메모리 낭비를 하게 되며, 각각의 o/s 에 따라서 paging 이나 swap 이 발생할 가능성이 있으니, 튜닝후 적적할 모니터를 통해서 사이즈를 잡아 가는 것이 좋습니다.
SQL> select name, bytes/1024/1024 "Size in MB" from v$sgastat where name='free memory';
NAME Size in MB
-------------------------- ----------
free memory 451.496498
free memory .5859375
free memory .03125
즉 오라클의 동적 뷰들의 대부분은 current 한 내용이 아닌 축적용으로 평균치를 나타 내기 때문에 의미가 없습니다.
|
|
|

|
|
|