Направление Oracle  
  Конфигурирование стэндбая СУБД посредством Oracle DataGuard  


Эти материалы являются объектом авторского права и защищены законами РФ и международными соглашениями о защите авторских прав. Перед использованием материалов вы обязаны принять условия лицензионного договора на использование этих материалов, или же вы не имеете права использовать настоящие материалы

Авторская площадка "Наши орбиты" состоит из ряда тематических подразделов, являющихся моими лабораторными дневниками, содержащими записи за разное, иногда продолжительно отличающееся, время. Эти материалы призваны рассказать о прошедшем опыте, они никого ни к чему не призывают и совершенно не обязательно могут быть применимы кем-то ещё. Это только лишь истории о прошлом

Начальные слова

При создании стэндбая базы данных исходим из того, что на целевом сервере выполнены предварительные требования к платформе СУБД, развёрнут аналогичный источнику ORACLE_HOME, разделы для данных и софта с достаточной ёмкостью смонтированы. Также необходимо:

1. определиться с сетевыми интерфейсами, IP и соответствующими им DNS-именами, сконфигурировать статический листенер для нового стэндбай — экземпляра
2. подготовить конфигурационную обвязку для нового экземпляра: - spfile, orapw, diagnostic dest
3. проверить SQL-net доступность на сервере - источнике и сервере - приемнике экземпляров источника и приёмника
4. подготовить скрипт дупликации БД для роли — стэндбай и отработать его, при необходимости использовать опции convert
5. ввести новую standby базу в DataGuard конфигурацию, а при необходимости — предварительно создать конфигурацию

1. Конфигурируем LSNR_DG

Конфигурируем с нуля (описано) или добавляем параметры в существующие файлы. Листенер отдельный от продуктового для разнесения функций, например - выключения продуктового листенера при сохранении синхронизации

1.1 создаём каталог и переходим в него

mkdir /oracle/admin/network
cd /oracle/admin/network

1.2 добавляем переменную в профиль ~/.bash_profile UNIX пользователя строкой export TNA_ADMIN=/oracle/admin/network

1.3 Готовим конфигурацию листенера

1.3.1 Копируем из бэкапа файлы listener.ora, tnsnames.ora, sqlnet.ora

1.3.2 При отсутствии бэкапа создаём файлы вручную:

# если нет - создаём файл командой
echo > listener.ora
# вписываем конфигурацию, пример:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = _DNS_имя_сервера_)(PORT = 1521))
    )
  )
SID_LIST_LISTENER = (SID_LIST= (SID_DESC= (SID_NAME=TEST1)(ORACLE_HOME=/oracle/soft/rdbms_11204)))

Для именно 11 версии листенера DataGuart требуется дублирующая строчка с DGB. Добавляем строки конфигурирования стэндбай листенера

LSNR_DG = (DESCRIPTION_LIST =(DESCRIPTION =
     (ADDRESS = (PROTOCOL = TCP)(HOST = _DNS_имя_сервера_)(PORT = 1523))))
SID_LIST_LSNR_DG = (SID_LIST=
    (SID_DESC=(GLOBAL_DBNAME = testdb01.test.ru)
              (SID_NAME=TESTDB01)
              (ORACLE_HOME=/oracle/soft/rdbms_11204))
    (SID_DESC=(GLOBAL_DBNAME = testdb02_a_DGB.test.ru)
              (SID_NAME=TESTDB01)
              (ORACLE_HOME=/oracle/soft/rdbms_11204))
    )

Про отсутствии - создаём файл, не забываем указать в среде окружения TNS_ADMIN=/oracle/admin/network командой "echo > tnsnames.ora", и вписываем конфигурацию, пример:

testdb01_a=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=_DNS_имя_сервера_)\
 (PORT=1523)))(CONNECT_DATA=(SID=test11_a)))

Про отсутствии - создаём файл командой "echo > sqlnet.ora", и вписываем конфигурацию, пример:

sqlnet.expire_time=0
SQLNET.ENCRYPTION_TYPES_SERVER=(3DES168)
DEFAULT_SDU_SIZE = 16384
#NAMES.DIRECTORY_PATH=(tnsnames,EZCONNECT)

2. Готовим конфигурационную обвязку для нового экземпляра

2.1 Для каждого экземпляра проверяем наличие, а при отсутствии - восстанавливаем из бэкапа или копируем с другого участника DataGuard конфигурации файлы: pfile/spfile, orapw_file. После копирования spfile сделать и отредактировать pfile, в т.ч. /oraarch/FRA

3. проверить SQL-net доступность на сервере - источнике и сервере - приемнике экземпляров источника и приёмника, например:

# (3.1) проверяем доступность праймари БД testdb01_b на праймари сервере testsrv01
testsrv01$ sqlplus sys@testdb01_b as sysdba
sqlplus> select name, open_mode from v$database ;

# (3.2) проверяем доступность стэндбай БД testdb01_а на праймари сервере testsrv01
testsrv01$ sqlplus sys@testdb01_a as sysdba
sqlplus> starup nomount
sqlplus> shutdown immediate

# (3.3) проверяем доступность праймари БД testdb01_b на стэндбай сервере testdb01
testdb01$ sqlplus sys@testdb01_b as sysdba
sqlplus> select name, open_mode from v$database ;

# (3.2) проверяем доступность стэндбай БД testdb01_а на стэндбай сервере testdb01
testdb01$ sqlplus sys@testdb01_a as sysdba
sqlplus> starup nomount
sqlplus> shutdown immediate

4. подготовить скрипт дупликации БД для роли - стэндбай и отработать его, при необходимости использовать опции convert, например:

#!/bin/bash
. /oracle/admin/oraenv11204.sh
export NLS_DATE_FORMAT='DD-Mon-YYYY HH24:MI:SS'
export ORACLE_SID=testdb01_a
export NLS_LANG="American_America.UTF8"
DB_BASE=/oradata
export SERVICE_NAME=testdb01.rgs.ru

$ORACLE_HOME/bin/rman << EOF
connect target;
shutdown immediate;
quit
EOF

# перестартовать в MOUNT
$ORACLE_HOME/bin/rman << EOF
connect target;
startup force nomount;
quit
EOF

# отработать дупликацию БД
$ORACLE_HOME/bin/rman << EOF
SPOOL LOG TO 'duplicate_testdb01_to_stb_from_active.log'
connect target sys/XXXXXXXXXX@testdb01_b ;
CONNECT AUXILIARY sys/ XXXXXXXXXX@testdb01_a;

RUN
{
allocate channel src01 type disk;
allocate channel src02 type disk;
allocate auxiliary channel dst01 type disk;
allocate auxiliary channel dst02 type disk;
SET NEWNAME FOR DATABASE '$DB_BASE/$ORACLE_SID/%b';
SET NEWNAME FOR TEMPFILE 1 TO '$DB_BASE/$ORACLE_SID/%b';
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER
 DB_FILE_NAME_CONVERT=('/oradata/testdb01/','$DB_BASE/$ORACLE_SID/') ;
}
quit
EOF
rc=$?
if [ $rc -gt 0 ]; then
  echo "Failed"
  exit 1
fi

5. ввести новую standby базу в DataGuard конфигурацию, а при необходимости - предварительно создать конфигурацию. Предварительно считаем, что в отдельном листенере стэндбая прописана статическая регистрация БД, в имени указано _DGB.домен, и доступ с серверов праймари и стэндбая проверен

- включить DB Broker на созданной стэндбай-БД. При этом имена файлов конфигурации DGB явно не указываем, при старте брокера они не создаются на стэндбай БД, при добавлении БД в конфигурацию DG также не создаются, но при активации (enable database) создаются автоматически
- на праймари БД добавить созданный стэндбай-БД в конфигурацию (dgmgrl> add database …)
- отредактировать параметр конфигурации DataGuard StaticConnectIdentifier (автоматически создаётся с несоответствующим листенеру именем, при переключении автоматически генерируется не соответствующее дефолтному имя - такое изменение позволяет корректно делать switchover)
- при необходимости добавить в spfile стэндбай-БД параметр _query_on_physical (позволяет стартовать БД через dbstart) alter system set "_query_on_physical"=false scope=spfile;

При подготовке pfile перед дупликацией все log_archive_dest кромк FRA удаляются, а после введения в конфигурацию DataGuard для новой БД dgmgrl выводит ошибки, пример:

testbb01_b
 Warning: ORA-16714: the value of property LogArchiveTrace is inconsistent with the database setting
 Warning: ORA-16714: the value of property LogArchiveFormat is inconsistent with the database setting

Для исправления таких ошибок необходимо на новой standby БД

shutdown immediate
create pfile from spfile
# отредактировать pfile, указав для проблемных параметров кроме имеемых общих (*.)
# параметров аналогичные с явным указанием имени экземпляра. Пример

*.log_archive_format='arch_testdb01_%s_%t_%r.arc'
testdb01_c.log_archive_format='arch_testdb01_%s_%t_%r.arc'
*.log_archive_format='arch_testdb01_%s_%t_%r.arc'
testdb01_c.log_archive_format='arch_testdb01_%s_%t_%r.arc'

# а также, при необходимости, выставить общие параметры. Пример
*.archive_lag_target=600

- create spfile from pfile
- startup (при заданном ранее *._query_on_physical=FALSE)

# В случае выставления общих параметров, как в примере выше, синхронизировать
# конфигурацию DB и БД, пример:

Dgmgrl> EDIT DATABASE testdb01_b SET PROPERTY ArchiveLagTarget = '600';

Примечания: смоделировано изменение имени сервиса без суффикса _DGB, выявлена неработоспособность этого варината - в 11 версии в процессе switchover разваливается конфигурация. Также выяснили, что при switchover для подключения к удалённой БД (если подключаемся с других праймари/стэндбёв) не используется ни строка соединения конфигурации, ни StaticConnectIdentifier, но автогенерируемая с суффиксом spfile->DB_DOMAIN. Поэтому всегда отрабатывающий вариант - делать switchover с БД, которая будет праймари

Докопирование файлов при ручном управлении на стэндбае

для БД со стэндбаями в силу разного места расположения данных для primary и standby баз управление файлами выставлено в ручное. Пример

-- на праймари
alter tablespace USER_DATA add datafile '/oradata/testdb01_a/datafile48.dbf'\
 size 100m autoextend on next 100m maxsize unlimited ;
alter tablespace USER_DATA add datafile '?/oradata4/testdb01_a/datafile49.dbf'\
 size 100m autoextend on next 100m maxsize unlimited ;
alter tablespace USER_DATA add datafile '?/oradata4/testdb01_A/datafile50.dbf'\
 size 100m autoextend on next 100m maxsize unlimited ;

-- на standby
select file#,name from v$datafile where name like '%UNNA%' ;
-- получены значения fnum 95,96,97. Создаём, включаем подкат и,
--  после появления очередной ошибки в alert, повторяем
alter database create datafile 95 as '/oradata/testdb01_b/datafile48.dbf' ;
ALTER DATABASE RECOVER managed standby database disconnect;
alter database create datafile 96 as '/oradata/testdb01_b/datafile49.dbf' ;
ALTER DATABASE RECOVER managed standby database disconnect;
alter database create datafile 97 as '/oradata/testdb01_b/datafile50.dbf' ;
ALTER DATABASE RECOVER managed standby database disconnect;

-- в конце возобновляем подкат журналов после каждого добавления файла
ALTER DATABASE RECOVER  managed standby database using current logfile disconnect;

Переключение ролей DataGuard стэндбая

Белонин С.С. (С), июль 2016 года

(даты последующих модификаций не фиксируются)


 
        
   
    Нравится     

(C) Белонин С.С., 2000-2024. Дата последней модификации страницы:2023-03-26 15:23:56