Oracle DB: Switchover

Материал из sysadm
Перейти к навигации Перейти к поиску

Ссылки по теме:

Oracle 11g R2, Switchover (вручную)

Ниже по тексту, под PRIMARY и STANDBY понимаем сервера имеющие соответствующие роли на момент начала работ.

Заголовок раздела указывает на место проведения действий, если в комментарии к действию не указано иное.

На PRIMARY и STANDBY

-- отключите задания cron (лучше отмечать особой меткой, чтобы потом не спутать с ранее отключенными заданиями)
crontab -e

На PRIMARY

-- генерация скрипта на отключение заданий шедулера, которые запустятся в ближайшие 30 минут
select 'execute dbms_scheduler.disable('''|| owner || '.' || job_name || ''');'  from dba_scheduler_jobs
where enabled = 'TRUE' and
      next_run_date > sysdate and
      next_run_date < (sysdate + 30/24/60);
-- сохраните и выполните сгенерированный скрипт (понадобится потом для включения заданий)

-- дождитесь завершения всех запущенных заданий
-- список запущенных заданий шедулера
select * from dba_scheduler_jobs where state = 'RUNNING';
-- список JOB-ов, которые выполняются в данный момент
select * from dba_jobs_running;

-- включите ограничение на подключение
ALTER SYSTEM ENABLE RESTRICTED SESSION;

-- закройте все клиентские сессии
BEGIN
  FOR r IN (select sid,serial# from v$session where type='USER' and username<>'SYS')
  LOOP
      EXECUTE IMMEDIATE 'alter system kill session ''' || r.sid  || ',' || r.serial# || ''' immediate';
  END LOOP;
END;
/

-- (или так) сгенерировать скрипт на закрытие всех сессий
SELECT 'ALTER SYSTEM KILL SESSION '''||sid||','||serial#||''' IMMEDIATE;' FROM v$session where type='USER' and username<>'SYS';

-- сбросьте текущий redo лог в архив-лог
SQL> alter system archive log current;

-- (на PRIMARY и STANDBY) проверьте соответствие последнего sequence number и дождитесь его применения на STANDBY
col first_time format a20;
select * from (
  select dest_id, sequence#, to_char(first_time,'yyyy.mm.dd HH24:mi:ss') as first_time, archived, applied from v$archived_log order by sequence# desc
) where rownum<20;

-- проверьте статус switchover
select switchover_status,protection_mode,database_role from v$database;

-- 'SESSION ACTIVE' означает что есть клиентские подключения и переключаться нельзя
-- 'TO STANDBY' правильный статус, можно переключаться

-- сохранение текущего redo-лога
-- конвертация контрольных файлов в standby
-- сброс клиентских подключений
SQL> alter database commit to switchover to standby with session shutdown;
SQL> quit

# проверка, что все процессы инстанции остановлены
ps -ef | grep ora

-- запуск инстанции (база должна смонтироваться в standby режиме)
SQL> startup mount;

на STANDBY

-- остановка процесса автоматического применения логов
SQL> alter database recover managed standby database cancel;

-- проверка статуса switchover
select switchover_status,protection_mode,database_role from v$database;

-- до выполнения switchover на primary правильный статус NOT ALLOWED (т.е. выполнять switchover нельзя)
-- после выполнения switchover на primary правильный статус TO PRIMARY

-- сохранение текущего лога
-- переключение контрольных файлов в primary
-- сброс клиентских подключений
SQL> alter database commit to switchover to primary with session shutdown;

-- остановка инстанции
SQL> shutdown immediate;

-- запуск инстанции
SQL> startup;

на PRIMARY

Запуск процесса автоматического применения логов

-- запуск процесса автоматического применения логов
-- (наличие standby лог файлов не требуется)
SQL> alter database recover managed standby database disconnect;

-- запуск процесса автоматического применения логов в реальном времени
-- (требуется наличие standby лог файлов)
SQL> alter database open read only;
SQL> alter database recover managed standby database using current logfile disconnect;

Проверка

-- проверка работы standby
set line 300;
SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;

-- проверка применения архивных логов на STANDBY
col first_time format a20;
select * from (
  select dest_id, sequence#, to_char(first_time,'yyyy.mm.dd HH24:mi:ss') as first_time, archived, applied from v$archived_log order by sequence# desc
) where rownum<20;

на PRIMARY и STANDBY

  • скорректируйте и включите отключенные ранее задания cron с учетом смены ролей
  • включите выключенные ранее задания базы