02июл
Удаление архивных файлов журнализации на физическом стендбае.
У меня на сервере, где организован standby, места на диске не так уж и много. Поэтому очень важно удалять уже накатанные архивные файлы.
Решено было использовать вот такой командный файл (за основу взято обсуждение на sql.ru), который стартует с помощью cron:
rman_del_arch.sh:
rm /opt/oracle/backup/archivelogs_delete.cmd
/opt/oracle/product/10.2.0/db_1/bin/sqlplus /nolog @/opt/oracle/backup/rman_del_arh.sql
/opt/oracle/product/10.2.0/db_1/bin/rman target / nocatalog cmdfile=/opt/oracle/backup/archivelogs_delete.sh LOG=/opt/oracle/backup/archivelogs_delete.log
rman_del_arh.sql:
conn / as sysdba
set linesize 200;
set heading off;
SET SERVEROUTPUT ON
SET FEEDBACK OFF
spool /opt/oracle/backup/archivelogs_delete.sh
SELECT CASE
WHEN 'PHYSICAL STANDBY' = (SELECT database_role
FROM v$database)
THEN 'CROSSCHECK ARCHIVELOG ALL;'
||chr(10)
|| 'allocate noprompt channel for maintenance device type disk;'
|| chr(10)
|| 'delete archivelog until sequence '
|| MAX (sequence# -3)
|| ' thread '
|| thread#
|| ';'
|| chr(10)
|| 'release channel;'
END
FROM v$archived_log
WHERE applied = 'YES'
GROUP BY thread#;
spool off;
exit
В ходе выполнения нашего командного файла формируется файл archivelogs_delete.cmd , например, с таким содержимым:
CROSSCHECK ARCHIVELOG ALL;
allocate channel for maintenance device type disk;
delete archivelog until sequence 88966 thread 1;
release channel;
Затем он выполняется с помощью RMAN.
Спасибо автору скрипта - все работает отлично.
Может кто-то решил эту проблему лучше?