Oracle 23ai 문서의 ALTER SYSTEM 문 내용에 아래와 같이 RAC 환경에서 FLUSH할 대상을 LOCAL과 GLOBAL로 지정할 수 있는 구문이 추가되었습니다.
ALTER SYSTEM FLUSH { BUFFER_CACHE | FLASH_CACHE } [ LOCAL | GLOBAL ];
흥미로운 사실은 기본값이 LOCAL이 아닌 GLOBAL이라는 점입니다. 실제로 특정 노드에서 ALTER SYSTEM FLUSH BUFFER_CACHE 문을 수행하면 RAC 전체 노드의 Buffer Cache가 Flush됩니다.
The FLUSH BUFFER_CACHE clause lets you clear all data from the buffer cache in the system global area (SGA), including the KEEP, RECYCLE, and DEFAULT buffer pools. Specify LOCAL if you only want to flush the local instance. To flush the buffer cache of all instances, specify GLOBAL. GLOBAL is the default.
앞선 내용은 문서화되지 않았을 뿐 Buffer Cache의 Flush 동작은 11.2.0.2.9 버전에 추가된 것으로 보이며, 구문은 12.2.0.1.0 버전에 추가된 후 12.1.0.2.0 버전으로 backport된 것으로 보입니다. 아래는 12.2 버전에서 구문을 테스트한 결과입니다.
-- 0
SELECT banner FROM v$version WHERE banner LIKE 'Oracle%';
BANNER
----------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
1 row selected.
-- 1-1
ALTER SYSTEM FLUSH BUFFER_CACHE LOCAL;
System altered.
-- 1-2
ALTER SYSTEM FLUSH BUFFER_CACHE GLOBAL;
System altered.
참고로 BUFFER_POOL 키워드는 23ai에서도 문서화되지 않았습니다. BUFFER_POOL 키워드를 사용하면 세부 Buffer Pool만 Flush할 수 있습니다.
-- 2-1
ALTER SYSTEM FLUSH BUFFER_POOL;
ORA-02000: missing DEFAULT/KEEP/RECYCLE/POOL_2K/POOL_4K/POOL_8K/POOL_16K/POOL_32K/ALL keyword
-- 2-2
ALTER SYSTEM FLUSH BUFFER_POOL ALL;
System altered.
-- 2-3
ALTER SYSTEM FLUSH BUFFER_POOL ALL LOCAL;
System altered.