Восстановление отвалившегося 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];

и можете вновь запускать ваш стэндбай в режиме подкачки.

Вот и всё на сегодня. Чтобы узнать больше, записывайтесь на курс «Реляционные СУБД»!