본문 바로가기
Oracle/이벤트

ORA-04031 : unable to allocate 120 bytes of shared memory

by 취미툰 2021. 1. 19.
반응형

원인 : 해당 에러는 Oracle DB에 설정된 메모리보다 더 많은 메모리를 할당하려고 할 때 발생하는 에러입니다.

저의 케이스의 경우에는 Stream pool Size와 관련된 메모리 할당에서 에러가 발생하였습니다.

 

아래는 alert log에 찍힌 에러 원본입니다.

 ORA-04031: unable to allocate 120 bytes of shared memory ("streams pool","unknown object","streams pool","kod objects")

 

조치 : DB 재기동. 해당 에러가 발생하면 SQL로 작업하는게 불가능해지기 때문에 DB재기동하여 메모리를 flush하여 다시 할당 하는방법 밖에 없습니다. 하지만 추후에 이런 에러를 발생하는 것을 방지하는 방법은 있습니다.

그것은 Memory 할당을 늘려주는 것입니다. 

 

원인분석 : 

11.2.0.4 기준으로 원인 발견과 해결방법에 대해 정리하겠습니다.

 

alert log를 통해 현재 DB에 할당된 메모리를 확인할 수 있습니다.

 

Wed Jul 08 12:42:03 2020

Starting ORACLE instance (normal)

...생략

Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

...생략

  sga_max_size             = 2000M

...생략

  sga_target               = 2000M

...생략

  pga_aggregate_target     = 800M

 

alert log를 통해 확인한 내용은 SGA가 2000M 할당되어 있었습니다.

SGA_TARGET으로 파라미터가 설정되어있었으므로, 자동적으로 SGA의 pool들에게 메모리를 할당해주는데 에러 발생시의 메모리사용량은 다음과 같았습니다.

ora_n.trc 파일을 통해 에러 발생시 streams pool 사이즈 사용량을 알 수있었습니다.

---------------------------

TOP 10 MEMORY USES FOR STREAMS POOL

Grand total                         224 MB

 

위의 내용 확인 후 pfile에 아래의 내용을 추가하였습니다.

SGA_TARGET을 2000M -> 4000M로 두배 증가시켰고, STREAMS_POOL_SIZE 가 설정되어 있지 않았는데 512M로 설정을 추가하였습니다. 그리고 SHARED_POOL_SIZE도 4000M에 맞게 추가해주었습니다.

 

SGA_TARGET = 4000M

SHARED_POOL_SIZE=1.5G

STREAMS_POOL_SIZE=512M

 

pfile에 적용한 내용은 DB를 재기동해야 적용되기 때문에 추후에 재기동하여 적용시킬 예정입니다.

이슈 발생시 trc파일 사용법과 alert log 확인에 대해서 더 공부를 해야겠지만, 이번 케이스로 어떻게 분석하면 될지에 대한 케이스를 하나 배운것 같습니다.

 

 

반응형

'Oracle > 이벤트' 카테고리의 다른 글

[12c이상DB접속시도] Ora-28040,Ora-01017 해결  (2) 2021.06.08
ORA-00838,ORA-47500  (0) 2021.01.21
ACFS-9301,ACFS-9302  (0) 2020.11.09
TNS-12545,TNS-12560,TNS-00515  (0) 2020.01.14
TNS-12555: TNS:permission denied  (0) 2020.01.03

댓글