TECH
QUESTION
자주하는 질문답변 입니다.
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 | |||
---|---|---|---|
등록된 코멘트가 없습니다. |