Oracle

게시글 보기
작성자 유건데이타 등록일 2015-05-19
제목 PACKAGE 를 SHARED_POOL 에 KEEP 하기
PACKAGE 를 SHARED_POOL 에 KEEP 하기
===================================

PURPOSE
-------
Shared_pool 에 Procedure 를 Keep 하기

Explanation
-----------

Shared_pool 에 크기가 큰 program 을 Keep 하기 위해서는 아래의 예처럼
DBMS_SHARED_POOL package를 이용할 수 있다 .
단, 이처럼 DBMS_SHARED_POOL을 사용하기 위해서는 다음의 단계를 통해 이
package를 생성하여야 한다.

SQL> @$ORACLE_HOME/rdbms/admin/dbmspool.sql
Package created.

또 Package body를 생성하기 위해

SQL> @$ORACLE_HOME/rdbms/admin/prvtpool.plb
View created.
Package body created.

SQL> GRANT EXECUTE ON DBMS_SHARED_POOL TO user_name ;
Grant succeeded.

각 Object를 keep 하는 방법은 다음과 같다.

E Procedure, Function, Package를 keep 하기

1. Stored PL/SQL object를 Call 한다.
2. PL/SQL object 이름이 PRINT_NAME 인 경우 :
SQL> exec dbms_shared_pool.keep('print_name', 'p')
PL/SQL procedure successfully completed.
E Trigger를 keep 하기

1. Trigger를 생성한다.
2. Trigger name이 INSERT_ANOTHER 인 경우 :
SQL> exec dbms_shared_pool.keep('insert_another', 'r')
PL/SQL procedure successfully completed.

I Sequence keep 하는 경우
1. 다음처럼 Sequence를 Reference 한다
select khpark.currval from dual;
2. Sequence name 이 KHPARK 인 경우 :
SQL> exec dbms_shared_pool.keep('khpark', 'q')
PL/SQL procedure successfully completed.

I Shared Cursor 에 SQL 문을 Keep 하기

여러 사용자 간에 주로 사용하는 SQL 문을 공유하기 위해서는 다음의
방법을 이용한다.
예를 들어 SQL> select ename from emp where empno = 10000 문장을
Library Cache 안의 shared cursor 부분에 Keep 하고자 하면,

SQL> SELECT ADDRESS, HASH_VALUE
FROM V$SQLAREA
WHERE SQL_TEXT='select ename from emp where empno=10000'

를 이용하여 원하는 SQL 문에 대해
ADDRESS = 70378A10
HASH_VALUE = -614308548를 구한다.

SQL> EXEC DBMS_SHARED_POOL.KEEP('70378A10, -614308548', 'c')으로
Shared cursor에 Keep 하도록 한다.

또 이의 Keep 상태는

SQL> select * from v$db_object_cache where kept='YES'; 이거나

SQL> exec dbms_shared_pool.sizes(0) ; 로 체크가 가능하다.

DBMS_SHARED_POOL.SIZES(size) 는 제시한 size 이상의 keep 된 Object를
나타내주는 procedure이다 .

각 Object를 shared_pool에 유지하던 기능을 해제 시는 UnKeep procedure를
사용한다. 이는 dbms_shared_pool.unkeep 을 이용하여

SQL> execute dbms_shared_pool.unkeep ('print_name','p') 처럼 사용한다.


Example
-------
none
Comment
등록된 코멘트가 없습니다.