ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 自动删除过期的statspack统计数据

自动删除过期的statspack统计数据

原创 Linux操作系统 作者:space6212 时间:2019-07-20 21:36:02 0 删除 编辑

我们在做性能分析的时候需要出statspack报表,为了方便,我们一般使用job方式定时生成报表,但是这种方式有一定的潜在危险。如果忘记移除这个job,而statspack所在表空间没有限制大小的话,可能会把大量占用磁盘空间,引起数据库或操作系统崩溃,所以我们需要定期对一些过期的统计信息进行清除。


oracle自带了两个脚本可以做这些清除工作:
$ORACLE_HOME/rdbms/admin/sptrunc.sql --对statspack涉及到的表执行trunc操作
$ORACLE_HOME/rdbms/admin/sppurge.sql --删除执行范围的snap_id的统计信息

实际情况下,我们一般需要保留一段时间的statspack统计信息,所以sptrunc.sql不适合需求。sppurge.sql是根据snap_id进行删除,并且需要人工干预,不能满足自动按时间删除数据的需求。
我们可以对sptrunc.sql稍作改动,使之满足要求。
需要改动的地方不多,列举如下:
1、----------------------------------------
注释 132、134行
这两行的内容是:
prompt Using &&LoSnapId for lower bound.
prompt Using &&HiSnapId for upper bound.

注释后的内容是:
--prompt Using &&LoSnapId for lower bound.
--prompt Using &&HiSnapId for upper bound.

2、------------------------------------------
在variable hi_snap number;这一行后、
begin
:lo_snap := &losnapid;
:hi_snap := &hisnapid;
end;
前添加如下内容(大概在138行左右)
variable delete_days number;
exec :delete_days:=7;
--delete_days表示需要删除多少天前的数据
column losnapid new_value losnapid;
column hisnapid new_value hisnapid;

select min(snap_id) losnapid,max(snap_id) hisnapid from stats$snapshot where snap_time

修改后的内容如下:
variable lo_snap number;
variable hi_snap number;

variable delete_days number;
exec :delete_days:=7;
column losnapid new_value losnapid;
column hisnapid new_value hisnapid;

select nvl(min(snap_id),0) losnapid,nvl(max(snap_id),0) hisnapid from stats$snapshot where snap_time


begin
:lo_snap := &losnapid;
:hi_snap := &hisnapid;
end;

3、---------------------------------------------------------------------------------
在sppurge.sql最后添加
exit

退出sqlplus

修改后,可以用crontab命令定时调用该脚本,实现定时清除。

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

请登录后发表评论 登录
全部评论

注册时间:2005-01-25

  • 博文量
    245
  • 访问量
    168462