在大型数据库中,回收站很大,垃圾很多,表空间查询起来特殊慢。为了避免意外操作,不可能每次drop表的时候加上perge,这时候候垃圾愈来愈多,查表空间要等很久。这时候,定制一个表空间保存策略就显得非常有必要。下面将我的脚本同享一下,参加job中即可主动清算。
create or replace procedure lhj_delete_recyclebin ( preserve_date in number ) is
/*
存储进程名:lhj_delete_recyclebin
编写人:XXX
功效:清算回收站(默许保存7天) purge table xx会把表对应的索引purge掉
用法:
begin
lhj_delete_recyclebin(6);
end;
*/
v_sql varchar2 ( 1000 );
cursor c ( v_preserve_date number ) is
select owner , original_name , droptime , type from dba_recyclebin where /*owner="GGS" and */ type = "TABLE"
and to_date ( droptime , "yyyy-mm-dd hh24:mi:ss" )< trunc ( sysdate )- v_preserve_date order by 3 ; --保存一周的表 可修正时光
v_preserve_date number := preserve_date ;
begin
if v_preserve_date is null then
v_preserve_date := 7 ;
end if ;
for x in c ( v_preserve_date ) loop
begin
v_sql := "purge table " || x.owner || "." || x.original_name ;
--dbms_output.put_line(v_sql);
execute immediate v_sql ;
exception
when others then
rollback ;
end ;
end loop ;
end ;
在大型数据库中,回收站很大,垃圾很多,表空间查询起来特殊慢。为了避免意外操作,不可能每次drop表的