DBMS SHARED POOL.KEEP
EXEM Knowledge Base
목차 |
[편집] 개요
Procedure, Package, Sequence, Trigger, SQL Cursor와 같은 Library Cache Object들을 Shared Pool에 Keep하는 기능을 제공한다. Keep된 LCO는 다음과 같은 특징을 갖는다.
- LCO에 Keep 정보가 설정되며, V$DB_OBJECT_CACHE.KEPT 컬럼이 'YES' 값을 가지는 것으로 확인할 수 있다. V$DB_OBJECT_CACHE 뷰는 LCO의 목록을 나타내며 X$KGLOB 뷰를 베이스 테이블로 한다.
- Keep된 LCO는 Age Out되지 않으며, ALTER SYSTEM FLUSH SHARED POOL 명령으로도 Flush되지 않는다.
- 단, Keep된 LCO라도 Invalidation 메커니즘은 동일하다.
DBMS_SHARED_POOL.UNKEEP 프로시저를 이용하면 Keep된 LCO를 해제할 수 있다.
[편집] 상세 정보
[편집] 사용법
Syntax는 다음과 같다.
dbms_shared_pool.keep(name IN VARCHAR2, flag IN CHAR DEFAULT 'P');
Parameter의 의미는 다음과 같다.
| Flag | Description | Name |
| C | cursor | Address,Hashvalue |
| JC | java class | |
| JD | java shared data | |
| JR | java resource | |
| JS | java source | |
| P | procedure | Procedure Name |
| Q | sequence | Sequence Name |
| R | trigger | Trigger Name |
| T | type | Type Name |
[편집] 예제
-- Get address and hash_value of SQL statement
select address, hash_value from v$sql where sql_text like 'your query to keep';
==> 00000000858CA2B0 2239673969
-- Keep SQL Cursor
exec dbms_shared_pool.keep('00000000858CA2B0, 2239673969','C');
-- Create Procedure
CREATE OR REPLACE PROCEDURE proc_test IS
BEGIN
NULL;
END proc_test;
/
-- Keep Procedure
exec dbms_shared_pool.keep('proc_test', 'P');
-- Identify which objects are kept
select * from v$db_object_cache where kept = 'YES';
[편집] 실행 계획의 Keep
SQL Cursor를 Keep한다고 해서 실행 계획이 Keep되지는 않기 때문에, Age Out이나 Flush에 의한 Invalidation을 막을 수는 없다.