$title =

Switchover via SQL x Broker

;

$conteúdo = [

E ai pessoal, espero que todos estejam bem! Durante os estudos recentes de Data Guard eu cheguei a montar um laboratório realizando um switchover através de comandos SQL e logo após isso, uma outra operação de switchover por meio do Broker.

Estarei documentando o passo a passo do que foi realizado por aqui, e espero que seja uma leitura útil para quem está estudando esse tema.

Operação de Switchover via SQL

Primeiramente irei verificar o lag da minha configuração dataguard antes de desabilitá-la

[oracle@ol7-dba ~]$ dgmgrl sys/oracle@orcl
DGMGRL for Linux: Release 19.0.0.0.0 - Production on Fri May 31 22:13:50 2024
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected to "orcl"
Connected as SYSDBA.
DGMGRL> show configuration;
Configuration - dg_config
Protection Mode: MaxPerformance
Members:
orcl - Primary database
orcldg - Physical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 53 seconds ago)
DGMGRL> show configuration lag;
Configuration - dg_config
Protection Mode: MaxPerformance
Members:
orcl - Primary database
orcldg - Physical standby database
Transport Lag: 0 seconds (computed 1 second ago)
Apply Lag: 0 seconds (computed 1 second ago)
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 57 seconds ago)
DGMGRL> disable configuration;
Disabled.
DGMGRL>

Para verificar no meu banco primário se uma operação de switchover irá ocorrer corretamente eu posso utilizar o seguinte comando

SQL> ALTER DATABASE SWITCHOVER TO orcldg VERIFY;
Database altered.
SQL>

E caso o comando não tenha resultado em nenhuma mensagem de warning, então significa que o seu banco primário está apto a uma role transition com o seu standby

Antes do procedimento, irei apenas verificar o nível de proteção e em seguida já irei realizar o switchover

SQL> SELECT PROTECTION_MODE, PROTECTION_LEVEL, DATABASE_ROLE ROLE, SWITCHOVER_STATUS FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL ROLE SWITCHOVER_STATUS
-------------------- -------------------- ---------- --------------------
MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE PRIMARY TO STANDBY
SQL> ALTER DATABASE SWITCHOVER TO orcldg;
Database altered.
SQL>

Após isso, caso eu tente validar a view V$DATABASE ou V$INSTANCE, eu irei receber a mensagem de Oracle not available

SQL> SELECT PROTECTION_MODE, PROTECTION_LEVEL, DATABASE_ROLE ROLE, SWITCHOVER_STATUS FROM V$DATABASE;
SELECT PROTECTION_MODE, PROTECTION_LEVEL, DATABASE_ROLE ROLE, SWITCHOVER_STATUS FROM V$DATABASE
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 4348
Session ID: 256 Serial number: 22332
SQL> SELECT STATUS FROM V$INSTANCE;
SELECT STATUS FROM V$INSTANCE
*
ERROR at line 1:
ORA-01034: ORACLE not available
Process ID: 4348
Session ID: 256 Serial number: 22332
SQL>

Agora no meu antigo standby, e atual primário, eu já consigo verificar que a role mudou em relação à consulta anterior que eu havia feito, também já consigo realizar a abertura do meu banco

SQL> SQL>
PROTECTION_MODE PROTECTION_LEVEL ROLE SWITCHOVER_STATUS
-------------------- -------------------- ----------------- --------------------
MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE PHYSICAL STANDBY NOT ALLOWED
SQL>
SQL>
SQL> SELECT PROTECTION_MODE, PROTECTION_LEVEL, DATABASE_ROLE ROLE, SWITCHOVER_STATUS FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL ROLE SWITCHOVER_STATUS
-------------------- -------------------- ---------- --------------------
MAXIMUM PERFORMANCE UNPROTECTED PRIMARY NOT ALLOWED
SQL> SELECT STATUS FROM V$INSTANCE;
STATUS
------------
MOUNTED
SQL> ALTER DATABASE OPEN;
Database altered.
SQL>

Irei realizar a abertura do meu standby atual em modo mount e já ativar o redo apply do mesmo

SQL> STARTUP MOUNT
ORACLE instance started.
Total System Global Area 1426059984 bytes
Fixed Size 9134800 bytes
Variable Size 360908752 bytes
Database Buffers 1040187392 bytes
Redo Buffers 7639040 bytes
Database mounted.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Database altered.
SQL> SELECT PROTECTION_MODE, PROTECTION_LEVEL, DATABASE_ROLE ROLE, SWITCHOVER_STATUS FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL ROLE SWITCHOVER_STATUS
-------------------- -------------------- ----------------- --------------------
MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE PHYSICAL STANDBY TO PRIMARY
SQL> SELECT STATUS FROM V$INSTANCE;
STATUS
------------
MOUNTED
SQL>

Consigo visualizar que o meu primary já está sem me retornar nenhum erro referente a verificação e logo em seguida iniciarei o switchover

SQL> ALTER DATABASE SWITCHOVER TO orcl VERIFY;
Database altered.
SQL> ALTER DATABASE SWITCHOVER TO orcl;
Database altered.
SQL>

Após a operação, irei reabrir o meu primary atual, deixar o meu standby em modo MOUNT e já iniciar o redo apply do mesmo

SQL> startup mount
ORACLE instance started.
Total System Global Area 1426059984 bytes
Fixed Size 9134800 bytes
Variable Size 352321536 bytes
Database Buffers 1056964608 bytes
Redo Buffers 7639040 bytes
Database mounted.
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
Database altered.
SQL> SELECT PROTECTION_MODE, PROTECTION_LEVEL, DATABASE_ROLE ROLE, SWITCHOVER_STATUS FROM V$DATABASE;
PROTECTION_MODE PROTECTION_LEVEL ROLE SWITCHOVER_STATUS
-------------------- -------------------- ----------------- --------------------
MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE PHYSICAL STANDBY NOT ALLOWED
SQL>

Operação de Switchover via BROKER

Nessa etapa, será feito o mesmo procedimento anterior, porém dessa vez via BROKER.


Começarei verificando o transporte entre os bancos através dos seguintes comandos:

DGMGRL> SHOW DATABASE orcl;
Database - orcl
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
orcl
Database Status:
SUCCESS
DGMGRL> SHOW DATABASE orcldg;
Database - orcldg
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds (computed 1 second ago)
Apply Lag: 0 seconds (computed 1 second ago)
Average Apply Rate: 5.00 KByte/s
Real Time Query: OFF
Instance(s):
orcl
Database Status:
SUCCESS
DGMGRL>

Particularmente eu prefiro realizar esse tipo de operação através do próprio BROKER, principalmente por conta da praticidade de realizar o switchover por lá, basicamente basta eu realizar o comando ” SWITCHOVER TO orcldg ” que ele já irá realizar todo o procedimento anterior sozinho.

Mas antes disso irei realizar algumas validações:

DGMGRL> VALIDATE DATABASE orcldg;
Database Role: Physical standby database
Primary Database: orcl
Ready for Switchover: Yes
Ready for Failover: Yes (Primary Running)
Flashback Database Status:
orcl : Off
orcldg: Off
Managed by Clusterware:
orcl : NO
orcldg: NO
Validating static connect identifier for the primary database orcl...
The static connect identifier allows for a connection to database "orcl".
DGMGRL>

Através do comando acima eu consigo validar que o meu banco está pronto para uma operação de switchover. Agora em seguida irei validar se há alguma divergência entre os SPFILEs dos bancos:

DGMGRL> VALIDATE DATABASE orcldg SPFILE;
Connecting to "orcl".
Connected to "orcl"
Connecting to "orcldg".
Connected to "orcldg"
No parameter differences found.
DGMGRL>

Também irei validar tanto se o meu primário está transportando redo quanto se o meu standby está aplicando esse redo corretamente

DGMGRL> SHOW DATABASE orcl;
Database - orcl
Role: PRIMARY
Intended State: TRANSPORT-ON
Instance(s):
orcl
Database Status:
SUCCESS
DGMGRL> SHOW DATABASE orcldg;
Database - orcldg
Role: PHYSICAL STANDBY
Intended State: APPLY-ON
Transport Lag: 0 seconds (computed 0 seconds ago)
Apply Lag: 0 seconds (computed 0 seconds ago)
Average Apply Rate: 4.00 KByte/s
Real Time Query: ON
Instance(s):
orcl
Database Status:
SUCCESS
DGMGRL>

E por fim vou finalmente realizar o switchover utilizando o Broker

DGMGRL> switchover to orcldg;
Performing switchover NOW, please wait...
Operation requires a connection to database "orcldg"
Connecting ...
Connected to "orcldg"
Connected as SYSDBA.
New primary database "orcldg" is opening...
Operation requires start up of instance "orcl" on database "orcl"
Starting instance "orcl"...
Connected to an idle instance.
ORACLE instance started.
Connected to "orcl"
Database mounted.
Connected to "orcl"
Switchover succeeded, new primary is "orcldg"
DGMGRL> show configuration;
Configuration - dg_config
Protection Mode: MaxPerformance
Members:
orcldg - Primary database
orcl - Physical standby database
orcldg2 - Logical standby database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 111 seconds ago)
DGMGRL>

];

$namorado(a) =

;

$category =

;

$author =

;

$previous =

;

$next =

;