Восстановление отвалившегося standby
2026-03-10 23:50 Diff

Теги: субд, базы данных, 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];

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

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