원인 : 해당 에러는 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 |
댓글