Июл 202011
 

Рассмотрим практический пример восстановления резервного сервера после длительного простоя. Ситуация такова (см. картинку ниже): в серверной, где он стоял, отключилось электричество. Будем считать, что отключилось оно надолго, например, на неделю. Когда электроснабжение восстановили, появилась возможность активировать Standby, да только за неделю на основной базе накопилось множество архивных логов, и "догнать" standby до актуального состояния непросто.

Тут на помощь придёт кумулятивный бэкап базы с восстановлением на резервном сервере. На картинке красная линия - это работа системы без standby. Пока мы сделаем кумулятивный инкрементальный бэкап 1-го уровня и восстановим его на резервном сервере, основная база уйдёт ещё немного вперёд (жёлтая линия), но теперь разрыв будет куда меньше.

Теперь более подробно про каждую фазу восстановления:
  1. Запустим сервер со стендбаем, убедимся, что он запустился нормально, все файловые системы поднялись, etc.
  2. Остановим бэкап логов на основной базе
  3. Делаем бэкап основной базы на ленту с помощью RMAN:
    RUN
    {
    	ALLOCATE CHANNEL t1 TYPE 'SBT_TAPE';
    	ALLOCATE CHANNEL t2 TYPE 'SBT_TAPE';
    	BACKUP INCREMENTAL LEVEL 1
    	       CUMULATIVE
    	       FILESPERSET 3 
    	       DATABASE FORMAT '%d.DB.CUM1.s%s.p%p'
    	       INCLUDE CURRENT CONTROLFILE;
     
    	SQL 'ALTER SYSTEM ARCHIVE LOG CURRENT';
     
    	RELEASE CHANNEL T1;
    	RELEASE CHANNEL T2;
    }
  4. Пересоздадим standby controlfile и запустим резервную БД.

    -- Создаём standby controlfile - это на основном сервере
    ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/stb.ctl';

    Теперь копируем /tmp/stb.ctl на стендбай поверх его контрольных файлов.

    Запускаем стендбай:

    STARTUP NOMOUNT;
    ALTER DATABASE MOUNT STANDBY DATABASE;
  5. Запустим восстановление базы на standby:
    RUN 
    {
    	ALLOCATE CHANNEL t1 TYPE 'SBT_TAPE';
    	ALLOCATE CHANNEL t2 TYPE 'SBT_TAPE';
    	SEND 'NB_ORA_SERV = backupsrv, NB_ORA_CLIENT = maindb';
     
    	RECOVER DATABASE;
     
    	RELEASE CHANNEL t1;
    	RELEASE CHANNEL t2;
    }
  6. Создадим заново standby redologs:
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 7
    	('/dev/vx/rdsk/stbdb/stbdb_stblog_71.dbf');
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 8
    	('/dev/vx/rdsk/stbdb/stbdb_stblog_81.dbf');	
    ALTER DATABASE ADD STANDBY LOGFILE GROUP 9
    	('/dev/vx/rdsk/stbdb/stbdb_stblog_91.dbf');
  7. Запустим процесс применения логов:
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
  8. Снова включим бэкап логов на основной базе

Теперь стендбай отстаёт только на время, в течение которого он пересоздавался (при объёме базы ~5Тб у меня это заняло около суток), а не на целую неделю и быстро догонит основную БД.

P.S. Картинка в SVG.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)