Oracle DB: 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 с учетом смены ролей
- включите выключенные ранее задания базы