вторник, 24 февраля 2009 г.

Создание резервной БД Oracle


Два сервера OMEGA01 и OMEGA02

Создадим

на сервере omega01.localdomain  Primary DB
на сервере omega02.localdomain  Standby DB


На сервере  omega01.localdomain  создаем DB:

Global Database Name: TEST_OMEGA01
SID: TEST


*************************************************************************************************************************************
Во время создания базы должно быть сконфигурирована область FRA:
alter system set DB_RECOVERY_FILE_DEST = '+FRA' scope=spfile sid='*';
-- alter system set DB_RECOVERY_FILE_DEST = '/u01/app/oracle/fast_recovery_area' scope=both sid='*';
alter system set DB_RECOVERY_FILE_DEST_SIZE = 10G scope=spfile sid='*';
alter system set LOG_ARCHIVE_DEST_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=spfile sid='*';
*************************************************************************************************************************************


На сервере omega01.localdomain создаем следующую конфигурацию:


$ vi $ORACLE_HOME/network/admin/listener.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = omega01.localdomain)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = TEST_OMEGA01)
      (ORACLE_HOME   = /u01/app/oracle/product/11.2.0.4)
      (SID_NAME      = TEST)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = TEST_OMEGA01_DGMGRL)
      (ORACLE_HOME   = /u01/app/oracle/product/11.2.0.4)
      (SID_NAME      = TEST)
    )
  )

#################################
# standard parameters
#################################
ADR_BASE_LISTENER = /u01/app/oracle
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET
#################################
# extended parameters
#################################
TRACE_LEVEL_LISTENER       = OFF
STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER   = 120
INBOUND_CONNECT_TIMEOUT_LISTENER = 120
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF



$ vi $ORACLE_HOME/network/admin/sqlnet.ora

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.EXPIRE_TIME = 10
ADR_BASE = /u01/app/oracle



$ vi $ORACLE_HOME/network/admin/tnsnames.ora

TEST_OMEGA01 =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (ADDRESS_LIST=
        (ADDRESS = (PROTOCOL = TCP)(HOST = omega01.localdomain)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = TEST_OMEGA01)
    )
  )

TEST_OMEGA02 =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (ADDRESS_LIST=
        (ADDRESS = (PROTOCOL = TCP)(HOST = omega02.localdomain)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = TEST_OMEGA02)
    )
  )


На сервере omega02.localdomain создаем следующую конфигурацию:


$ vi $ORACLE_HOME/network/admin/listener.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = omega02.localdomain)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = TEST_OMEGA02)
      (ORACLE_HOME   = /u01/app/oracle/product/11.2.0.4)
      (SID_NAME      = TEST)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = TEST_OMEGA02_DGMGRL)
      (ORACLE_HOME   = /u01/app/oracle/product/11.2.0.4)
      (SID_NAME      = TEST)
    )
  )

#################################
# standard parameters
#################################
ADR_BASE_LISTENER = /u01/app/oracle
ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER=ON
VALID_NODE_CHECKING_REGISTRATION_LISTENER=SUBNET
#################################
# extended parameters
#################################
TRACE_LEVEL_LISTENER       = OFF
STARTUP_WAIT_TIME_LISTENER = 0
CONNECT_TIMEOUT_LISTENER   = 120
INBOUND_CONNECT_TIMEOUT_LISTENER = 120
SUBSCRIBE_FOR_NODE_DOWN_EVENT_LISTENER=OFF



$ vi $ORACLE_HOME/network/admin/sqlnet.ora

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.EXPIRE_TIME = 10
ADR_BASE = /u01/app/oracle



$ vi $ORACLE_HOME/network/admin/tnsnames.ora

TEST_OMEGA01 =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (ADDRESS_LIST=
        (ADDRESS = (PROTOCOL = TCP)(HOST = omega01.localdomain)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = TEST_OMEGA01)
    )
  )

TEST_OMEGA02 =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (ADDRESS_LIST=
        (ADDRESS = (PROTOCOL = TCP)(HOST = omega02.localdomain)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = TEST_OMEGA02)
    )
  )



Подготовка параметров инициализации для Primary БД (TEST_OMEGA01):


alter system set DB_UNIQUE_NAME = 'TEST_OMEGA01' scope=spfile sid='*';

-- В случае использования ASM+OMF
alter system set DB_CREATE_FILE_DEST = "+DATA" scope=both sid='*';
alter system set DB_CREATE_ONLINE_LOG_DEST_1 = "+REDO1" scope=both sid='*';
alter system set DB_CREATE_ONLINE_LOG_DEST_2 = "+REDO2" scope=both sid='*';

-- Параметры
alter system set LOG_ARCHIVE_DEST_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=spfile sid='*';
alter system set LOG_ARCHIVE_DEST_2 = '' scope=both sid='*';
alter system reset LOG_ARCHIVE_DEST_2 scope=spfile sid='*';
alter system set FAL_SERVER = 'TEST_OMEGA02' scope=both sid='*';
alter system set FAL_CLIENT = 'TEST_OMEGA01' scope=both sid='*';
alter system set STANDBY_FILE_MANAGEMENT = 'AUTO' scope=both sid='*';
alter system set REMOTE_LOGIN_PASSWORDFILE = "EXCLUSIVE" scope=spfile sid='*';

alter system set DB_FILE_NAME_CONVERT  =
                       '+DATA/TEST_OMEGA02/', '+DATA/TEST_OMEGA01/',
                       '+REDO1/TEST_OMEGA02/','+REDO1/TEST_OMEGA01/',
                       '+REDO2/TEST_OMEGA02/','+REDO2/TEST_OMEGA01/' scope=spfile sid='*';

alter system set LOG_FILE_NAME_CONVERT =
                       '+DATA/TEST_OMEGA02/', '+DATA/TEST_OMEGA01/',
                       '+REDO1/TEST_OMEGA02/','+REDO1/TEST_OMEGA01/',
                       '+REDO2/TEST_OMEGA02/','+REDO2/TEST_OMEGA01/' scope=spfile sid='*';



******************************************************************************************************
Немного про параметры конвертации:

Если Primary и Standby находятся на ASM, то параметры для DB_FILE_NAME_CONVERT и LOG_FILE_NAME_CONVERT
на Primary можно установить примерно так:

alter system set DB_FILE_NAME_CONVERT  =
                       '+DATA/TEST_OMEGA02/', '+DATA/TEST_OMEGA01/',
                       '+REDO1/TEST_OMEGA02/','+REDO1/TEST_OMEGA01/',
                       '+REDO2/TEST_OMEGA02/','+REDO2/TEST_OMEGA01/' scope=spfile sid='*';

alter system set LOG_FILE_NAME_CONVERT =
                       '+DATA/TEST_OMEGA02/', '+DATA/TEST_OMEGA01/',
                       '+REDO1/TEST_OMEGA02/','+REDO1/TEST_OMEGA01/',
                       '+REDO2/TEST_OMEGA02/','+REDO2/TEST_OMEGA01/' scope=spfile sid='*';

на Standby в обратном порядке:

alter system set DB_FILE_NAME_CONVERT  =
                       '+DATA/TEST_OMEGA01/', '+DATA/TEST_OMEGA02/',
                       '+REDO1/TEST_OMEGA01/','+REDO1/TEST_OMEGA02/',
                       '+REDO2/TEST_OMEGA01/','+REDO2/TEST_OMEGA02/' scope=spfile sid='*';

alter system set LOG_FILE_NAME_CONVERT =
                       '+DATA/TEST_OMEGA01/', '+DATA/TEST_OMEGA02/',
                       '+REDO1/TEST_OMEGA01/','+REDO1/TEST_OMEGA02/',
                       '+REDO2/TEST_OMEGA01/','+REDO2/TEST_OMEGA02/' scope=spfile sid='*';


Но лучше уточнить, может TEST_OMEGA01/02  придётся задать в нижнем регистре test_omega01/02
Для брокера эти команды будут выглядеть примерно так:

-- On Primary
dgmgrl /
edit database 'TEST_OMEGA01' set property 'StandbyFileManagement'='AUTO';
edit database 'TEST_OMEGA01' set property 'ArchiveLagTarget'=1200;
edit database 'TEST_OMEGA01' set property 'DbFileNameConvert' = '+DATA/test_omega02/  , +DATA/test_omega01/ ,  +DATA, +DATA' ;
edit database 'TEST_OMEGA01' set property 'LogFileNameConvert'= '+REDO/test_omega02/  , +REDO/test_omega01/ ,  +REDO, +REDO' ;

-- On Standby
dgmgrl /
edit database 'TEST_OMEGA02' set property 'StandbyFileManagement'='AUTO';
edit database 'TEST_OMEGA02' set property 'ArchiveLagTarget'=1200;
edit database 'TEST_OMEGA02' set property 'DbFileNameConvert' = '+DATA/test_omega01/  , +DATA/test_omega02/ ,  +DATA, +DATA' ;
edit database 'TEST_OMEGA02' set property 'LogFileNameConvert'= '+REDO/test_omega01/  , +REDO/test_omega02/ ,  +REDO, +REDO' ;



Если StandbyDB TEST_OMEGA02 будет располагаться на файловой системе а Primary на ASM.
например так:

Primary                                                  Standby
----------------------------------------------      --------------
+DATA/TEST_OMEGA01/datafile/        /u02/oradata/TEST_OMEGA02/
+DATA/TEST_OMEGA01/tempfile/       /u02/oradata/TEST_OMEGA02/

+DATA/TEST_OMEGA01/onlinelog/     /u02/oradata/TEST_OMEGA02/


То параметры  DB_FILE_NAME_CONVERT и LOG_FILE_NAME_CONVERT необходимо установить только на Standby
например так:

alter system set DB_FILE_NAME_CONVERT  = '+DATA/test_omega01/datafile/' ,'/u02/oradata/TEST_OMEGA02/','+DATA/test_omega01/tempfile/','/u02/oradata/TEST_OMEGA02/' scope=spfile sid='*';
alter system set LOG_FILE_NAME_CONVERT = '+DATA/test_omega01/onlinelog/','/u02/oradata/TEST_OMEGA02/'

Или с помощью брокера:

EDIT DATABASE 'TEST_OMEGA02' SET PROPERTY 'DbFileNameConvert'  = '+DATA/test_omega01/datafile/  , /u02/oradata/TEST_OMEGA02/ , +DATA/test_omega01/tempfile/ , /u02/oradata/TEST_OMEGA02/';
EDIT DATABASE 'TEST_OMEGA02' SET PROPERTY 'LogFileNameConvert' = '+DATA/test_omega01/onlinelog/ , /u02/oradata/TEST_OMEGA02/';

На Primary параметры  DB_FILE_NAME_CONVERT и LOG_FILE_NAME_CONVERT в этом случае устанавливать не нужно.
**************************************************************************************************************************************************************************

Применим эти параметры:

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;




Подготовка файла паролей для резервной БД (TEST_OMEGA02):

Необходимо обеспечить наличие файла паролей перед запуском нового AUXILIARY экземпляра резервной БД.
В зависимости от режима клонирования необходимы выполнить следующее:

Active Database Duplication    

Создать новый файл паролей с паролем, совпадающим с основной БД.
Это будет временный файл паролей,
который будет перезаписан утилитой RMAN в время процесса клонирования.  

Пример:
cd $ORACLE_HOME/dbs 
orapwd file=orapw${ORACLE_SID}  


Backup-based Duplication

Взять существующий файл паролей с основной БД


Подготовка файла параметров для резервной БД

Если используется DUPLICATE без соединения TARGET,
вы не можете использовать SPFILE, иначе получите:

RMAN-05537: DUPLICATE without TARGET connection when auxiliary instance is started
with spfile cannot use SPFILE clause


1) Создать текстовую копию файла параметров на Primary БД

SQL> create pfile='/tmp/init$ORACLE_SID.ora' from spfile;

2) Скопировать полученный файл на сервер резервной БД в $ORACLE_HOME/dbs

3) Модифицировать (заменить) значение TEST_OMEGA01 на TEST_OMEGA02

cd $ORACLE_HOME/dbs
vi -c "%s/TEST_OMEGA01/TEST_OMEGA02/gi" -c "wq" init${ORACLE_SID}.ora

4) Преобразовать PFILE в SPFILE и запустить AUXILIARY экземпляр в режиме NOMOUNT

cd $ORACLE_HOME/dbs
sqlplus / as sysdba
SQL> startup nomount pfile= init${ORACLE_SID}.ora
SQL> create spfile from pfile;
SQL> shutdown immediate
SQL> STARTUP NOMOUNT


Подготовка параметров инициализации для Standby БД:

alter system set CONTROL_FILES='+DATA','+REDO1','+REDO2' scope=spfile sid='*';
alter system set DB_UNIQUE_NAME = 'TEST_OMEGA02' scope=spfile sid='*';

-- В случае использования ASM+OMF
alter system set DB_CREATE_FILE_DEST = "+DATA" scope=both sid='*';
alter system set DB_CREATE_ONLINE_LOG_DEST_1 = "+REDO1" scope=both sid='*';
alter system set DB_CREATE_ONLINE_LOG_DEST_2 = "+REDO2" scope=both sid='*';

-- Параметры
alter system set LOG_ARCHIVE_DEST_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=spfile sid='*';
alter system set LOG_ARCHIVE_DEST_2 = '' scope=both sid='*';
alter system reset LOG_ARCHIVE_DEST_2 scope=spfile sid='*';
alter system set FAL_SERVER = 'TEST_OMEGA01' scope=both sid='*';
alter system set FAL_CLIENT = 'TEST_OMEGA02' scope=both sid='*';
alter system set STANDBY_FILE_MANAGEMENT = 'AUTO' scope=both sid='*';
alter system set REMOTE_LOGIN_PASSWORDFILE = "EXCLUSIVE" scope=spfile sid='*';


Параметры конвертации возможно такие:

alter system set DB_FILE_NAME_CONVERT  =
                       '+DATA/TEST_OMEGA01/', '+DATA/TEST_OMEGA02/',
                       '+REDO1/TEST_OMEGA01/','+REDO1/TEST_OMEGA02/',
                       '+REDO2/TEST_OMEGA01/','+REDO2/TEST_OMEGA02/' scope=spfile sid='*';

alter system set LOG_FILE_NAME_CONVERT =
                       '+DATA/TEST_OMEGA01/', '+DATA/TEST_OMEGA02/',
                       '+REDO1/TEST_OMEGA01/','+REDO1/TEST_OMEGA02/',
                       '+REDO2/TEST_OMEGA01/','+REDO2/TEST_OMEGA02/' scope=spfile sid='*';


Применим эти параметры:

SHUTDOWN IMMEDIATE;
STARTUP NOMOUNT;



Создание резервной БД с помощью RMAN


На основной БД (Primary database) включить режим игнорирования NOLOGGING операций

SQL> alter database force logging;

SQL> select force_logging from v$database;

На основной БД (Primary database) добавить Standby Redo Log files по формуле N+1

SQL> alter database add standby logfile thread 1 SIZE X[G|M];

где X[G|M] – размер журнала на Primary database
N - количество групп оперативных журналов на Primary database


ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;
ALTER DATABASE ADD STANDBY LOGFILE SIZE 52428800;


SQL> select group#,bytes/1024/1024 from v$standby_log;


На резервной БД (Standby database) запустить AUXILIARY экземпляр в режиме NOMOUNT.

SQL> STARTUP NOMOUNT



Active Database Duplication:

Копирование файлов с основной БД с помощью утилиты RMAN
Подключение к RMAN каталогу не требуется

$ORACLE_HOME/bin/rman target=sys/password@TEST_OMEGA01 \
                      auxiliary=sys/password@TEST_OMEGA02

RMAN> run {

   set archivelog destination to '+DATA';

   duplicate target database for standby from active database nofilenamecheck dorecover;

}



Backup-based Duplication:

Копирование файлов из резервной копии БД с помощью утилиты RMAN
Необходимо выполнить подключение к RMAN каталогу

$ORACLE_HOME/bin/rman catalog=login/password@RCAT \
                      target=sys/password@TEST_OMEGA01 \
                      auxiliary=/
RMAN> run {

   set archivelog destination to '+DATA';
   duplicate target database for standby nofilenamecheck dorecover;

}



**********************************************************************************************************
cd $ORACLE_HOME/dbs
sqlplus / as sysdba
SQL> startup nomount pfile= initTEST.ora
SQL> create spfile from pfile;
SQL> shutdown immediate
SQL> STARTUP NOMOUNT

startup nomount pfile=initTEST.ora

$ORACLE_HOME/bin/rman target=sys/welcome1@TEST_OMEGA01  auxiliary=sys/welcome1@TEST_OMEGA02

RMAN>

run {
set archivelog destination to '+DATA';
duplicate target database for standby from active database
spfile
parameter_value_convert 'TEST_OMEGA01','TEST_OMEGA02'
set db_unique_name='TEST_OMEGA02'
set db_file_name_convert='+DATA/TEST_OMEGA01/datafile/','/u02/oradata/TEST_OMEGA02/','+DATA/TEST_OMEGA01/tempfile/','/u02/oradata/TEST_OMEGA02/'
set log_file_name_convert='+DATA/TEST_OMEGA01/onlinelog/','/u02/oradata/TEST_OMEGA02/'
set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
set control_files='/u02/oradata/TEST_OMEGA01/control01.ctl','/u01/app/oracle/fast_recovery_area/TEST_OMEGA02/control02.ctl'
nofilenamecheck dorecover;
}

*************************************************************************************************************



Настроить авто-удаление архивных логов на стороне Primary + Standby database

На стороне PRIMARY database
Необходимо выполнить подключение к RMAN каталогу

rman catalog=login/password@RCAT  target=/
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY BACKED UP 1 TIMES TO 'SBT_TAPE';

На стороне STANDBY database
Подключение к RMAN каталогу не требуется

rman nocatalog target=/
RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;



Настройка FRA репозитария для хранения архивных и flashback логов

Выполнить на обоих БД

alter system set DB_RECOVERY_FILE_DEST = '+FRA' scope=spfile sid='*';
alter system set DB_RECOVERY_FILE_DEST_SIZE = 10G scope=spfile sid='*';
alter system set LOG_ARCHIVE_DEST_1 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST' scope=spfile sid='*';


Настройка Data Guard

Перед созданием DG конфигурации необходимо убиться что Data Guard Broker
запущен на каждом экземпляре БД входящей в будущую конфигурации:

SQL> alter system set dg_broker_start=TRUE scope=both sid='*';

На Primary узле выполнить следующее:

$ dgmgrl

DGMGRL> connect sys/******

DGMGRL> show configuration;
DGMGRL> disable configuration;
DGMGRL> remove configuration;

DGMGRL> create configuration 'TEST' as primary database is 'TEST_OMEGA01' connect identifier is TEST_OMEGA01;

DGMGRL> add database 'TEST_OMEGA02' as connect identifier is TEST_OMEGA02 maintained as physical;

DGMGRL> show configuration;
DGMGRL> enable configuration;


Установка режима защиты данных

MAXPERFORMANCE
Данный режим защиты устанавливается по умолчанию.

MAXAVAILABILITY
$ dgmgrl /
DGMGRL> EDIT DATABASE 'TEST_OMEGA01' SET PROPERTY 'LogXptMode'='SYNC';
DGMGRL> EDIT DATABASE 'TEST_OMEGA02' SET PROPERTY 'LogXptMode'='SYNC';
DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;

MAXPROTECTION
$ dgmgrl /
DGMGRL> EDIT DATABASE 'TEST_OMEGA01' SET PROPERTY 'LogXptMode'='SYNC';
DGMGRL> EDIT DATABASE 'TEST_OMEGA02' SET PROPERTY 'LogXptMode'='SYNC';
DGMGRL> EDIT CONFIGURATION SET PROTECTION MODE AS MAXPROTECTION;


Проверка режима защиты данных в основной БД (Primary database)

SQL> SELECT PROTECTION_MODE FROM V$DATABASE;


Выполнение операции "Failover" с помощью Data Guard

Существует два режима активации резервной БД в случае исчезновения основной БД.

Операция "Complete Failover" с помощью Data Guard

Эта операция активации резервной БД вследствие недоступности или потери основной БД.
Перед данной операцией будут применены ВСЕ накопленные изменения на резервной БД
для недопущения потери данных.

Подключаемся к Standby:

$ dgmgrl

DGMGRL> connect sys/******@TEST_OMEGA02
DGMGRL> show configuration;

Configuration - DBNAME

  Protection Mode: MaxPerformance
  Databases:
    TEST_OMEGA01 - Primary database
    TEST_OMEGA02 - Physical standby database

-- Активировать резервную БД

DGMGRL> FAILOVER TO 'TEST_OMEGA02';


Операция "Immediate Failover" с помощью Data Guard

Эта операция активации резервной БД вследствие недоступности или потери основной БД.
Перед данной операцией НЕ будут применены накопленные изменения на резервной БД,
т.е. резервная БД будет активирована в том состоянии в котором она находилась на момент запуска команды.

Данный режим активации обычно используют если произошло следующее:

An ORA-752 error has occurred at the standby database
An ORA-600 [3020] error has occurred at the standby database and Oracle support has determined
that it was caused by a lost write at the primary database
A complete failover is not possible

Подключаемся к Standby:

$ dgmgrl

DGMGRL> connect sys/******@TEST_OMEGA02
DGMGRL> show configuration;

Configuration - DBNAME

  Protection Mode: MaxPerformance
  Databases:
    TEST_OMEGA01 - Primary database
    TEST_OMEGA02 - Physical standby database


-- Активировать резервную БД

DGMGRL> FAILOVER TO 'TEST_OMEGA02' IMMEDIATE;



Выполнение операции "Switchover" (смена ролей) с помощью Data Guard

Данная операция выполняет плановую смену ролей между серверами БД.
На основании документа техподдержки: Doc ID 1582837.1 + Doc ID 1305019.1

Запретить отложенный накат изменений на Standby БД, если он включен

Подключаемся к Standby:

$ . oraenv
$ dgmgrl
DGMGRL> connect sys/******@TEST_OMEGA02
DGMGRL> SHOW DATABASE 'TEST_OMEGA02' DELAYMINS;
DGMGRL> EDIT DATABASE 'TEST_OMEGA02' SET PROPERTY 'DELAYMINS'='0';


Запретить работу резервной БД в режиме Real Time Query (Active Data Guard Mode)

Согласно документации (требованиям) перед выполнением операции Switchover необходимо запретить
использование режима Real Time Query (Active Data Guard Mode) для резервной БД.

Проверка использования режима Real Time Query (Active Data Guard)

Подключаемся к Standby:

$ . oraenv
$ sqlplus / as sysdba

SQL> select database_role, open_mode from v$database;

DATABASE_ROLE   |OPEN_MODE
----------------|--------------------
PHYSICAL STANDBY|READ ONLY WITH APPLY - > Real Time Query is ON


Выполнить смену режима работы резервной БД – отменить режим Real Time Query (запретить ADG)

(!) Убедиться, что работы проводятся на сервере с ролью STANDBY
(!) Будет выполнена перезагрузка резервной БД

Подключаемся к Standby:

Вариант 1 – SQL*Plus
$ . oraenv
$ sqlplus / as sysdba
SQL> shutdown immediate;
SQL> startup nomount;
SQL> alter database mount standby database;  

Подключаемся к Standby:

Вариант 2 - DGMGRL
$ dgmgrl
DGMGRL> connect sys/******@TEST_OMEGA02
DGMGRL> EDIT DATABASE 'TEST_OMEGA02' SET STATE='OFFLINE';
DGMGRL> STARTUP MOUNT
DGMGRL> EDIT DATABASE 'TEST_OMEGA02' SET STATE='APPLY-ON';


Проверка отмены режима Real Time Query (Active Data Guard)

Подключаемся к Standby:

$ . oraenv
$ sqlplus / as sysdba

SQL> select database_role, open_mode from v$database;

DATABASE_ROLE   |OPEN_MODE
----------------|--------------------
PHYSICAL STANDBY|MOUNTED              - > Real Time Query is OFF



Выполнить операцию Switchover (Смена Ролей)

Обратите внимание, что при подключении к DGMGRL вы должны использовать
имя пользователя и пароль для SWITCHOVER.
Если вы подключаетесь к DGMGRL с использованием учетных данных хоста (dgmgrl / ),
то SWITCHOVER отработает, и новый Primary будет автоматически доступен,
но Standby (старую Primary), придется перезапустить вручную в режиме Physical standby.

Подключаемся к Primary:

$ dgmgrl

DGMGRL> connect sys/******@TEST_OMEGA01
DGMGRL> show configuration;

Configuration - DBNAME

  Protection Mode: MaxPerformance
  Databases:
    TEST_OMEGA01 - Primary database
    TEST_OMEGA02 - Physical standby database


-- Выполнить проверку готовности БД к смене роли | 12c only
DGMGRL> VALIDATE DATABASE 'TEST_OMEGA02';

-- Выполнить смену ролей между серверами БД

DGMGRL> SWITCHOVER TO 'TEST_OMEGA02';


Восстановить отложенный накат изменений на Standby БД, если он нужен
Сейчас Standby (TEST_OMEGA01)

Подключаемся к Standby:

$ . oraenv
$ dgmgrl
DGMGRL> connect sys/******@TEST_OMEGA01
DGMGRL> SHOW DATABASE 'TEST_OMEGA01' DELAYMINS;
DGMGRL> EDIT DATABASE 'TEST_OMEGA01' SET PROPERTY 'DELAYMINS'='';


Открытие резервной БД в режиме READ ONLY (Active Data Guard Mode)

Подключаемся к Standby:

$ dgmgrl

DGMGRL> connect sys/******@TEST_OMEGA01
DGMGRL> show configuration;

Configuration - DBNAME

  Protection Mode: MaxPerformance
  Databases:
    TEST_OMEGA02 - Primary database
    TEST_OMEGA01 - Physical standby database


-- Открыть резервную БД в режиме READ ONLY (Active Data Guard Mode)

DGMGRL> edit database 'TEST_OMEGA01' set state='APPLY-OFF';
DGMGRL> SQL "ALTER DATABASE OPEN READ ONLY";
DGMGRL> edit database 'TEST_OMEGA01' set state='APPLY-ON';


Мониторинг Data Guard конфигурации


Проверка статуса конфигурации

DGMGRL> SHOW CONFIGURATION;

Проверка статуса БД

DGMGRL> SHOW DATABASE 'TEST_OMEGA01';
DGMGRL> SHOW DATABASE 'TEST_OMEGA02';


Проверка несовпадающих параметров между экземпляром БД и репозиторием DG брокера

DGMGRL> SHOW DATABASE 'TEST_OMEGA01' INCONSISTENTPROPERTIES;
DGMGRL> SHOW DATABASE 'TEST_OMEGA02' INCONSISTENTPROPERTIES;


Проверка несовпадающих параметров между экземпляром БД и репозиторием DG брокера для службы Redo Transport

DGMGRL> SHOW DATABASE 'TEST_OMEGA01' INCONSISTENTLOGXPTPROPS;
DGMGRL> SHOW DATABASE 'TEST_OMEGA01' INCONSISTENTLOGXPTPROPS;


Комментариев нет:

Отправить комментарий