Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Oracle

Скрипт пересоздания redo размером меньше заданного : Oracle

18.04.2024 14:22


11.05.2012 16:44
OlegON
 
Код:
declare
  status varchar(30);
  lim    number := 50;
begin
  for i in (select *
              from v$logfile
             where type = 'ONLINE'
               and group# in
                   (select group# from v$log where bytes / 1024 / 1024 < lim)) loop
    select status into status from v$log where group# = i.group#;
    while status != 'INACTIVE' loop
      execute immediate 'alter system switch logfile';
      execute immediate 'alter system checkpoint';
      select status into status from v$log where group# = i.group#;
    end loop;
    execute immediate 'alter database drop logfile group ' || i.group#;
    execute immediate 'alter database add logfile group ' || i.group# ||
                      ' (''' || i.member || ''') size '||lim||'M reuse';
  end loop;
end;
собственно, lim - минимальный размер файла в Мб. Все файлы пересоздаются на месте старых. Скрипт нормально обрабатывает standby-логи, но убивает всех мемберов, кроме первого попавшегося, если их больше одного.
13.05.2012 20:37
OlegON
 
Из нюансов - учтите, что если работали с OMF, то обломитесь на создании файла с таким же именем.
Часовой пояс GMT +3, время: 14:22.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.