使用DBMS_SHARED_POOL包将PL/SQL大对象保存到Shared Pool
来源:互联网 发布:jenkins 读取数据库 编辑:程序博客网 时间:2024/06/13 09:14
当系统在加载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
我们可以将那些经常被使用的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
解除成功。
原文地址:http://space.itpub.net/519536/viewspace-696189
- 使用DBMS_SHARED_POOL包将PL/SQL大对象保存到Shared Pool
- 使用DBMS_SHARED_POOL包将对象固定到共享池
- DBMS_SHARED_POOL包将对象固定到共享池 .
- DBMS_SHARED_POOL包将对象固定到共享池 .
- SQL语句执行过程到shared pool剖析
- How to Pin a Cursor in the Shared Pool using DBMS_SHARED_POOL.KEEP (文档 ID 726780.1)
- 将对象保存到文件
- [PL/SQL]保存误删除的存储或表等对象到文件
- 使用JDBC将一个对象保存到数据库
- shared pool_使用large pool
- shared保存对象到本地出现IOException异常问题
- PL/SQL 数据类型和变量 -- 大对象
- 安装DBMS_SHARED_POOL包
- Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)
- Swift - 本地数据的保存与读取(使用NSCoder将对象保存到.plist文件)
- Swift - 本地数据的保存与加载(使用NSCoder将对象保存到.plist文件)
- ORA-04031: unable to allocate 4096 bytes of shared memory ("shared pool","BEGIN :EXEC_STR := SYS.DBMS...","PL/SQL MPCODE","BAMIM
- 使用dbms_shared_pool.purge清除共享池中的SQL执行计划
- 下载个android源代码真他娘的不容易
- 各大公司面试笔试试题
- linux 安装IE ------ies4linux
- 软件定制
- 管理表和约束
- 使用DBMS_SHARED_POOL包将PL/SQL大对象保存到Shared Pool
- Form,Library分别在11i和R12中的编译语句
- 一步一步写算法
- stm32 时钟
- plsql developer window7
- DOS命令手册
- C#编程读取Excel文件,引用Microsoft.Office.Interop.Excel出现的问题
- javascript数组操作大全,数组方法总汇,速记
- 使用Apache与Tomcat建立Web站点