Для удобства администрирования Primary и Standby базы будут иметь один и тот же SID, DB_NAME, одинаковыми будут пути расположения файлов и журналов. Различаться инстансы будут по service_names и db_unique_name.
Primary | Stanby | |
SID | oracle | oracle |
Service_names | oracle_prd | oracle_stb |
DB_name | oracle | oracle |
Host | oraclem | oracles |
Primary DB создана.
ORACLE_HOME установлена в /opt/oracle/ora11g/11.2.0.2/oradb
Grid Control Agents установлены.
Настройка Net services
1. Правим /etc/hosts
127.0.0.1 localhost
10.0.0.1 oraclem
10.0.0.2 oracles
2. Настройка listener для статической регистрации сервисов на Primary-хосте:
cat $ORACLE_HOME/network/admin/listener.ora
SID_LIST_LISTENER =и на Standby-хосте
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = oracle_prd)
(ORACLE_HOME = /opt/oracle/ora11g/11.2.0.2/oradb)
(SID_NAME = oracle)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oraclem)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = oracle_stb)
(ORACLE_HOME = /opt/oracle/ora11g/11.2.0.2/oradb)
(SID_NAME = oracle)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracles)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
3. Настройка TNSnames на обоих серверах.
Предварительная настройка Primary DB
4. Если это ещё не сделано, нужно перевести Primary базу в archivelog mode, указав место, где будут храниться архивные логи.
6. Создание STANDBY LOGFILS
Размер лога должен быть не меньше, чем размер redologs.
Количество групп не меньше (лучше на одну больше), чем количество redolog groups.
Для создание нового instance с новым именем можно снять холодный или горячий backup Развернуть его на standby-сервере и, в общем случае, для переименования instance воспользоваться утилитой nid. Этот способ описан в документации.
Я воспользуюсь командой rman duplicate. Если посмотреть на лог её выполнения, то можно заметить что она делает то же самое (переименовывать instance не нужно)
7. Подготовка конфигурационных файлов для Standby instance.
На primary host необходимо стоздать pfile.
10. Запускаем instance в nomount на Standby-host.
Копирование БД.
11. Если ping прошёл успешно, соединяемся с удалённой бд, запустив на primary-сервере
ORA-19527: physical standby redo log must be renamed или
RMAN-05001: auxiliary file name undotbs01.dbf conflicts with a file used by the target database
Если восстановление завершилось неудачно, перед новой попыткой необходимо удалить со standby сервера spfile, controlfiles и datafiles, если они были созданы.
Настройка Standby
Upd: Для запуска брокера лучше использовать запуск утилиты dgmgrl без параметров логин/пароль и авторизовываться командой connect уже из консоли брокера. Если этого не делать, в некоторых случаях команды брокеру не будут выполняться.
или вот так:
oracle=
cat $ORACLE_HOME/network/admin/tnsnames.ora
oracle_stb =После настройки служб можно протестировать доступность Primary-сервера.
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracles)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oracle_stb)
)
)
oracle_prd =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oraclem)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oracle_prd)
)
)
oracle_prd_DGB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oraclem)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oracle_prd )
)
)
oracle_stb_DGB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = oracles)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oracle_stb )
)
)
Предварительная настройка Primary DB
4. Если это ещё не сделано, нужно перевести Primary базу в archivelog mode, указав место, где будут храниться архивные логи.
alter system set oracle.log_archive_format='%t_%s_%r.arc';5. Настройка необходимых для standby параметров на Primary-сервере.
alter system set log_archive_dest_1='location=/bachup/archive/oracle';
alter system set log_archive_max_processes = 5;
alter database archivelog;
alter database open
shutdown immediate
startup mount
- Необходимо включить принудительное логирование всех операций с БД.
alter database force logging;
- Для использования возможности Active Standby необходимо выставить на обеих базах параметр compatible не ниже 11.2.0.2 и audit_trail в 'NONE'.
alter system set audit_trail='NONE';
alter system set compatible='11.2.0.2';
- Для автоматического создания файлов на Standby-сервере при создании их на Primary нужно выставить
alter system set standby_file_management=AUTO;
- Для обеспечения уникальности имён.
alter system set db_unique_name='oracle_prd'; на Primary
6. Создание STANDBY LOGFILS
Размер лога должен быть не меньше, чем размер redologs.
Количество групп не меньше (лучше на одну больше), чем количество redolog groups.
ALTER DATABASE ADD STANDBY LOGFILE GROUP 11 '/media/redo/oracle/redo01.stb' SIZE 50M REUSE;Создание Standby instance.
ALTER DATABASE ADD STANDBY LOGFILE GROUP 12 '/media/redo/oracle/redo02.stb' SIZE 50M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 13 '/media/redo/oracle/redo03.stb' SIZE 50M REUSE;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 14 '/media/redo/oracle/redo04.stb' SIZE 50M REUSE;
Для создание нового instance с новым именем можно снять холодный или горячий backup Развернуть его на standby-сервере и, в общем случае, для переименования instance воспользоваться утилитой nid. Этот способ описан в документации.
Я воспользуюсь командой rman duplicate. Если посмотреть на лог её выполнения, то можно заметить что она делает то же самое (переименовывать instance не нужно)
7. Подготовка конфигурационных файлов для Standby instance.
На primary host необходимо стоздать pfile.
create pfile from spfile;в получившемся файле отредактировать параметр
db_unique_name='oracle_stb'8. Копирование на на standby-host файлы orarwd и pfile:
scp /opt/oracle/ora11g/11.2.0.2/oradb/dbs/orapworacle oracle@10.0.0.2:/opt/oracle/ora11g/11.2.0.2/oradb/dbs/orapworacle9. На Standby-сервере, так же как на Primary, должны быть созданы все директории для хранения datafiles, archive/redo-logs, controlfiles.
10. Запускаем instance в nomount на Standby-host.
sqlplus / as sysdba
startup nomount
Так как в конфигурационном файле listener.ora используется статическая регистрация, этот instance будет доступен с Primary хоста. На Primmary хосте можно проверить соединение с удалённой БД командой
tnsping oracle_stbесли пинг не прошёл, можно поискать ошибки в настройках listener или параметрах service_names и db_name.
Копирование БД.
11. Если ping прошёл успешно, соединяемся с удалённой бд, запустив на primary-сервере
rman target / auxiliary sys/Password@oracle_stbДля случая, когда расположение файлов журналов исходной базы и файлов базы-назначения совпадают, необходимо явно указать одинаковые пути "конвертации" логфайлов. При совпадении путей расположения файлов данных необходимо добавить NOFILENAMECHECK в выражение duplicate target database
duplicate target database for standby from active database NOFILENAMECHECKЕсли этого не сделать, восстановление закончится с шибкой
spfile
set db_unique_name='oracle_stb'
set control_files='/media/data/oracle/control01.ctl','/media/data/oracle/control02.ctl' set audit_file_dest='/opt/oracle/ora11g/admin/oracle/adump'
set LOG_FILE_NAME_CONVERT='/media/redo/oracle','/media/redo/oracle';
ORA-19527: physical standby redo log must be renamed или
RMAN-05001: auxiliary file name undotbs01.dbf conflicts with a file used by the target database
Если восстановление завершилось неудачно, перед новой попыткой необходимо удалить со standby сервера spfile, controlfiles и datafiles, если они были созданы.
Настройка Standby
12. Для Standby database.
13. На Primary database.
alter system set log_archive_config='dg_config=(oracle_prd,oracle_stb)';
alter system set fal_server='oracle_stb';
alter system set log_archive_dest_1='LOCATION=/backup/archivelog/oracle VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oracle_prd'
alter system set log_archive_dest_2='service=oracle_stb db_unique_name=oracle_stb valid_for=(all_logfiles,primary_role)'
Подробнее про log_archive_dest_n здесь.
14. Установка режима работы.
15. Запускаем standby
Alter database recover managed standby database disconnect from session;
Alter database recover managed standby database disconnect from session USING CURRENT LOGFILE
Настройка брокера
Брокер можно настроить вручную или через Grid Control.
для Grid Control версии 10.2.0.5 конфигурирование завершится c ошибкой
ORA-16538 When Adding Existent 11gR2 Standby Database to Grid Control 10.2.0.5 [ID 1145294.1]
Этот bug лечится установкой Patch 8267406. Или ручным конфигурированием Dataguard broker.
16. Ручная настройка брокера. (workaround)
По умолчанию брокер хранит конфигурационые файлы в $ORACLE_HOME/dbs
можно указать место хранения явно. На обеих базах.
alter system set log_archive_config='dg_config=(oracle_prd,oracle_stb)';
alter system set fal_server='oracle_prd';
alter system set log_archive_dest_1='location=/backup/archivelog/oracle VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oracle_stb';
alter system set log_archive_dest_2='service=oracle_prd db_unique_name=oracle_prd VALID_FOR=(ALL_LOGFILES,PRIMARY_ROLE)';
alter system set log_archive_config='dg_config=(oracle_prd,oracle_stb)';
alter system set fal_server='oracle_stb';
alter system set log_archive_dest_1='LOCATION=/backup/archivelog/oracle VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=oracle_prd'
alter system set log_archive_dest_2='service=oracle_stb db_unique_name=oracle_stb valid_for=(all_logfiles,primary_role)'
Подробнее про log_archive_dest_n здесь.
14. Установка режима работы.
Alter database set standby database to maximize performance;Про режимы работы можно почитать в документации. Это лучше сделать до того, как вслед за отключившимся primary автоматически сложится standby.
Alter database set standby database to maximize protection;
Alter database set standby database to maximize availability;
15. Запускаем standby
- В режиме наката архивных логов
Alter database recover managed standby database disconnect from session;
- в режиме realtime apply
Alter database recover managed standby database disconnect from session USING CURRENT LOGFILE
- в режиме Active standby
alter database open read only;Stabdby готов.
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT LOGFILE;
Настройка брокера
Брокер можно настроить вручную или через Grid Control.
для Grid Control версии 10.2.0.5 конфигурирование завершится c ошибкой
ORA-16538 When Adding Existent 11gR2 Standby Database to Grid Control 10.2.0.5 [ID 1145294.1]
Этот bug лечится установкой Patch 8267406. Или ручным конфигурированием Dataguard broker.
16. Ручная настройка брокера. (workaround)
По умолчанию брокер хранит конфигурационые файлы в $ORACLE_HOME/dbs
можно указать место хранения явно. На обеих базах.
alter system set dg_broker_start=TRUE17. Создаём конфигурацию брокера. Добавляем обе базы.
alter system set Dg_broker_config_file1='/opt/oracle/ora11g/11.2.0.2/oradb/dbs/Dg_broker.cfig';
dgmgrl
connect sys/Password
create configuration dgb_oracle as primary database is oracle_prd connect identifier is oracle_prd;
add database oracle_stb as connect identifier is oracle_stb maintained as physical;
Если всё сделано правильно, можно посмотреть конфигурацию.
enable configuration;
show configuration;
Можно идти в Gridcontrol, настраивать оба instance и жать swichower.
Upd: Для запуска брокера лучше использовать запуск утилиты dgmgrl без параметров логин/пароль и авторизовываться командой connect уже из консоли брокера. Если этого не делать, в некоторых случаях команды брокеру не будут выполняться.
Tnsnames для пользователей.
oracle=
(DESCRIPTION_LIST=
(FAILOVER=true)
(LOAD_BALANCE=no)
(DESCRIPTION=
(ADDRESS = (PROTOCOL=TCP) (HOST= oraclem) (PORT=1521))
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=oracle_prd)
)
)
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP) (HOST=oracles) (PORT=1521))
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=oracle_stb)
)
)
)
или вот так:
oracle=
(DESCRIPTION =
(FAILOVER=on)
(CONNECT_TIMEOUT=5)
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL=TCP) (HOST= oraclem) (PORT=1521)
(ADDRESS = (PROTOCOL=TCP) (HOST= oracles) (PORT=1521)
)
(CONNECT_DATA=
(SERVER=dedicated)
(SERVICE_NAME=oracle_prd)
)
)
Ссылки.
Достаточно старое руководство от Волкова:
Документация: