Oracle DB: Standby

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

Обзор

LNS (Log Network Server) - отвечает за передачу текущего реду-лога на STANDBY в реальном времени

Процессы'

  • ora_arc<N>_<SID> - процессы обслуживающие redo логи и архив-логи, работают на PRIMARY и на STNADBY
  • ora_nsa<N>_<SID> - процессы LNS (Log Network Server), работают на PRIMARY

Настройка

Пример конфигурации

---------------------------------------------------
-- Настройка параметров PRIMARY
---------------------------------------------------
sql> ALTER SYSTEM SET log_archive_config = 'DG_CONFIG=(mydb1,mydb2)';
sql> ALTER SYSTEM SET log_archive_dest_1 = 'location=/path/to/arclog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=mydb1';
sql> ALTER SYSTEM SET log_archive_dest_2 = 'LGWR NOAFFIRM OPTIONAL ASYNC REOPEN=10 delay=120 service=mydb db_unique_name=mydb2 valid_for=(online_logfiles,primary_role)';
sql> ALTER SYSTEM SET log_archive_format = '%t_%s_%r.log';

---------------------------------------------------
-- Настройка параметров STANDBY
---------------------------------------------------
sql> ALTER SYSTEM SET log_archive_config = 'DG_CONFIG=(mydb1,mydb2)';
sql> ALTER SYSTEM SET log_archive_dest_1 = 'location=/path/to/arclog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=mydb2';
sql> ALTER SYSTEM SET log_archive_format = '%t_%s_%r.log';

Параметры в log_archive_dest_<N>

NET_TIMEOUT - время (в секундах), которое основной процесс передачи (LNS или LGWR) будет ждать подтверждения от Standby-базы, прежде чем решит, что сетевое соединение разорвано

  • значение по умолчанию 30 секунд (для 11.2.0.4)
  • без явного определения этого параметра сетевой стек может вести себя иначе, рекомендуется явно указать 30, чтобы избежать зависания процесса LNS
  • Oracle рекомендует устанавливать значение не менее 10-30 секунд, слишком низкое значение (например, 1-5 сек) может привести к частым ложным разрывам связи при кратковременных нагрузках на сеть

REOPEN - определяет минимальный интервал времени (в секундах), через который основной сервер предпримет повторную попытку подключения к Standby-базе после возникновения ошибки (сетевой сбой, падение Standby, нехватка места)

  • значение по умолчанию 300 секунд (5 минут)
  • (требуется уточнение) Для чего нужен: Предотвращает зацикливание и чрезмерную нагрузку на CPU/процессы основной базы, которые иначе пытались бы непрерывно переподключиться к упавшему серверу.
  • рекомендации
    • если вам нужна максимально быстрая синхронизация после сбоя, уменьшите это значение до 30-60 секунд
    • если назначение имеет статус OPTIONAL (необязательное), и сеть нестабильна, лучше оставить значение повыше

Обслуживание

-- остановка standby
sql> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
sql> SHUTDOWN IMMEDIATE;

-- запуск standby
sql> STARTUP NOMOUNT;
sql> ALTER DATABASE MOUNT STANDBY DATABASE;
sql> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

-- проверка работы standby
sql> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#, BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;
sql> SELECT database_role FROM v$database;

-- протокол операций связанных с реду-логами, архив-логами и передачей на STANDBY
SELECT * FROM v$dataguard_status

-- процессы ARCH, LNS, их статусы и текущее операции
select * from v$managed_standby;

Прочее

Автоматическое применение логов осуществляет фоновый процесс MRP.

---------------------------------------------------
-- конвертация контрольных файлов PRIMARY в STANDBY
---------------------------------------------------
ALTER DATABASE CONVERT TO physical standby;

Примечания:
* После изменения параметров log_archive_* на PRIMARY или STANDBY, необходимо остановить и запустить STANDBY,
  чтобы новые значения вступили в силу

-- проверка применения архивных логов на STANDBY
select name, dest_id, sequence#, first_time, archived, applied from v$archived_log order by sequence# desc;


Ошибки

ORA-01665: control file is not a standby control file

Данная ошибка возникает если вы пытаетесь смонтировать базу с ролью PRIMARY в режиме STANDBY, при этом для базы нет специальных контрольных файлов для STANDBY.

Вы можете создать дополнительные контрольные файлы или конвертировать обычные в Standby.

Конвертация в Standby

# определение текущей роли базы данных
sql> SELECT database_role FROM v$database;

# конвертация роли базы данных в Standby
sql> ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
sql> SHUTDOWN IMMEDIATE;
sql> STARTUP MOUNT;

# запуск процесса автоматической передачи и применения архивных логов
sql> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE disconnect from session;

ORA-38868: warning: the control file may have incorrect data file structure

Причина: Текущий контрольный файл был создан или преобразован на основе контрольного файла из времени, отличного от времени базы данных.

Решение: Временно откройте базу данных и все подключаемые базы данных в режиме READ ONLY, чтобы синхронизировать управляющий файл со словарем базы данных. Можно также принудительно продолжить восстановление, повторно вызвав RECOVER.

SQL> ALTER DATABASE open read only;
SQL> SHUTDOWN immediate;
SQL> STARTUP nomount;
SQL> ALTER DATABASE mount standby database;
SQL> RECOVER managed standby database USING current logfile disconnect;

Проверка состояния standby

sql> SELECT process, client_process, status, thread#, sequence#, block#, blocks FROM gv$managed_standby;


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