网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.oracle8.1.7 在redhat7.2下的安装.
.深入探讨Oracle数据库10g的Shrin.
.oracle的事务与锁与回滚段block的.
.ORACLE问题,每天10问(六).
.红旗4.0b版最新使用方法.
.INTELP4安装ORACLE8I的具体解决方.
.Oracle数据库中如何根据时间来执.
.ORACLE入门之改数据库的归档方式.
.ActualTest Oracle 1Z0-032 v12..
.用Quick Slice获取Oracle进程的线.
.Oracle数据库SQL语句性能调整的基.
.基于 Linux 和 MiniGUI 的嵌入式.
.Oracle数据库整机移植技术.
.学在oracle数据库中插入特殊符号.
.理解oracle的网络结构 解决连接问.
.Oracle job 管理.
.Oracle Freelist和HWM原理及性能.
.SQL链接Oracle,数据长度不定的问.
.如何查询redo logfile的使用率.
.Oracle数据库技术(11).

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

发表日期:2008-2-9



  主题:本文说明在数据库启动的时候,如何自动获取Shared Pool里最常用的过程和包等对象。
  
  正文: 下面用实例来演示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的存在。
上一篇:Oracle 10g诊断 缺少MMNL 人气:626
下一篇:LINUX+ORACLE安装和优化注意事项 人气:1598
浏览全部Oracle教程的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐