ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【Shared Pool】使用DBMS_SHARED_POOL包将PL/SQL大对象保存到Shared Pool

【Shared Pool】使用DBMS_SHARED_POOL包将PL/SQL大对象保存到Shared Pool

原创 Linux操作系统 作者:secooler 时间:2011-05-24 22:56:56 0 删除 编辑
  当系统在加载PL/SQL大对象时,有可能遭遇由于Shared Pool中存在大量碎片导致没有足够空间加载的问题。
  我们可以将那些经常被使用的PL/SQL大对象预先保存到Shared Pool中,防止加载失败以及经常被换出,提高系统运行效率。

1.创建存储过程初始化测试环境
这里使用文章《【PL/SQL】向表中插入连续数字之PL/SQL方法》(http://space.itpub.net/519536/viewspace-696181)中提供的方法创建一个简单的存储过程用于测试。
注:实际生产环境中,该方法用于保存PL/SQL大对象,而非本例中给出的样例存储过程。
sys@ora10g> conn sec/sec
Connected.
sec@ora10g> create or replace procedure p_insert
  2  is
  3  begin
  4  for i in 1..10 loop
  5    insert into t values(i);
  6   end loop;
  7   commit;
  8  end;
  9  /

Procedure created.

2.创建DBMS_SHARED_POOL包
系统默认情况下不会创建dbms_shared_pool这个包。我们可以使用dbmspool.sql脚本进行手工创建。
1)验证默认情况下DBMS_SHARED_POOL包未创建
sys@ora10g> desc dbms_shared_pool
ERROR:
ORA-04043: object dbms_shared_pool does not exist

2)执行创建DBMS_SHARED_POOL包脚本
sys@ora10g> @?/rdbms/admin/dbmspool.sql

Package created.


Grant succeeded.


View created.


Package body created.

3)查看创建成功的DBMS_SHARED_POOL包
sys@ora10g> desc dbms_shared_pool
PROCEDURE ABORTED_REQUEST_THRESHOLD
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 THRESHOLD_SIZE                 NUMBER                  IN
PROCEDURE KEEP
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 NAME                           VARCHAR2                IN
 FLAG                           CHAR                    IN     DEFAULT
PROCEDURE SIZES
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 MINSIZE                        NUMBER                  IN
PROCEDURE UNKEEP
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 NAME                           VARCHAR2                IN
 FLAG                           CHAR                    IN     DEFAULT

我们这里关注DBMS_SHARED_POOL包中的KEEP和UNKEEP方法。

3.使用DBMS_SHARED_POOL包将存储过程保存到Shared Pool
1)确认存储过程P_INSERT是否被保存到Shared Pool
可以通过查询v$db_object_cache视图获得这方面的信息。
sys@ora10g> col owner for a10;
sys@ora10g> col name for a30;
sys@ora10g> col kept for a4
sys@ora10g> select owner,name,type,kept from v$db_object_cache where name='P_INSERT';

OWNER      NAME                           TYPE                 KEPT
---------- ------------------------------ -------------------- ----
SEC        P_INSERT                       PROCEDURE            NO

最后一列KEPT表明存储过程P_INSERT此时没有被保存到
Shared Pool

2)保存存储过程P_INSERT到Shared Pool
由于存储过程p_insert是创建在sec用户下,我们可以使用如下方法将该存储过程保存到Shared Pool中。
sys@ora10g> exec dbms_shared_pool.keep('SEC.P_INSERT','P');

PL/SQL procedure successfully completed.

3)在此确认存储过程P_INSERT是否被
保存到Shared Pool
sys@ora10g> select owner,name,type,kept from v$db_object_cache where name='P_INSERT';

OWNER      NAME                           TYPE                 KEPT
---------- ------------------------------ -------------------- ----
SEC        P_INSERT                       PROCEDURE            YES

最后一列KEPT表明存储过程P_INSERT此时已
被保存到Shared Pool

4.使用DBMS_SHARED_POOL包解除Shared Pool中保存的存储过程
我们这里使用UNKEEP方法可以解除Shared Pool中保存的存储过程。
sys@ora10g> exec dbms_shared_pool.unkeep('SEC.P_INSERT','P');

PL/SQL procedure successfully completed.

sys@ora10g> select owner,name,type,kept from v$db_object_cache where name='P_INSERT';

OWNER      NAME                           TYPE                 KEPT
---------- ------------------------------ -------------------- ----
SEC        P_INSERT                       PROCEDURE            NO

解除成功。

5.10g官方文档中关于DBMS_SHARED_POOL包的描述
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_shpool.htm#ARPLS055

6.小结
  本文给出了使用DBMS_SHARED_POOL包将PL/SQL大对象保存到Shared Pool的方法。
  DBMS_SHARED_POOL包除了可以实现保存存储过程到Shared Pool外,还可以保存其他数据库对象,例如SQL语句、Package、Function、Type、Trigger、Sequence等,具体用法和介绍参见官方文档。

Good luck.

secooler
11.05.24

-- The End --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-696189/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE 总监,阿里云MVP,北京大学理学硕士,恩墨学院创始人,教育专家,中国区 Cloudera 首位官方授权大数据讲师,金牌培训专家,BDA大数据联盟创始人,OCM联盟创始人,ACCUG创始人、ACOUG核心专家,Blogger。

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    8197854