Algunas veces nos encontramos con que backupeamos los archivelog y estos siguen permaneciendo en el storage debido a que nuestra politica de retención en mayor a 2 días.
Algunas aplicaciones tiene mucho movimiento y generan una cantidad importante de archive diario.
Como podemos aplicar una depuración ?
Yo tendría en cuenta algunos aspectos:
- Que los archives que voy a deletear esten resguardados si esa es la politica.
- Que si tengo una politica mayor a dos días y hay mucho archive, dejar lo vigente al día corriente y borrar todo hacia atras.
- Si nos quedamos sin espacio de flashback y es urgente depurar, tomar un backup de archive (en caso de contar con algo de margen) y depurar acorde a un punto en el tiempo, correspondiente al día corriente.
Con la query que pongo a continuación podemos ver el espacio ocupado, reclamable y cual es el tamaño total de flashback.
Con ello puedo saber con que espacio cuento y depurar acorde al escenario que poseo.
SQL> select space_limit/1024/1024 "Limit MB", space_used/1024/1024 "Used MB", space_reclaimable/1024/1024 "Reclaimable MB" from v$recovery_file_dest; 2 3 Limit MB Used MB Reclaimable MB ---------- ---------- -------------- 40960 38990 35818
Entonces desde el rman , con las variables previamente seteadas arrancamos con la depuración.
$ rman target /
Una vez que tenemos prompt ejecutamos el comando DELETE con el periodo de un día hacia atrás.
RMAN> DELETE ARCHIVELOG UNTIL TIME 'sysdate -1'; using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=632 instance=DAPRO1 devtype=DISK List of Archived Log Copies Key Thrd Seq S Low Time Name ------- ---- ------- - --------- ---- 79886 1 18145 A 01-JUL-10 +DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18145.1698.723212957 79893 1 18146 A 01-JUL-10 +DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18146.1332.723214883 79898 1 18147 A 01-JUL-10 +DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18147.386.723216965 79904 1 18148 A 01-JUL-10 +DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18148.1818.723219357 79912 1 18149 A 01-JUL-10 +DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18149.1263.723221699 79916 1 18150 A 01-JUL-10 +DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18150.308.723224071 79922 1 18151 A 01-JUL-10 +DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18151.658.723226667 79928 1 18152 A 01-JUL-10 +DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18152.716.723229161 79936 1 18153 A 01-JUL-10 +DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18153.1329.723231755 [...]
Solamente hasta este momento el RMAN nos muestra todo lo que esta por depurar, pero no hara nada hasta que nosotros no lo confirmemos.
Do you really want to delete the above objects (enter YES or NO)? deleted archive log archive log filename=+DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18145.1698.723212957 recid=79886 stamp=723212958 deleted archive log archive log filename=+DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18146.1332.723214883 recid=79893 stamp=723214882 deleted archive log archive log filename=+DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18147.386.723216965 recid=79898 stamp=723216965 deleted archive log archive log filename=+DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18148.1818.723219357 recid=79904 stamp=723219357 deleted archive log archive log filename=+DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18149.1263.723221699 recid=79912 stamp=723221698 deleted archive log archive log filename=+DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18150.308.723224071 recid=79916 stamp=723224070 deleted archive log archive log filename=+DAPRO_DG2/dapro/archivelog/2010_07_01/thread_1_seq_18151.658.723226667 recid=79922 stamp=723226667 deleted archive l [...]
Ahora bien, si tenemos el caso en el que tenemos que depurar desde 1 segundo hasta el punto horario que deseemos, lo podemos hacer de la siguiente manera.
Quiero borra los archives menores a la fecha 05-JUN-2010 , en el horario de las 12.50 hs.
RMAN> delete archivelog until time "to_date('2010-06-05 12:50:00','YYYY-MM-DD:HH24:MI:SS')"; starting full resync of recovery catalog full resync complete allocated channel: ORA_DISK_1 channel ORA_DISK_1: sid=288 instance=OESV1N1 devtype=DISK List of Archived Log Copies Key Thrd Seq S Low Time Name ------- ---- ------- - --------- ---- 1037615 1 706 A 05-JUN-10 +OESV1N_DG2/oesv1n/arch_streams/1_706_677853959.dbf 1037616 1 707 A 05-JUN-10 +OESV1N_DG2/oesv1n/arch_streams/1_707_677853959.dbf
Otra manera es con una la query que consulte v$flash_recovery_area_usage.
En el caso que haya espacio disponible para liberar tomamos un hot backup con RMAN y despúes limpiamos los logs.
SQL> select * from v$flash_recovery_area_usage; FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES ------------ ------------------ ------------------------- --------------- CONTROLFILE .16 0 1 ONLINELOG 3.98 0 8 ARCHIVELOG 76.36 51.18 271 BACKUPPIECE 0 0 0 IMAGECOPY 0 0 0 FLASHBACKLOG 4.38 0 109 6 rows selected.
Achicamos el espacio de la flashback modificando el parametro db_recovery_file_dest_size, luego de finalizada la tarea que podemos ir chequendo desde el alert.log que nos mostrara las piezas que son eliminidas, volvemos a setearla con el valor orirginal.
SQL> alter system set db_recovery_file_dest_size=7G scope=both sid='*'; System altered. SQL> alter system set db_recovery_file_dest_size=5G scope=both sid='*'; System altered.
Espero les sea de utilidad.