DECLARE
plsql_block VARCHAR2(4000);
BEGIN
plsql_block := '
DECLARE
dbId NUMBER;
instNum NUMBER;
loSnap NUMBER;
hiSnap NUMBER;
snpsPurged NUMBER;
BEGIN
SELECT d.dbid, i.instance_number
INTO dbId, instNum
FROM v$database d,
v$instance i;
SELECT MIN( s.snap_id ), MAX( s.snap_id )
INTO loSnap, hiSnap
FROM stats$snapshot s
WHERE s.dbid = dbId AND
s.instance_number = instNum AND
s.snap_time < SYSDATE - 30 AND
EXISTS( SELECT 1
FROM stats$database_instance di
WHERE di.dbid = dbId AND
di.instance_number = instNum AND
di.startup_time = s.startup_time);
IF loSnap > 0 AND hiSnap >0 THEN
snpsPurged := STATSPACK.PURGE( i_begin_snap => loSnap,
i_end_snap => hiSnap,
i_snap_range => TRUE,
i_extended_purge => FALSE,
i_dbid => dbId,
i_instance_number => instNum);
END IF;
END;';
DBMS_SCHEDULER.CREATE_JOB(
job_name =>'PURGE_STATSPACK',
job_type => 'PLSQL_BLOCK',
job_action => plsql_block,
repeat_interval => 'FREQ=DAILY; BYDAY=SUN; BYHOUR=02; BYMINUTE=00;',
enabled => TRUE );
END;
/
No comments:
Post a Comment