프린트 하기

OS환경 : Oracle Linux7.3(64bit)


DB 환경 : Oracle Database 12.2.0.1


에러 : 아래 메세지

버퍼 캐쉬 전체 캐싱 모드가 전체 캐싱 활성화에서 전체 캐싱 비활성화로 변경되었고
전체 DB 캐싱 사용 중지 : DEFAULT_CACHE_SIZE는 현재 크기보다 최소 1900MB 이상 커야한다는 메세지
1
2
3
2018-11-16T11:18:59.714173+09:00
Buffer Cache Full DB Caching mode changing from FULL CACHING ENABLED to FULL CACHING DISABLED 
Full DB Caching disabled: DEFAULT_CACHE_SIZE should be at least 1900 MBs bigger than current size.



해결 방법 : 강제 전체 데이터베이스 캐싱 모드 사용함 설정

오라클이 전체 데이터베이스 캐싱이 적절한 지 판단하기보다는 ALTER DATABASE 명령을 사용하여 강제로 결정할 수 있음

인스턴스에서 데이터베이스가 open 상태이면 오류 메세지가 나타남

1
2
3
4
5
ALTER DATABASE FORCE FULL DATABASE CACHING;
ALTER DATABASE FORCE FULL DATABASE CACHING
*
ERROR at line 1:
ORA-01126: database must be mounted in this instance and not open in any instance


데이터베이스 전체를 강제로 캐싱하기 위해

mount 상태로 startup 시킨 뒤 alter 명령으로 적용 후 open

1
2
3
4
5
SQL> CONN / AS SYSDBA
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE FORCE FULL DATABASE CACHING;
ALTER DATABASE OPEN;


그 후에 변경 사항이 V$DATABASE 뷰에 표시됨

1
2
3
4
5
SQL> SELECT force_full_db_caching FROM v$database;
 
FOR
---
YES



강제 전체 데이터베이스 캐싱 모드 사용 안 함 설정

mount 상태로 startup 시킨 뒤 alter 명령으로 적용 후 open

1
2
3
4
5
SQL> CONN / AS SYSDBA
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE NO FORCE FULL DATABASE CACHING;
ALTER DATABASE OPEN;

그 후에 변경 사항이 V$DATABASE 뷰에 표시됨

1
2
3
4
5
SQL> SELECT force_full_db_caching FROM v$database;
 
FOR
---
NO


주의 사항
- COMPATIBLE 파라미터는 12.0.0 이상으로 설정해야함
- AMM (MEMORY_TARGET) 또는 ASMM (SGA_TARGET)을 사용하는 경우 버퍼 캐시 크기가 변경되어 캐시가 너무 작아 전체 데이터베이스를 보유하지 못할 수 있음
메모리 매개 변수의 크기를 적절히 조정하거나 DB_CACH_SIZE매개 변수를 적절히 큰 값 으로 설정하여 버퍼 캐시의 최소 크기를 더 좋게 설정하는 것이 좋음
- 오브젝트의 선점 적로드는 없습니다. 대신 오브젝트는 액세스 될 때 캐시됨
- NOCACHE로 정의 된 LOB는 강제 전체 데이터베이스 캐시 모드가 사용 가능할 때 캐시 될 수 있습니다. 정상적인 달리기에서는 그렇지 않습니다.
- 다중 데이터베이스 옵션을 사용하는 경우 강제 전체 데이터베이스 캐시 모드를 CDB 및 모든 PDB에 적용합니다.
- 제어 파일을 복구해야하는 경우 강제로 전체 데이터베이스 캐시 모드가 계속 사용 가능한지 확인해야합니다.
자세한 내용은 다음을 참조하십시오.



원인 : 

정상적인 실행에서 Oracle 데이터베이스는 버퍼 캐시에 어떤 데이터를 캐시할지 결정함

공간이 충분하지 않으면 캐시에서 데이터가 고갈 될 수 있음

또한 오라클은 대량의 읽기 작업으로 유용한 정보가 인위적으로 만료되는 것을 방지하기 위해 일부 작업에 대해 버퍼 캐시를 우회하도록 선택할 수 있음


Oracle 12cR1 (12.1.0.2)에는 전체 데이터베이스 캐싱 개념이 도입됨

오라클이 버퍼 캐시가 전체 데이터베이스를 수용 할만큼 충분히 크다고 판단하면 모든 블록을 캐시함

또한 전체 데이터베이스 캐싱 모드가 강제 될 수 있음




참조 : https://oracle-base.com/articles/12c/full-database-caching-mode-12cr1

메타링크 1941494.1

https://docs.oracle.com/database/121/TGDBA/tune_buffer_cache.htm#TGDBA95384

https://docs.oracle.com/database/121/ADMIN/memory.htm#ADMIN14327