Настройка Data Guard
Технология DataGuard – это такая конфигурация БД Oracle, при которой обеспечивается повышенная надежность и доступность системы, отказоустойчивость и защищенность данных. Реализуется это в виде создания клона основной БД и поддержания его в актуальном состоянии при помощи наката архивных или оперативных журналов, полученных с основной БД.
Различают два типа технологии DataGuard:
Физический StandBy и Логический StandBy
Физический StandBy накатывает журналы на блочном уровне, как бы делая восстановление БД. Этим достигается очень высокая скорость обновления данных. Сама база в это время недоступна для пользователей, но имеется возможность приостановить накат логов и открыть ее временно для чтения. Если БД открывают для чтения записи в обычном режиме, то в режим StandBy вернуться уже нельзя.
Логический StandBy сначала разбирает журналы при помощи LogMiner, превращая их в sql команды, потом применяет обычным способом. При таком подходе БД остается доступной для пользователей на чтение-запись, но с некоторыми ограничениями. Недостаток такой конфигурации в очень медленном накате логов.
Действия по подготовке БД к работе в режиме логического и физического StandBy одинаковые.
Выполняем команду:
ALTER DATABASE FORCE LOGGING;
Добавляем стендбай группу оперативных журналов:
ALTER DATABASE ADD STANDBY LOGFILE GROUP 10
('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500M;
Это необходимо для того, что бы при переключении в стендбай основная БД могла нормально функционировать
В файл настроек добавляем следующие строки:
DB_UNIQUE_NAME=pr_youdb
LOG_ARCHIVE_DEST_1=
'SERVICE=st_youdb LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=st_youdb'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
FAL_SERVER=st_youdb
FAL_CLIENT=pr_youdb
STANDBY_FILE_MANAGEMENT=AUTO
Где pr_youdb – уникальное имя основной базы,
st_youdb – уникальное имя стендбай базы
Включаем режим архивирования логов, если он еще не включен:
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
Делаем RMAN полный бэкап основной БД (без остановки работы!), после чего делаем контрольный файл для стендбай БД:
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/standby.ctl';
Добавляем в файл tnsnames.ora алиасы основной и стендбай БД, после чего перезапускаем листенер:
st_youdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.21.20.88)(PORT = 1521)) )
(CONNECT_DATA =
(SERVICE_NAME = st_youdb) ) )
pr_youdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) )
(CONNECT_DATA =
(SERVICE_NAME = pr_youdb) ) )
И последним шагом копируем бэкап основной БД и созданный контрольный файл на стендбай сервер.
Восстанавливаем БД из бэкапа, скопированного с основной БД, подкладываем скопированный контрольный файл.
В файл параметров добавляем следующие строки:
DB_UNIQUE_NAME=st_youdb
LOG_ARCHIVE_DEST_1=
'SERVICE=pr_youdb LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=pr_youdb'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
FAL_SERVER=pr_youdb
FAL_CLIENT=st_youdb
STANDBY_FILE_MANAGEMENT=AUTO
Добавляем в файл tnsnames.ora алиасы основной и стендбай БД, после чего перезапускаем листенер:
st_youdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) )
(CONNECT_DATA =
(SERVICE_NAME = st_youdb) ) )
pr_youdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.21.21.71)(PORT = 1521)) )
(CONNECT_DATA =
(SERVICE_NAME = pr_youdb) ) )
Запускаем стендбай БД:
STARTUP MOUNT;
Дальнейшие действия зависят от типа стендбай БД.
Физический StandBy
Для того, чтобы начать накат логов на физическом стендбае, необходимо выполнить команду:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
В этом случае накат будет осуществлять фоновый процесс MRP, если же из команды убрать фразу DISCONNECT тогда накат будет осуществляться текущим серверным процессом.
Проверить передачу логов и их накат можно дав команду на основном сервере на переключение логов:
ALTER SYSTEM SWITCH LOGFILE;
В алерт логе при этом должны отображаться события приема логов и их применения.
Чтобы остановить накат логов необходимо выполнить команду:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
После чего можно открыть БД в режиме только чтение:
ALTER DATABASE OPEN;
В случае, если необходимо активировать БД, т.е. перевести в обычный режим работы, необходимо выполнить следующие команды:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
ALTER DATABASE ACTIVATE STANDBY DATABASE;
После этого можно открыть БД для доступа пользователей в режиме чтения-записи:
ALTER DATABASE OPEN;
Вернуться в режим стенбая после активации уже невозможно.
Логический StandBy
По возможности, все таблицы в логическом стендбае должны иметь первичные ключи или уникальные индексы для правильной идентификации модифицированных строк. Если первичный или уникальный ключи отсутствуют, то в качестве ключа будут использоваться все колонки таблицы.
Для создания логического стендбая, на основной БД необходимо построить словарь LogMiner:
EXECUTE DBMS_LOGSTDBY.BUILD;
Конвертировать БД в логический стендбай:
ALTER DATABASE RECOVER TO LOGICAL STANDBY new-db_name;
Стартовать и открыть базу:
STARTUP MOUNT;
ALTER DATABASE OPEN RESETLOGS;
Включить применение логов:
ALTER DATABASE START LOGICAL STANDBY APPLY;
Режим SwitchOver
Режим SwitchOver это такой режим при котором базы меняются ролями. Основная БД становится резервной и наоборот. Это можно делать , например, в случае обновления железа на основном сервере с минимальным временем простоя, необходимым только для переключения БД. Переключение производится в два этапа:
1. Основная база переводится в режим стендбай
2. Резервная база переводится в основную
Для перевода основной БД в резервную, необходимо выполнить следующие команды:
ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
Для перевода резервной БД в основную, нужны следующие команды:
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
SHUTDOWN IMMEDIATE;
STARTUP;
После чего можно включить накат логов на стендбай БД.
Переключение в обратную сторону называется SwitchBack и делается точно так же.
Режим FailOver
Режим FailOver используется в том случае, если основная БД больше не подает признаков жизни. При использовании этого режима необходимо как можно больше логов доставить на стендбай БД, применить их и выполнить переключение. Не рекомендуется делать переключение с помощью команды ALTER DATABASE ACTIVATE STANDBY DATABASE, так как возможна потеря данных.
Для переключения необходимо использовать следующие команды:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
SHUTDOWN IMMEDIATE;
STARTUP;
Если в конфигурации участвовали другие стендбай БД, то с ними ничего делать не нужно, для них этот процесс прозрачен. Накат логов с новой основной БД будет продолжаться как обычно. После восстановления упавшей основной БД ее можно сконфигурировать как стендбай БД.
