Восстановление отвалившегося standby
Иногда вследствие сбоев сети и определённых настроек удаления архивлогов возникает ситуация, что стэндбай перестаёт накатываться, часть логов утеряна, и просто догнать его не получается.
Как я писал, для 12-й версии возможна накатка по сети с помощью recover from service. Для 11-й версии тоже есть выход — сделать инкрементальный бэкап с момента последнего SCN на standby.
Выясняем, какой SCN на STANDBY:
SQL>SELECT CURRENT_SCN FROM V$DATABASE;
Снимаем бэкап на primary:
RMAN>BACKUP INCREMENTAL FROM SCN <standby_scn> DATABASE FORMAT '/nfs/ForStandby_%U' tag 'FORSTANDBY';
Добавляем бэкап в каталог STANDBY:
RMAN>CATALOG START WITH '/nfs/ForStandby';
Делаем восстановление:
RMAN>RECOVER DATABASE NOREDO;
Теперь нужно, чтоб версия контролфайла совпадала с версиями датафайлов, поэтому снимаем копию с праймари:
RMAN>BACKUP CURRENT CONTROLFILE FOR STANDBY FORMAT '/nfs/standby_ctl.bac';
и восстанавливаем на стэндбае:
RMAN> SHUTDOWN IMMEDIATE ; RMAN> STARTUP NOMOUNT; RMAN> RESTORE STANDBY CONTROLFILE FROM '/nfs/standby_ctl.bac';
Остаётся последний важный важный момент, особенно, если у вас файлы на ASМ: после восстановления контролфайла все пути к файлам там теперь такие же, как на праймари.
И тут есть 2 варианта: 1) делать руками rename; 2) воспользоваться более автоматизированной процедурой:
SQL> SHUTDOWN; SQL> STARTUP MOUNT; RMAN> CATALOG START WITH '+ASMDATA/datafile/'; RMAN> SWITCH DATABASE TO COPY;
После этого не забудьте зачистить ваши логфайлы:
ALTER DATABASE CLEAR LOGFILE GROUP [group number];
и можете вновь запускать ваш стэндбай в режиме подкачки.
Вот и всё на сегодня. Чтобы узнать больше, записывайтесь на курс «Реляционные СУБД»!