
В этой статье расскажем, как легко создать Data Guard с помощью service name.
Прежде чем приступить к описанию шагов, необходимо убедиться, что выполнены следующие предварительные условия:
Два сервера, на которых установлена Oracle (19.3). На главном сервере (oracle21) создана база данных CDB с одной PDB, тогда как на вторичном сервере (oracle21dg) установлено только Oracle , без базы данных. На обоих серверах в качестве системы хранения настроена ASM.

ОСНОВНАЯ БАЗА ДАННЫХ
1. Перевести базу данных в режим принудительной регистрации.
Рекомендуется принудительно включить ведение журнала в базе данных, чтобы все изменения в базе данных реплицировались в нашу резервную базу данных, независимо от того, настроены ли объекты в режиме «nologging»
Для этого выполняем: `
alter database force logging;`
oracle> sqlplus / as sysdba
SQL*Plus: версия 19.0.0.0.0 – Production, вторник, 12 мая 2026 г., 19:12:24
Версия 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. Все права защищены.
Подключено к:
Oracle 19c Enterprise Edition Release 19.0.0.0.0 – Production
Версия 19.3.0.0.0
SQL> alter database force logging;
База данных изменена.
SQL> exit
Отключено от Oracle 19c Enterprise Edition Release 19.0.0.0.0 – Production
Версия 19.3.0.0.0
oracle>
2. Создание резервных журналов повторения.
Теперь создадим журналы повторения, которые позволяют выполнять повтор в режиме реального времени.
Передовой опыт использования журналов повторных записей;
- Размер резервных журналов повторения должен быть таким же, как и у журналов повторения.
- Наличие большого количества групп, назначенных одному конфигурационному потоку RAC
- Пусть это будут группы, состоящие из одного участника.
- Количество групп в потоке должно соответствовать количеству групп в журналах redo.
Мы проверили имеющиеся журналы redo и их размер (primary).
select thread#, group#, bytes/1024/1024 MB, status from v$log;
oracle> sqlplus / as sysdba
SQL> select thread#,group#,bytes/1024/1024 MB, status from v$log;
THREAD# GROUP# MB STATUS
————————————————————
1 1 200 INACTIVE
1 2 200 CURRENT
1 3 200 INACTIVE
В данном случае у нас есть 3 группы, каждая из которых имеет один поток, а размер каждой составляет 200 МБ.
Выполняем следующий оператор. Рекомендуется создать на один файл redo log резервной копии больше, чем файлов redo log. Таким образом, потребуется 4xthread файлов redo log резервной копии размером 200 МБ.
alter database add standby logfile thread 1
group 7 (‘+DATA’) size 209715200,
group 8 (+’DATA’) size 209715200,
group 9 (‘+DATA’) size 209715200,
group 10 (‘+DATA’) size 209715200;
Мы убедились, что они были созданы правильно.
select THREAD#, a.GROUP#, member from v$standby_log a,
v$logfile b where a.GROUP#=b.GROUP# order by 1,2,3; 2
THREAD # GROUP # MEMBER
———— —————- ————————————————————————
1 7 +DATA/UPGR/ONLINELOG/group_7.260.1233147371
1 8 +DATA/UPGR/ONLINELOG/group_8.289.1233150865
1 9 +DATA/UPGR/ONLINELOG/group_9.287.1233147383
1 10 +DATA/UPGR/ONLINELOG/group_10.288.1233147399
3. Включить управление файлами в режиме ожидания
Мы убедились, что в базе данных параметр STANDBY_FILE_MANAGEMENT имеет значение AUTO.
SQL> alter system set STANDBY_FILE_MANAGEMENT=AUTO scope=both ;
Система изменена.
SQL> show parameter STANDBY_FILE_MANAGEMENT
ИМЯ ТИП ЗНАЧЕНИЕ
———————————— ———– ——————————
standby_file_management string AUTO
SQL>
3. Копируем файл с паролями
Мы копируем файл паролей из основной базы данных в резервную.
Мы ищем файл с паролями на первичном сервере:
oracle> srvctl config database -d UPGR | grep password
Файл паролей: +DATA/UPGR/PASSWORD/orapwUPGR
Мы извлекли файл с паролями из ASM отправить его на резервный сервер.
asmcmd cp +FRA/TESTING/PASSWORDFILE/orapwtesting /tmp
Мы отправляем файл с паролями на резервный сервер.
oracle> scp orapwUPGR oracle:/tmp
oracle password:
orapwUPGR 100% 2048 780,9 КБ/с 00:00
oracle> cp orapwUPGRoracle
4. Создаем файл pfile для резервного сервера на основе файла pfile основного сервера и копируем его на резервный сервер с помощью scp.
oracle> scp initUPGR.ora oracle:/tmp
oracle Парольoracle:
initUPGR.ora
5. Вносим изменения в файл PFILE в резервной базе данных
Мы создали необходимую структуру:
mkdir -poracle
В нашем случае изменения минимальны. Мы заменили UPGR на UPGRDG.

Важно: значение db_name должно оставаться прежним, при этом необходимо изменить значение db_unique_name.
oracle> cat UPGRDG.ora
oracle
ORACLEoracle
ORACLEoracle
ORACLE
export ORACLE
export ORACLE
export ORACLE
oracle/.local/bin:/oracle:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:oracle
oracle
export TNS_ADMIN
export ORACLE
Параметры среды, с помощью которых мы управляем резервной базой данных.
Мы запускаем базу данных в режиме standby в режиме nomountс помощью ранее созданного файла pfile.

Мы остановили базу данных, зарегистрировали её в кластере и запустили в режиме nomount.

Прежде чем продолжить, давайте зарегистрируем нашу новую резервную базу данных в кластере.
oracle> srvctl add database -d UPGRDG -oraclehomeoracle-diskgroup DATA,FRA -role physical_standby -pwfile +DATA/UPGRDG/PASSWORD/orapwUPGRDG -spfile +DATA/UPGRDG/PARAMETERFILE/spfileUPGRDG
Мы запускаем базу данных в режиме nomount.
oracle> srvctl start database -d UPGRDG -o nomount
6. Создаем файл tnsnames.ora, в котором указаны оба сервера
На обоих серверахдолжны быть записи как в основной, так и в резервной базе данных.
oracle> cat tnsnames.ora
PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.142)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = UPGR)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.81)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = UPGRDG)
)
)
Мы проверили на обоих серверах, что можем подключиться ко всем базам данных, которые у нас есть на серверах.
oracle> sqlplus sys/***@PRIMARY as sysdba
SQL*Plus
SQL*Plus: версия 19.0.0.0.0 – Production, среда, 13 мая 2026 г., 18:58:30
Версия 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. Все права защищены.
Подключено к:
Oracle 19c Enterprise Edition Release 19.0.0.0.0 – Production
Версия 19.3.0.0.0
SQL> exit
Отключено от Oracle 19c Enterprise Edition Release 19.0.0.0.0 – Production
Версия 19.3.0.0.0
oracle> sqlplus sys/***@STANDBY as sysdba
SQL*Plus: Release 19.0.0.0.0 – Production on Wed May 13 18:58:41 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. Все права защищены.
Подключено к:
Oracle 19c Enterprise Edition Релиз 19.0.0.0.0 – Производственная среда
Версия 19.3.0.0.0
7. Восстанавливаем файл управления на резервной базе данных
Первый шаг — восстановить файл управления, указав в нём службу основной базы данных.
Для этого у меня есть этот скрипт, который ты можешь применить к своей базе данных
Создаем скрипт 01-restore_controlfile.sh и запускаем его.
srvctl stop database -d $ORACLE_UNQNAME -o abort
rman target / << EOF
run{
startup nomount
restore standby controlfile from service «PRIMARY»;
}
exit
EOF
srvctl stop database -d $ORACLE_UNQNAME -o abort
srvctl start database -d $ORACLE_UNQNAME -o mount
oracle> sh -x ./01-restore_controlfile.sh
+ srvctl stop database -d UPGRDG -o abort
PRCC-1016 : UPGRDG уже остановлен
+ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production on Fri May 15 05:16:12 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle its affiliates. All rights reserved.
connected to target database (не запущена)
RMAN> 2> 3> 4>
Oracle запущен
Общая системная глобальная область 2516582152 байт
Фиксированный размер 9137928 байт
Переменный размер 553648128 байт
Буферы базы данных 1946157056 байт
Буферы повторения 7639040 байт
Начало восстановления 15 мая-26
с использованием целевого файла управления базой данных вместо каталога восстановления
выделенный канал: ORA_DISK_1
канал ORA_DISK_1: SID=44 тип устройства=DISK
канал ORA_DISK_1: начало восстановления набора резервных копий файлов данных
канал ORA_DISK_1: использование набора сетевых резервных копий из службы PRIMARY
канал ORA_DISK_1: восстановление файла управления
канал ORA_DISK_1: восстановление завершено, прошедшее время: 00:00:06
имя выходного файла=+DATA/UPGRDG/CONTROLFILE/control01.ctl
имя выходного файла=+FRA/UPGRDG/CONTROLFILE/control02.ctl
Восстановление завершено 15 мая 2026 г.
RMAN>
Recovery Manager завершен.
+ srvctl stop database -d UPGRDG -o abort
PRCC-1016 : UPGRDG уже остановлен
+ srvctl start database -d UPGRDG -o mount
8. Восстанавливаем базу данных с помощью service name.
Для этого мы создадим еще один скрипт — 02_restore_db.sh. Базы данных должны работать в режиме archivelog.
Важно!! Если ваша база данных зашифрована с помощью TDE, перед запуском восстановления необходимо скопировать файл TDE из основной базы данных в резервную.
rman target sys/***@STANDBY << EOF
run{
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate channel c3 type disk;
allocate channel c4 type disk;
allocate channel c5 type disk;
restore database from service «PRIMARY» section size 100G;
switch datafile all;
}
exit
EOF
srvctl status database -d $ORACLE_UNQNAME
<pre>oracle@oracle21dg> sh -x ./02_restore_db.sh
+ rman target sys/oracle@STANDBY
Recovery Manager: Release 19.0.0.0.0 - Production on Fri May 15 06:10:06 2026
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database: UPGR (DBID=369639787, not open)
RMAN> 2> 3> 4> 5> 6> 7> 8> 9>
using target database control file instead of recovery catalog
allocated channel: c1
channel c1: SID=42 device type=DISK
allocated channel: c2
channel c2: SID=1 device type=DISK
allocated channel: c3
channel c3: SID=45 device type=DISK
allocated channel: c4
channel c4: SID=44 device type=DISK
allocated channel: c5
channel c5: SID=52 device type=DISK
Starting restore at 15-MAY-26
channel c1: starting datafile backup set restore
channel c1: using network backup set from service PRIMARY
channel c1: specifying datafile(s) to restore from backup set
channel c1: restoring datafile 00001 to +DATA/UPGR/DATAFILE/system.271.1233295843
channel c1: restoring section 1 of 1
channel c2: starting datafile backup set restore
channel c2: using network backup set from service PRIMARY
channel c2: specifying datafile(s) to restore from backup set
channel c2: restoring datafile 00003 to +DATA/UPGR/DATAFILE/sysaux.266.1233295845
channel c2: restoring section 1 of 1
channel c3: starting datafile backup set restore
channel c3: using network backup set from service PRIMARY
channel c3: specifying datafile(s) to restore from backup set
channel c3: restoring datafile 00004 to +DATA/UPGR/DATAFILE/undotbs1.260.1233295849
channel c3: restoring section 1 of 1
channel c4: starting datafile backup set restore
channel c4: using network backup set from service PRIMARY
channel c4: specifying datafile(s) to restore from backup set
channel c4: restoring datafile 00005 to +DATA/UPGR/51692FD4BC27283DE065000000000001/DATAFILE/system.259.1233295861
channel c4: restoring section 1 of 1
channel c5: starting datafile backup set restore
channel c5: using network backup set from service PRIMARY
channel c5: specifying datafile(s) to restore from backup set
channel c5: restoring datafile 00006 to +DATA/UPGR/51692FD4BC27283DE065000000000001/DATAFILE/sysaux.273.1233295901
channel c5: restoring section 1 of 1
channel c3: restore complete, elapsed time: 00:01:36
channel c3: starting datafile backup set restore
channel c3: using network backup set from service PRIMARY
channel c3: specifying datafile(s) to restore from backup set
channel c3: restoring datafile 00007 to +DATA/UPGR/DATAFILE/users.272.1233295949
channel c3: restoring section 1 of 1
channel c3: restore complete, elapsed time: 00:00:50
channel c3: starting datafile backup set restore
channel c3: using network backup set from service PRIMARY
channel c3: specifying datafile(s) to restore from backup set
channel c3: restoring datafile 00008 to +DATA/UPGR/51692FD4BC27283DE065000000000001/DATAFILE/undotbs1.265.1233296003
channel c3: restoring section 1 of 1
channel c3: restore complete, elapsed time: 00:01:45
channel c3: starting datafile backup set restore
channel c3: using network backup set from service PRIMARY
channel c3: specifying datafile(s) to restore from backup set
channel c3: restoring datafile 00009 to +DATA/UPGR/5169EC3316F93919E065000000000001/DATAFILE/system.270.1233296115
channel c3: restoring section 1 of 1
channel c4: restore complete, elapsed time: 00:04:30
channel c4: starting datafile backup set restore
channel c4: using network backup set from service PRIMARY
channel c4: specifying datafile(s) to restore from backup set
channel c4: restoring datafile 00010 to +DATA/UPGR/5169EC3316F93919E065000000000001/DATAFILE/sysaux.269.1233296135
channel c4: restoring section 1 of 1
channel c5: restore complete, elapsed time: 00:04:23
channel c5: starting datafile backup set restore
channel c5: using network backup set from service PRIMARY
channel c5: specifying datafile(s) to restore from backup set
channel c5: restoring datafile 00011 to +DATA/UPGR/5169EC3316F93919E065000000000001/DATAFILE/undotbs1.268.1233296153
channel c5: restoring section 1 of 1
channel c2: restore complete, elapsed time: 00:06:55
channel c2: starting datafile backup set restore
channel c2: using network backup set from service PRIMARY
channel c2: specifying datafile(s) to restore from backup set
channel c2: restoring datafile 00012 to +DATA/UPGR/5169EC3316F93919E065000000000001/DATAFILE/users.267.1233296263
channel c2: restoring section 1 of 1
channel c5: restore complete, elapsed time: 00:02:06
channel c2: restore complete, elapsed time: 00:00:44
channel c3: restore complete, elapsed time: 00:03:39
channel c1: restore complete, elapsed time: 00:08:36
channel c4: restore complete, elapsed time: 00:03:48
Finished restore at 15-MAY-26
released channel: c1
released channel: c2
released channel: c3
released channel: c4
released channel: c5
RMAN>
Recovery Manager complete.
+ srvctl status database -d UPGRDG
La base de datos no se está ejecutando.
</pre>
9. Очистить файл журнала
Очищаются все журналы redo и резервные журналы redo для приведения их в соответствие с новой базой данных (резервной),
Мы создаем файл 03-clear_online.sql и запускаем его в базе данных standy.
begin
for log_cur in (select group# group_no from v$standby_log)
loop
execute immediate ‘alter database clear logfile group ‘||log_cur.group_no;
end loop;
end;
/
SQL> @03_clear_online.sql
Процедура PL/SQL успешно завершена.
/
Процедура PL/SQL успешно завершена.
9. Настройка Data Broker
Для централизации и упрощения работы среды Data Guard настоятельно рекомендуется настроить Oracle Guard Broker. В противном случае все операции придется выполнять вручную.
Режим ожидания
ALTER SYSTEM SET dg_broker_config_file1 = '+DATA/UPGRDG/dr1.dat' scope=both sid='*';
ALTER SYSTEM SET dg_broker_config_file2 = '+FRA/UPGRDG/dr2.dat' scope=both sid='*';
SQL> show parameter broker
ИМЯ TYPE VALUE
------------------------------------ ----------- ------------------------------
connection_brokers string ((TYPE=DEDICATED)(BROKERS=1)),
((TYPE=EMON)(BROKERS=1))
dg_broker_config_file1 string oracle
_1/dbs/dr1UPGR.dat
dg_broker_config_file2 string oracle
_1/dbs/dr2UPGR.dat
dg_broker_start boolean FALSE
use_dedicated_broker boolean FALSE
SQL> alter system set dg_broker_config_file1='+DATA/UPGRDG/dr1.dat' scope=both sid='*';
alter system set dg_broker_config_file2='+FRA/UPGRDG/dr2.dat' scope=both sid='*';
Система изменена.
SQL> SQL>
Система изменена.
SQL> show parameter broker
ИМЯ TYPE VALUE
------------------------------------ ----------- ------------------------------
connection_brokers string ((TYPE=DEDICATED)(BROKERS=1)),
((TYPE=EMON)(BROKERS=1))
dg_broker_config_file1 string +DATA/UPGRDG/dr1.dat
dg_broker_config_file2 string +FRA/UPGRDG/dr2.dat
dg_broker_start boolean FALSE
use_dedicated_broker boolean FALSE
SQL>
Начальная школа
ALTER SYSTEM SET dg_broker_config_file1 = '+DATA/UPGR/dr1.dat' scope=both sid='*';
ALTER SYSTEM SET dg_broker_config_file2 = '+FRA/UPGR/dr2.dat' scope=both sid='*';
SQL> show parameter broker
ИМЯ TYPE VALUE
------------------------------------ ----------- ------------------------------
connection_brokers string ((TYPE=DEDICATED)(BROKERS=1)),
((TYPE=EMON)(BROKERS=1))
dg_broker_config_file1 string oracle
_1/dbs/dr1UPGR.dat
dg_broker_config_file2 string oracle
_1/dbs/dr2UPGR.dat
dg_broker_start boolean FALSE
use_dedicated_broker boolean FALSE
SQL> alter system set dg_broker_config_file1='+DATA/UPGRDG/dr1.dat' scope=both sid='*';
alter system set dg_broker_config_file2='+FRA/UPGRDG/dr2.dat' scope=both sid='*';
Система изменена.
SQL> SQL>
Система изменена.
SQL> show parameter broker
ИМЯ TYPE VALUE
------------------------------------ ----------- ------------------------------
connection_brokers string ((TYPE=DEDICATED)(BROKERS=1)),
((TYPE=EMON)(BROKERS=1))
dg_broker_config_file1 string +DATA/UPGRDG/dr1.dat
dg_broker_config_file2 string +FRA/UPGRDG/dr2.dat
dg_broker_start boolean FALSE
use_dedicated_broker boolean FALSE
SQL>
Мы включили Oracle Broker в обеих базах данных.
Режим ожидания
SQL> alter system set dg_broker_start=true scope=both sid=’*’;
SQL> alter system register;
Начальная школа
SQL> alter system set dg_broker_start=true scope=both sid=’*’;
Мы регистрирум базы данных в Oracle DataGuard Broker следующим образом:
Primary: dgmgrl
connect sys/password@PRIMARY as sysdba
CREATE CONFIGURATION dgconfigUPGR AS PRIMARY DATABASE IS UPGR CONNECT IDENTIFIER IS PRIMARY;
ADD DATABASE ‘UPGRDG’ AS CONNECT IDENTIFIER IS ‘STANDBY’;
show configuration;
dgmgrl
DGMGRL для Linux: версия 19.0.0.0.0 – Производственная среда, пятница, 15 мая, 15:37:59 2026 г.
Версия 19.3.0.0.0
Добро пожаловать в DGMGRL, введите «help» для получения информации.
DGMGRL> connect sys/***@PRIMARY as sysdba
Подключено к «UPGR»
Подключено как SYSDBA.
DGMGRL> CREATE CONFIGURATION dgconfigUPGR AS PRIMARY DATABASE IS UPGR CONNECT IDENTIFIER IS PRIMARY;
Конфигурация «dgconfigupgr» создана с основной базой данных «upgr»
ADD DATABASE ‘UPGRDG’ AS CONNECT IDENTIFIER IS ‘STANDBY’;
База данных «UPGRDG» добавлена
DGMGRL> show configuration
Конфигурация – dgconfigupgr
Режим защиты: MaxPerformance
Участники:
upgr – Первичная база данных
UPGRDG – Физическая резервная база данных
Быстрое переключение при сбое: Отключено
Статус конфигурации:
ОТКЛЮЧЕНО
Перед тем как включить эту настройку, рекомендуется перезапустить резервную базу данных.
srvctl stop database -d UPGRDG
srvctl start database -d UPGRDG -o mount
Теперь осталось только включить настройки oracle Guard Broker с помощью команды `enable configuration`;
DGMGRL> enable configuration;
Включено.
Мы убедились, что всё в порядке, статус — SUCCESS.
DGMGRL> show configuration
Конфигурация – dgconfigupgr
Режим защиты: MaxPerformance
Участники:
upgr – Основная база данных
UPGRDG – Физическая резервная база данных
Быстрое переключение при сбое: Отключено
Статус конфигурации:
УСПЕХ ( статус обновлен 38 секунд назад)
В этой статье настроили базу данных с одним экземпляром, но эти шаги применимы и к среде RAC: вам нужно будет лишь настроить в файле init.ora параметры, характерные для RAC, остальные шаги остаются такими же.





