Oracle DB: Switchover
Версия от 17:55, 28 сентября 2022; Admin (обсуждение | вклад) (→Oracle 11g R2, Switchover (вручную))
Ссылки по теме:
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 с учетом смены ролей
- включите выключенные ранее задания базы