如何自动获取Oracle数据库启动时在Shared pool里面的对象(翻译)

翻译 2004年03月17日 16:33:00

主题:本文说明在数据库启动的时候,如何自动获取Shared Pool里最常用的过程和包等对象。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

正文:  下面用实例来演示Startup之后和Shutdown之前,如何用Triger来完成自动管理的任务。

1.创建一个供Triger调用的Procedure

a.创建一个用来保存Procedure和Package的名称的Table(list_tab

    SQL>create table sys.list_tab (owner varchar2(64),NAME VARCHAR2(100));

   Table created.

     b.创建一个Procedure(proc_pkgs_list)来保存Shared Pool里面的对象名

SQL> create or replace PROCEDURE proc_pkgs_list AS

2                           own varchar2(64);

     3         nam varchar2(100);

     4      cursor pkgs is

     5         select owner,name

     6         from SYS.v_$db_object_cache

     7         where type in ('PACKAGE','PROCEDURE')

     8         and   (loads > 1 or KEPT='YES');

     9  BEGIN

    10        delete from sys.list_tab;

    11        commit;

    12         open pkgs;

    13         loop

    14         fetch pkgs into own, nam;

    15         exit when pkgs%notfound;

    16       insert into sys.list_tab values (own , nam);

    17    commit;

    18    end loop;

19             end;

20             /

    Procedure created.

c.创建Procedure(proc_pkgs_keep)用来保存调用dbms_shared_pool包的结果(注:如果没有dbms_shared_pool包,可以用dbmspool.sql脚本生成)

   SQL> CREATE OR REPLACE PROCEDURE sys.proc_pkgs_keep AS

     2   own varchar2(64);

     3   nam varchar2(100);

     4   cursor pkgs is

     5   select owner ,name

     6   from sys.list_tab;

     7  BEGIN

     8   open pkgs;

     9   loop

    10   fetch pkgs into own, nam;

    11   exit when pkgs%notfound;

    12   SYS.dbms_shared_pool.keep(''|| own || '.' || nam || '');

    13   end loop;

    14   sys.dbms_shared_pool.keep('SYS.STANDARD');

    15   sys.dbms_shared_pool.keep('SYS.DIUTIL');

    16  END;

    17  /

   Procedure created.

 

2.编译、测试Procedure

   SQL> execute sys.proc_pkgs_list;

   PL/SQL procedure successfully completed.

 

   SQL> execute sys.proc_pkgs_keep;

   PL/SQL procedure successfully completed.

3.创建Triger

a.  Instance shutdown之前的triger

   SQL> CREATE OR REPLACE TRIGGER db_shutdown_list

     2   BEFORE SHUTDOWN ON DATABASE

     3  BEGIN

     4   sys.proc_pkgs_list;

     5  END;

     6  /

   Trigger created.

 

b.  Instance startup之后的triger

   SQL> CREATE OR REPLACE TRIGGER db_startup_keep

     2   AFTER STARTUP ON DATABASE

     3  BEGIN

     4   sys.proc_pkgs_keep;

     5  END;

     6  /

   Trigger created.

 

检查alter.log文件,查看Triger是否成功。如果不成功,则在数据库关闭或者启动的时候会看到如下提示*** SHUTDOWN

 

Shutting down instance (immediate)

License high water mark = 2

Mon May 22 12:31:45 2000

ALTER DATABASE CLOSE NORMAL

Mon May 22 12:31:45 2000

SMON: disabling tx recovery

Mon May 22 12:31:46 2000

Errors in file /8i/ora815/admin/hp11_815/udump/ora_12624.trc:

ORA-04098: trigger 'DB_SHUTDOWN_LIST' is invalid and failed re-validation

SMON: disabling cache recovery

Mon May 22 12:31:47 2000

Thread 1 closed at log sequence 16579

Mon May 22 12:31:47 2000

Completed: ALTER DATABASE CLOSE NORMAL

Mon May 22 12:31:47 2000

ALTER DATABASE DISMOUNT

Completed: ALTER DATABASE DISMOUNT

 

 

*** STARTUP

Example 1:

 

Starting ORACLE instance (normal)

LICENSE_MAX_SESSION = 0

...

SMON: enabling tx recovery

Tue Apr 18 10:21:38 2000

Errors in file /8i/ora815/admin/hp11_815/udump/ora_7291.trc:

ORA-04098: trigger 'DB_STARTUP_KEEP' is invalid and failed re-valid

ation

Tue Apr 18 10:21:38 2000

Completed: alter database open

 

Tue Apr 18 10:21:30 2000

Starting ORACLE instance (normal)

LICENSE_MAX_SESSION = 0

 

Example 2:

 

SMON: enabling tx recovery

Tue Apr 18 11:12:41 2000

Errors in file /8i/ora815/admin/hp11_815/udump/ora_7562.trc:

ORA-00604: error occurred at recursive SQL level 1

ORA-00931: missing identifier

ORA-06512: at "SYS.DBMS_UTILITY", line 68

ORA-06512: at "SYS.DBMS_SHARED_POOL", line 43

ORA-06512: at "SYS.DBMS_SHARED_POOL", line 51

ORA-06512: at "SYS.PROC_PKGS_KEEP", line 13

ORA-06512: at line 2

Tue Apr 18 11:12:41 2000

Completed: alter database open

 

In the /8i/ora815/admin/hp11_815/udump/ora_7562.trc file:

 

Error in executing triggers on STARTUP

*** 2000.04.18.11.12.41.052

ksedmp: internal or fatal error

ORA-00604: error occurred at recursive SQL level 1

ORA-00931: missing identifier

ORA-06512: at "SYS.DBMS_UTILITY", line 68

ORA-06512: at "SYS.DBMS_SHARED_POOL", line 43

ORA-06512: at "SYS.DBMS_SHARED_POOL", line 51

ORA-06512: at "SYS.PROC_PKGS_KEEP", line 13

ORA-06512: at line 2

以上Procedure和Triger必须在sys的模式下执行,并且保证表list_tab的存在。

数据库体系结构-共享池(shared pool),largepool,Java池,流池

一。共享池(shared pool) sga的shared pool=库缓存(library cache)+数据字典缓存(dictionary cache)+其他(并行执行消息缓冲区以及其他内存结构)...
  • gumengkai
  • gumengkai
  • 2016年02月21日 22:09
  • 942

Shared pool深入分析及性能调整

Shared pool深入分析及性能调整(一)   (2012-04-06 12:14:25) 转载▼ 标签:  杂谈 分类: oracle ...
  • haiross
  • haiross
  • 2013年08月19日 13:58
  • 3429

oracle学习笔记 如何设置shared pool及sga的大小

oracle学习笔记 如何设置shared pool及sga的大小 前面讲了很多关于shared pool的知识 对我们来讲最简单最直接的工作是 sharedpool到底该设多大 一)share...
  • xinzhan0
  • xinzhan0
  • 2016年09月07日 17:39
  • 2272

oracle性能调优之--Share Pool 调整与优化

--======================================= -- 共享池的调整与优化(Sharedpool Tuning) --==================...
  • txj8859_1
  • txj8859_1
  • 2016年08月23日 10:13
  • 651

深入理解Oracle中的shared pool与library cache组件及相关等待事件

传统的’library cache pin’在10.2.0.2之后默认被取代, 此处PIN被Mutex及其ref count取代。 当进程执行游标语句时或者需要PIN,或者需要hard parse一个...
  • wanglha
  • wanglha
  • 2014年11月21日 11:09
  • 644

Oracle内存结构:Shared Pool的详细信息

Oracle内存结构:Shared Pool的详细信息   来源:互联网 酷勤网整理   The Shared Pool在SGA中是SIZE较大的...
  • haiross
  • haiross
  • 2014年11月14日 15:36
  • 781

共享池之五:Shared Pool子池与结果集缓存技术

SubPool技术及优势: 从Oracle 9i开始,Shared Pool可以被分割为多个子缓冲池(SubPool)进行管理,以提高并发性,减少竞争。 Shared Pool的每个SubPool可...
  • q947817003
  • q947817003
  • 2014年03月15日 17:22
  • 1798

关于shared pool的深入探讨

关于shared pool的深入探讨 作者:eygle   关于shared pool的深入探讨(一) 关于shared pool的设置一直是一个争议较多的内容。很多文章上说,shared pool...
  • haiross
  • haiross
  • 2013年08月19日 14:12
  • 2594

通过案例学调优之--和 SHARED POOL 相关的主要 Latch

通过案例学调优之--和 SHARED POOL 相关的主要 Latch3.1、和 SHARED POOL 相关的主要 Latch 有: Latch: shared pool Latch: librar...
  • lqx0405
  • lqx0405
  • 2015年03月31日 12:09
  • 263

Android get/ post 方法 传递网络数据 -简单的翻译功能实现(GET)

Android get/ post 方法 传递网络数据 -简单的翻译App实现(GET)学习android不久,最近学习了android的Get 和Post方法传递数据,相对与罗列书上的知识不如来动手...
  • nihui001
  • nihui001
  • 2016年12月26日 19:57
  • 312
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何自动获取Oracle数据库启动时在Shared pool里面的对象(翻译)
举报原因:
原因补充:

(最多只允许输入30个字)