DBMS SHARED POOL.KEEP

EXEM Knowledge Base

Jump to: navigation, 찾기

목차

[편집] 개요

Procedure, Package, Sequence, Trigger, SQL Cursor와 같은 Library Cache Object들을 Shared Pool에 Keep하는 기능을 제공한다. Keep된 LCO는 다음과 같은 특징을 갖는다.

  1. LCO에 Keep 정보가 설정되며, V$DB_OBJECT_CACHE.KEPT 컬럼이 'YES' 값을 가지는 것으로 확인할 수 있다. V$DB_OBJECT_CACHE 뷰는 LCO의 목록을 나타내며 X$KGLOB 뷰를 베이스 테이블로 한다.
  2. Keep된 LCO는 Age Out되지 않으며, ALTER SYSTEM FLUSH SHARED POOL 명령으로도 Flush되지 않는다.
  3. 단, 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을 막을 수는 없다.

[편집] 관련 정보

  1. V$DB_OBJECT_CACHE

[편집] 외부 참조