1、创建此包
SQL> @D:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\dbmspool.sql
程序包已创建。
授权成功。
视图已创建。
程序包体已创建。
SQL> grant execute on dbms_shared_pool to users;
授权成功。
2、使用
SQL> exec dbms_shared_pool.keep('SCHEMA.P_AUTONOMOUS_TRANSACTION','p');
PL/SQL 过程已成功完成。
SQL> exec dbms_shared_pool.UNkeep('SCHEMA.P_AUTONOMOUS_TRANSACTION','p');
PL/SQL 过程已成功完成。
SQL> exec dbms_shared_pool.sizes(400);
SIZE(K) KEPT NAME
------- ------ --------------------------------------------------
2250 YES XDB.XDbD/PLZ01TcHgNAgAIIegtw==(IFS)
1953 YES XDB.XDZynXpO5DTv2jNMI2jLTZZA==(IFS)
740 YES HELIOS.BIG_WIN_LOTTERY (INVALID TYPE)
683 YES HELIOS.VOID_LOTTERY (INVALID TYPE)
461 YES HELIOS.WIN_LOTTERY (INVALID TYPE)
453 XDB.XD/3VTOXUnSvCfAvCFKObNPg==(IFS)
428 SYS.STANDARD (PACKAGE)
423 YES HELIOS.PK_BIG_WIN_LOTTERY (INVALID TYPE)
PL/SQL 过程已成功完成。
3、dbms_shared_pool.aborted_request_threshold(5000);
作用:当共享池满无足够内存来满足给定请求时,它将开始释放对象,知道有了足够内存。如果释放出足够多的对象,有可能会影响到性能。我们可以设定当至少超出THESHOLD个字节时,才释放。
SQL> exec dbms_shared_pool.aborted_request_threshold(1000);
BEGIN dbms_shared_pool.aborted_request_threshold(1000); END;
*
第 1 行出现错误:
ORA-20000: threshold_size not in valid range: (5000 - 2147483647)
ORA-06512: 在 "SYS.DBMS_SHARED_POOL", line 72
ORA-06512: 在 line 1
SQL> exec dbms_shared_pool.aborted_request_threshold(5000);
PL/SQL 过程已成功完成。
4、解释
DBMS_SHARED_POOL.KEEP OR UNKEEP(name ,flag)
当第一次加载时(并不是立即)锁定此对象在shared pool 中,永远不释放,除非你主动释放。可以改进性能
name : p 包、存储过程、函数;Q 序列 ;R 触发器;T 对象类型;C SQL游标;JS,JC,JR,JD为java相关