动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
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教程,数据库安全,数据库文摘
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Oracle教程 ]的信息

本月文章推荐
.数据库PL/SQL异常处理(组图).
.oracle N层认证.
.Oracle临时表 使用补充.
.oracle 将a用户权限赋给b用户.
.连接Oracle数据库及故障解决办法.
.Oracle 9与Oracle 8中CPU_COSTIN.
.Oracle 数据库安全策略的具体分析.
.利用游标返回结果集的的例子(Or.
.修改oracle9i数据库字符集的方法.
.如何在硬碟建置Linux系统之系统设.
.ORA-02020错误:过多的数据库连接.
.RH9下最简单的WebMail的实现方案.
.ORACLE系统开发过程中的几条实用.
.江湖救急:安装oracle9i时候,lin.
.怎样制作可执行的java程序.
.建立与Oracle服务器连接的两种连.
.index full scan与index fast fu.
.连接到oracle数据库(一).
.开机自动启动oracle和weblogic.
.如何获取或记录Oracle语句执行时.

自动清除statspack所产生的snapshot旧记录

发表日期:2008-2-9 |



  下面的 script可以利用cron排程来自动执行清除超过保留数目的旧有snapshot资料,这个script不需要知道PERFSTAT此帐号的密码就可执行,并已经经由Oracle8.1.7和9.2.0上测试过。
  
  步骤:
  
  1)储存这个script取名为sp_purge.ksh在Unix主机上。
  
  2)注重你的系统上tmp目录是否存在,假如你不想所有产生的log写到/tmp去,你必须去更改script。
  
  3)假如你的oratab这个目录位置不是在/var/opt/oracle,你就必须手动去更新script来配合你的环境。
  
  4)设定可执行权限给script: chmod u+x sp_purge.ksh
  
  5)设定cron job来执行这个script。执行这个script需要三个参数:
  
  要清除 snapshot的资料库名称。
  
  要保留的 snapshot数量。
  
  执行后要寄发电子邮件的对象。
  
  00 19 * * 1-5 /scripts/sp_purge.ksh prod 60 mrogers@company.com >>/tmp/sp_purge_portal.log 2>&1 &
  
  这个范例是说:星期一到星期五天天晚上七点执行此 script,针对 'prod' 这个资料库只保留最近的60个snapshots纪录,多余的则清除,并且寄发讯息给 mrogers@company.com 。
  
  6)注重这个 script应该配合指定的instance一起执行,假如这台主机上并没有这个script所指定的instance在执行中,一个简单的讯息可在tmp目录下找到。
  
  *** ERROR: The ORACLE_SID specified in parameter 1 is not a valid SID.
  
  (Note that the SID is case sensitive.)
  
  7)所有产生的执行纪录都可以在/tmp下找到。
  
  #!/bin/ksh
  # Script Name: sp_purge.ksh
  # This script is designed to purge StatsPack snapshots.
  #
  # Parameter $1 is the name of the database.
  # Parameter $2 is the maximum number of snapshots to retain.
  # Parameter $3 is the mail recipient for sUCcess messages.
  #
  # To succeed, this script must be run on the machine on which the
  # instance is running.
  # Example for calling this script:
  #
  # sp_purge.ksh prod 30 username@mycompany.com
  # Script History:
  #
  # Who Date Action
  # --------------- ------------ --------------------------------------------
  # Mark J. Rogers 22-Sep-2003 Script creation.
  #
  #
  #
  tmp_dir=/tmp
  # Validate the parameters.
  
  if [[ $# -ne 3 ]]; then
  echo ""
  echo "*** ERROR: You must specify these parameters: "
  echo ""
  echo " 1: the name of the database"
  echo " 2: the maximum # of snapshots to retain"
  echo " 3: the mail recipient for success messages"
  echo ""
  exit 1
  fi
  
  grep "^${1}:" /var/opt/oracle/oratab >> /dev/null
  if [[ $? -ne 0 ]]; then
  echo ""
  echo "*** ERROR: The ORACLE_SID specified in parameter 1 is not a valid SID."
  echo " (Note that the SID is case sensitive.)"
  echo ""
  exit 1
  fi
  
  if [[ ! (${2} -ge 0) ]]; then
  echo ""
  echo "*** ERROR: Parameter 2 must specify the # of snapshots to retain."
  echo ""
  exit 1
  fi
  
  # Ensure that the instance is running on the current machine.
  ps -ef grep pmon grep $1 >> /dev/null
  if [[ $? -ne 0 ]]; then
  echo ""
  echo "*** ERROR: Instance $1 is not running on machine `uname -n` "
  echo " on `date`."
  echo " The instance must be running on the current machine for this"
  echo " script to function properly."
  echo ""
  echo " Exiting..."
  echo ""
  exit 1
  fi
  
  # Establish error handling for this UNIX script.
  function errtrap {
  the_status=$?
  echo ""
  echo " *** ERROR: Error message $the_status occured on line number $1."
  echo ""
  echo " *** The script is aborting."
  echo ""
  exit $the_status
  }
  
  trap
  '
  errtrap $LINENO
  '
  ERR
  
  # Set up the Oracle environment.
  
  eXPort ORACLE_SID=${1}
  export ORAENV_ASK=NO
  . oraenv
  
  script_name=${0##*/}
  echo ""
  echo "Script: $script_name"
  echo " started on: `date`"
  echo " by user: `id`"
  echo " on machine: `uname -n`"
  echo ""
  echo "This script is designed to purge StatsPack snapshots for the "
  echo " $ORACLE_SID database."
  echo ""
  echo "You have requested to retain no more than $2 StatsPack snapshots."
  echo ""
  
  tmp_script=${tmp_dir}/sp_purge_tmp_$ORACLE_SID.ksh # script to actually purge
  tmp_output=${tmp_dir}/sp_purge_tmp_$ORACLE_SID.out # output to be mailed
  
  rm -f $tmp_script
  rm -f $tmp_output
  
  sqlplus -s <<EOF_SP<br />/ as sysdba
  
  whenever sqlerror exit failure rollback
  whenever oserror exit failure rollback
  
  SET SERVEROUTPUT ON
  SET FEEDBACK OFF
  
  VARIABLE P_SNAPS_TO_RETAIN NUMBER
  VARIABLE P_LOSNAPID NUMBER
  VARIABLE P_HISNAPID NUMBER
  
  BEGIN
  /* Assign values to these variables. */
  :P_SNAPS_TO_RETAIN := ${2};
  :P_LOSNAPID := -1;
  :P_HISNAPID := -1;
  END;
  /
  
  -- Identify the snapshot ids to purge, if any.
  
  DECLARE
  
  V_LOSNAPID NUMBER := NULL; -- Low snapshot ID to purge.
  V_HISNAPID NUMBER := NULL; -- High snapshot ID to purge.
  V_COUNT NUMBER := NULL; -- Number of snapshots current saved.
  V_COUNTER NUMBER := 0; -- Temporary counter variable.
  V_DBID NUMBER := NULL; -- Current database ID.
  V_INSTANCE_NUMBER NUMBER := NULL; -- Current instance number.
  V_SNAPS_TO_RETAIN NUMBER := :P_SNAPS_TO_RETAIN; -- Max snaps to retain.
  
  BEGIN
  
  select
  d.dbid,
  i.instance_number
  INTO
  v_DBID,
  V_INSTANCE_NUMBER
  from
  v$database d,
  v$instance i;
  
  select
  count(snap_id)
  into
  v_count
  from
  perfstat.stats$snapshot
  where
  dbid = V_DBID AND
  instance_number = V_INSTANCE_NUMBER;
  
  IF V_COUNT <= V_SNAPS_TO_RETAIN THEN
  
  -- We do NOT need to perform a purge.
  
  DBMS_OUTPUT.PUT_LINE ('NOTE: There are only '
  to_char(v_count) ' snapshots currently saved.');
  
  ELSE
  
  -- We DO need to perform a purge.
  
  DBMS_OUTPUT.PUT_LINE ('There are currently '
  to_char(v_count) ' snapshots saved.');
  
  -- OBTain the low snapshot id to be purged.
  
  select
  min(snap_id)
  into
  V_LOSNAPID
  from
  perfstat.stats$snapshot
  where
  dbid = V_DBID AND
  instance_number = V_INSTANCE_NUMBER;
  
  -- Obtain the high snapshot id to be purged.
  
  FOR V_HISNAPID_REC IN
  (SELECT
  SNAP_ID
  FROM
  perfstat.stats$snapshot
  WHERE
  dbid = V_DBID AND
  instance_number = V_INSTANCE_NUMBER
  ORDER BY
  SNAP_ID DESC)
  LOOP
  V_COUNTER := V_COUNTER + 1;
  IF V_COUNTER > V_SNAPS_TO_RETAIN THEN
  V_HISNAPID := V_HISNAPID_REC.SNAP_ID;
  EXIT; -- Exit this LOOP and proceed to the next statement.
  END IF;
  END LOOP;
  
  :P_LOSNAPID := V_LOSNAPID;
  :P_HISNAPID := V_HISNAPID;
  
  END IF;
  
  END;
  /
  
  prompt
  -- Generate the specific purge script.
  set linesize 60
  spool $tmp_script
  begin
  IF (:P_LOSNAPID <> -1) THEN
  /* Build the script to purge the StatsPack snapshots. */
  dbms_output.put_line('#!
/bin/ksh');
  dbms_output.put_line('#THIS IS THE SCRIPT TO ACTUALLY PERFORM THE PURGE');
  dbms_output.put_line('trap '' exit $? '' ERR');
  dbms_output.put_line('sqlplus -s << SP_EOF2');
  dbms_output.put_line('/ as sysdba');
  dbms_output.put_line('whenever sqlerror exit failure rollback');
  dbms_output.put_line('whenever oserror exit failure rollback');
  dbms_output.put_line('@ $ORACLE_HOME/rdbms/admin/sppurge.sql');
  dbms_output.put_line(:P_LOSNAPID);
  dbms_output.put_line(:P_HISNAPID);
  dbms_output.put_line('-- the following are needed again');
  dbms_output.put_line('whenever sqlerror exit failure rollback');
  dbms_output.put_line('whenever oserror exit failure rollback');
  dbms_output.put_line('commit;');
  dbms_output.put_line('exit');
  dbms_output.put_line('SP_EOF2');
  dbms_output.put_line('exit $?');
  END IF;
  end;
  /
  spool off
  
  exit
  EOF_SP
  
  if [[ ! (-f ${tmp_script}) ]]; then
  echo ""
  echo "*** ERROR: Temporary script: ${tmp_script} does not exist."
  echo ""
  exit 1
  fi
  
  if [[ `cat ${tmp_script} wc -l` -ne 0 ]]; then
  # Execute the newly generated StatsPack snapshot purge script.
  chmod u+x $tmp_script
  echo ""
  echo "Performing the purge..."
  echo ""
  $tmp_script > $tmp_output
  cat $tmp_output # display the output
  # Check the output file for a success message:
  trap ' ' ERR # temporarily reset error handling for the grep command
  grep "^Purge of specified Snapshot range complete." $tmp_output >> /dev/null
  if [[ $? -ne 0 ]]; then
  echo ""
  echo "*** ERROR: The purge did not complete successfully."
  echo " Check the log file $tmp_output."
  echo ""
  exit 1
  fi
  trap ' errtrap $LINENO ' ERR # re-establish desired error handler
  else
  # No purge script was created.
  echo "No snapshot purge was necessary." > $tmp_output
  fi
  
  echo ""
  echo "The ${script_name} script appears to have completed "
  echo " successfully on `date`."
  echo ""
  
  mailx
  -s "sp_purge.ksh in $ORACLE_SID on `uname -n` completed successfully"
  ${3}
  < $tmp_output
  
  # End of script sp_purge.ksh.
上一篇:Oracle数据库 监看lock script 人气:585
下一篇:解決 Export error ORA-31600 人气:490
浏览全部Oracle教程的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-13 爬爬思特新闻管理系统 v2.0 Beta1
2008-10-13 Pligg v9.9.5 Beta
2008-10-13 广优邮件发送系统 v2.1
2008-10-13 缤纷互动视频交友 v3.1 RC
2008-10-13 MyShop网络商城 build 081005
2008-10-13 Chyrp 超轻量级开源博客引擎 v2.
2008-10-13 162100静态(论坛/文章)系统 v2.4
2008-10-13 金博人才招聘求职网黄金版 v4.2
2008-10-13 愚人笔记 v4.0
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成