Hi,

You have not mentioned about backing up them before deletion.

I have two solutions to yr problem.

1. If you have Veritas Backup Exec, there is a File Grooming feature which takes the backup of selected files and then deletes them from the server. You can define number of days and other options.

2. I have got following script to delete Archive log files which are older than n number of days but it does not have any mechanism of backing them first.
---------------------------------------------------------------------
Here's a way to delete your archive log files automatically.
This script deletes archive logs that are more than 30 days old.
It is very useful when you need to clear some disk space.
Of course, make sure that you have valid backups or you risk deleting archives that you
may need.

First, the script gives a grant to objects owned by the user sys.
Then, it creates a directory to use the bfilename function. Finally,
it creates two procedures: One that extracts the name of the archive and another
that finds old archive logs and deletes them.

You can execute this procedure manually, or create a job that will execute it periodically.


connect sys/YOUR_SYS_PASSWORD

grant select on v_$archived_log to YOUR_USER;
grant execute on dbms_backup_restore to YOUR_USER;

connect YOUR_USER/USER_PASSWORD

create or replace directory ARCHIVEDIR as
'd:\ora8i\orant\oradata\archive';

create or replace function proc_nom_fich(P_chain IN Varchar2)
return varchar2 IS
l_posi number;
l_nom_fich varchar2(100);

begin
l_posi := length(P_chain);
loop
if substr(P_chain,l_posi,1) in ('/','\') then
l_nom_fich := substr(P_chain,l_posi + 1);
exit;
else
l_posi := l_posi - 1;
if l_posi < 0 then
exit;
end if;
end if;
end loop;

return(l_nom_fich);
end;
/

create or replace procedure proc_dele_arch_log is
arch_file bfile;
arch_exis boolean;
arch_file_name varchar2(100);

cursor sel_archive is
select name
from v$archived_log
where completion_time < sysdate - 30;

begin
for list in sel_archive loop
arch_exis := FALSE;
arch_file_name := proc_nom_fich(list.name);
arch_file := bfilename('ARCHIVEDIR',arch_file_name);
arch_exis := dbms_lob.fileexists(arch_file) = 1;

if arch_exis then
sys.dbms_backup_restore.deleteFile(list.name);
end if;
end loop;
end;
/

declare
l_job_nb number;
l_inst_nb number;
begin
select sys.jobseq.nextval into l_job_nb from dual;
dbms_job.submit(l_job_nb, 'proc_dele_arch_log;',
to_date(sysdate,'DD-MON-YYYY HH24:MI'), 'sysdate + 7');
commit;
end;
/


Thanks,