Implementar o Oracle Data Guard numa máquina virtual do Azure baseada em Linux

Aplica-se a: ✔️ VMs do Linux

Pode utilizar a CLI do Azure para criar e gerir recursos do Azure a partir da linha de comandos ou em scripts. Este artigo descreve como utilizar a CLI do Azure para implementar uma base de dados oracle Database 19c Release 3 a partir da imagem Azure Marketplace. Este artigo mostra-lhe, passo a passo, como instalar e configurar o Data Guard numa máquina virtual (VM) do Azure. Para ajudar a proteger o ambiente, nenhuma porta será acessível publicamente e uma instância do Azure Bastion fornecerá acesso às VMs Oracle.

Antes de começar, certifique-se de que a CLI do Azure está instalada. Para obter mais informações, veja o guia de instalação da CLI do Azure.

Preparar o ambiente

Pressupostos

Para instalar o Oracle Data Guard, tem de criar duas VMs do Azure no mesmo conjunto de disponibilidade:

  • A VM primária (OracleVM1) tem uma instância Oracle em execução.
  • A VM de reserva (OracleVM2) tem apenas o software Oracle instalado.

A imagem Azure Marketplace que utiliza para criar as VMs é Oracle:oracle-database-19-3:oracle-database-19-0904:latest.

Nota

Tenha em atenção as versões que atingiram o fim de vida (EOL) e que já não são suportadas pela Red Hat. As imagens carregadas no EOL ou não serão suportadas com base num esforço comercial razoável. Para obter mais informações, consulte a página Web do Red Hat para obter os ciclos de vida dos produtos.

Iniciar sessão no Azure

Inicie sessão na sua subscrição do Azure com o comando az login e siga as instruções apresentadas no ecrã.

az login

Definir variáveis de ambiente

Ajuste a LOCATION variável para o seu ambiente:

LOCATION=eastus
RESOURCE_GROUP="Oracle-Lab"
VM_USERNAME="azureuser"
VM_PASSWORD="OracleLab123"
VNET_NAME="${RESOURCE_GROUP}VNet"

Ativar a extensão do Azure Bastion

Inclua a extensão do Azure Bastion na CLI do Azure:

az extension add \
  --name bastion

Criar um grupo de recursos

Crie um grupo de recursos com o comando az group create. Um grupo de recursos do Azure é um contentor lógico no qual os recursos do Azure são implementados e geridos.

az group create \
  --name $RESOURCE_GROUP \
  --location $LOCATION

Criar uma rede virtual com duas sub-redes

Crie uma rede virtual onde irá ligar todos os serviços de computação. Uma sub-rede irá alojar o Azure Bastion, um serviço do Azure que ajuda a proteger as bases de dados contra o acesso público. A segunda sub-rede aloja as duas VMs da base de dados Oracle.

Além disso, crie um grupo de segurança de rede que todos os serviços irão referenciar para determinar que portas são expostas publicamente. Apenas a porta 443 será exposta. O serviço Azure Bastion abrirá esta porta automaticamente quando criar essa instância de serviço.

az network vnet create \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --name $VNET_NAME \
  --address-prefix "10.0.0.0/16"
az network vnet subnet create \
  --resource-group $RESOURCE_GROUP \
  --name AzureBastionSubnet \
  --vnet-name $VNET_NAME \
  --address-prefixes 10.0.0.0/24
az network vnet subnet create \
  --resource-group $RESOURCE_GROUP \
  --name OracleSubnet \
  --vnet-name $VNET_NAME \
  --address-prefixes 10.0.1.0/24
az network nsg create \
  --name OracleVM-NSG \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION

Criar um conjunto de disponibilidade

A criação de um conjunto de disponibilidade é opcional, mas recomendamos. Para obter mais informações, veja as diretrizes para conjuntos de disponibilidade do Azure.

az vm availability-set create \
  --resource-group $RESOURCE_GROUP \
  --name OracleVMAvailabilitySet \
  --platform-fault-domain-count 2 \
  --platform-update-domain-count 2

Criar duas máquinas virtuais

Crie duas VMs com o comando az vm create . O exemplo seguinte cria VMs com o nome OracleVM1 e OracleVM2.

Criar OracleVM1 (primário):

az vm create \
  --resource-group $RESOURCE_GROUP \
  --name OracleVM1 \
  --availability-set OracleVMAvailabilitySet \
  --image Oracle:oracle-database-19-3:oracle-database-19-0904:latest \
  --size Standard_DS1_v2 \
  --authentication-type password \
  --admin-username $VM_USERNAME \
  --admin-password $VM_PASSWORD \
  --vnet-name $VNET_NAME \
  --subnet OracleSubnet \
  --nsg OracleVM-NSG \
  --os-disk-size-gb 32

Criar OracleVM2 (em modo de espera):

az vm create \
  --resource-group $RESOURCE_GROUP \
  --name OracleVM2 \
  --availability-set OracleVMAvailabilitySet \
  --image Oracle:oracle-database-19-3:oracle-database-19-0904:latest \
  --size Standard_DS1_v2 \
  --authentication-type password \
  --admin-username $VM_USERNAME \
  --admin-password $VM_PASSWORD \
  --vnet-name $VNET_NAME \
  --subnet OracleSubnet \
  --nsg OracleVM-NSG \
  --os-disk-size-gb 32

Criar a instância de serviço do Azure Bastion

O Azure Bastion fornece um túnel seguro para todos os serviços alojados na rede virtual. Serve como uma caixa de salto para eliminar o acesso direto às suas bases de dados Oracle.

Crie um endereço IP público para aceder ao serviço Azure Bastion:

az network public-ip create \
  --resource-group $RESOURCE_GROUP \
  --name OracleLabBastionPublicIP \
  --sku Standard

Crie a instância de serviço do Azure Bastion:

az network bastion create \
  --location $LOCATION \
  --name OracleLabBastion \
  --public-ip-address OracleLabBastionPublicIP \
  --resource-group $RESOURCE_GROUP \
  --vnet-name $VNET_NAME \
  --sku basic

Ligar à máquina virtual

Agora, irá aceder OracleVM1 com o serviço Azure Bastion a partir do portal do Azure.

Na caixa de pesquisa na parte superior da janela, introduza OracleVM1. Na lista de resultados, selecione OracleVM1 para abrir essa VM.

Diagrama a mostrar a caixa de pesquisa e os resultados da primeira VM oracle.

Na parte superior do painel, selecione Ligar>Bastion.

Diagrama a mostrar as seleções para ligar através do Azure Bastion.

Introduza o nome de utilizador e a palavra-passe e, em seguida, selecione o botão Ligar .

Diagrama a mostrar como introduzir credenciais para ligar através do Azure Bastion.

É aberto um novo separador com uma ligação segura à sua máquina virtual, onde o software Oracle já está instalado a partir de uma imagem de Azure Marketplace.

Diagrama a mostrar uma ligação através do Azure Bastion num browser.

Configurar o OracleVM1 (primário)

Desative a firewall:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

Defina a palavra-passe de oracle utilizador:

sudo passwd oracle

Introduza a azureuser palavra-passe: OracleLab123.

Altere a palavra-passe de oracle utilizador para OracleLab123. (Introduza novamente para verificar.)

Criar a base de dados no OracleVM1 (primário)

O software Oracle já está instalado na imagem Azure Marketplace, pelo que o próximo passo é instalar a base de dados.

Mude para o superutilizador Oracle:

sudo su - oracle

Criar a base de dados:

dbca -silent \
   -createDatabase \
   -datafileDestination /u01/app/oracle/cdb1 \
   -templateName General_Purpose.dbc \
   -gdbname cdb1 \
   -sid cdb1 \
   -responseFile NO_VALUE \
   -characterSet AL32UTF8 \
   -sysPassword OracleLab123 \
   -systemPassword OracleLab123 \
   -createAsContainerDatabase true \
   -numberOfPDBs 1 \
   -pdbName pdb1 \
   -pdbAdminPassword OracleLab123 \
   -databaseType MULTIPURPOSE \
   -automaticMemoryManagement false \
   -storageType FS

As saídas devem ter um aspeto semelhante à seguinte resposta:

Copying database files
1% complete
2% complete
8% complete
13% complete
19% complete
27% complete
Creating and starting Oracle instance
29% complete
32% complete
33% complete
34% complete
38% complete
42% complete
43% complete
45% complete
Completing Database Creation
48% complete
51% complete
53% complete
62% complete
70% complete
72% complete
Creating Pluggable Databases
78% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/cdb1/cdb1.log" for further details.

Defina as ORACLE_SID variáveis e ORACLE_HOME :

$ ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1; export ORACLE_HOME
$ ORACLE_SID=cdb1; export ORACLE_SID

Opcionalmente, pode adicionar ORACLE_HOME e ORACLE_SID ao ficheiro /home/oracle/.bashrc , para que estas definições sejam guardadas para inícios de sessão futuros:

# add oracle home
export ORACLE_HOME= /u01/app/oracle/product/19.0.0/dbhome_1
# add oracle sid
export ORACLE_SID=cdb1

Configurar o Data Guard

Ativar o modo de registo de arquivo em myVM1 (primário)

Ativar o modo de registo:

sqlplus / as sysdba
SQL> SELECT log_mode FROM v$database;
LOG_MODE
------------
NOARCHIVELOG
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;

Ative o registo forçado e certifique-se de que, pelo menos, um ficheiro de registo está presente:

SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER SYSTEM SWITCH LOGFILE;

Crie registos de refazer em modo de espera, definindo o mesmo tamanho e quantidade que os registos de refazer da base de dados primária:

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/cdb1/standby_redo01.log') SIZE 200M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/cdb1/standby_redo02.log') SIZE 200M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/cdb1/standby_redo03.log') SIZE 200M;
SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/cdb1/standby_redo04.log') SIZE 200M;

Ative o Flashback (o que torna a recuperação muito mais fácil) e defina STANDBY_FILE_MANAGEMENT como AUTO. Saia do SQL*Plus depois disso.

SQL> ALTER SYSTEM SET db_recovery_file_dest_size=50G scope=both sid='*';
SQL> ALTER SYSTEM SET db_recovery_file_dest='/u01/app/oracle/cdb1' scope=both sid='*';
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=BOTH;
SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
SQL> EXIT;

Configurar o serviço no OracleVM1 (primário)

Edite ou crie o ficheiro tnsnames.ora , que se encontra na pasta $ORACLE_HOME/network/admin .

Adicione as seguintes entradas:

cdb1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )
cdb1_stby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )

Edite ou crie o ficheiro listener.ora , que se encontra na pasta $ORACLE_HOME/network/admin .

Adicione as seguintes entradas:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cdb1_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (SID_NAME = cdb1)
    )
  )
ADR_BASE_LISTENER = /u01/app/oracle

Ativar o Mediador do Data Guard:

sqlplus / as sysdba
SQL> ALTER SYSTEM SET dg_broker_start=true;
SQL> CREATE pfile FROM spfile;
SQL> EXIT;

Copie o ficheiro de parâmetros para o servidor de reserva:

scp -p $ORACLE_HOME/dbs/initcdb1.ora oracle@OracleVM2:$ORACLE_HOME/dbs/

Inicie o serviço de escuta:

 lsnrctl stop
 lsnrctl start

Configurar o serviço no OracleVM2 (em modo de espera)

Regresse ao portal do Azure. Procure OracleVM2 e, em seguida, selecione o recurso na lista de resultados.

Captura de ecrã a mostrar a caixa de pesquisa e os resultados da segunda VM oracle.

Na parte superior do painel, selecione Ligar>Bastion.

Diagrama a mostrar as seleções para ligar através do Azure Bastion.

Introduza o nome de utilizador e a palavra-passe e, em seguida, selecione o botão Ligar .

Captura de ecrã a mostrar a introdução de credenciais de nome de utilizador e palavra-passe para ligar através do Azure Bastion.

Desativar a firewall no OracleVM2 (em modo de espera)

sudo systemctl stop firewalld
sudo systemctl disable firewalld

Configurar o ambiente para OracleVM1

Defina a palavra-passe de oracle utilizador:

sudo passwd oracle

Introduza a azureuser palavra-passe: OracleLab123.

Altere a palavra-passe de oracle utilizador para OracleLab123. (Introduza novamente para verificar.)

Mude para o oracle superutilizador:

$ sudo su – oracle

Defina as ORACLE_SID variáveis e ORACLE_HOME :

ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=cdb1; export ORACLE_SID

Opcionalmente, pode adicionar ORACLE_HOME e ORACLE_SID ao ficheiro /home/oracle/.bashrc , para que estas definições sejam guardadas para inícios de sessão futuros:

# add oracle home
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
# add oracle sid
export ORACLE_SID=cdb1

Edite ou crie o ficheiro tnsnames.ora , que se encontra na pasta $ORACLE_HOME/network/admin .

Adicione as seguintes entradas:

cdb1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )
cdb1_stby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = cdb1)
    )
  )

Edite ou crie o ficheiro listener.ora , que se encontra na pasta $ORACLE_HOME/network/admin .

Adicione as seguintes entradas:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = OracleVM2)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = cdb1_DGMGRL)
      (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
      (SID_NAME = cdb1)
    )
  )
ADR_BASE_LISTENER = /u01/app/oracle

Inicie o serviço de escuta:

 lsnrctl stop
 lsnrctl start

Restaurar a base de dados para OracleVM2 (em modo de espera)

Crie o ficheiro de parâmetros /tmp/initcdb1_stby.ora com os seguintes conteúdos:

*.db_name='cdb1'

Criar pastas:

$ mkdir -p /u01/app/oracle/cdb1
$ mkdir -p /u01/app/oracle/oradata/cdb1/pdbseed
$ mkdir -p /u01/app/oracle/oradata/cdb1/pdb1
$ mkdir -p /u01/app/oracle/fast_recovery_area/cdb1
$ mkdir -p /u01/app/oracle/admin/cdb1/adump

Criar um ficheiro de palavra-passe:

$ orapwd file=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwcdb1 password=OracleLab123 entries=10 force=y

Inicie a base de dados em OracleVM2:

 export ORACLE_SID=cdb1
 sqlplus / as sysdba
SQL> CREATE spfile from pfile;
SQL> STARTUP NOMOUNT PFILE='/tmp/initcdb1_stby.ora';
SQL> EXIT;

Restaure a base de dados com a ferramenta Oracle Gestor de Recuperação (RMAN):

$ rman TARGET sys/OracleLab123@cdb1 AUXILIARY sys/OracleLab123@cdb1_stby

Execute os seguintes comandos no RMAN:

DUPLICATE TARGET DATABASE
  FOR STANDBY
  FROM ACTIVE DATABASE
  DORECOVER
  SPFILE
    SET db_unique_name='CDB1_STBY' COMMENT 'Is standby'
  NOFILENAMECHECK;

São apresentadas mensagens semelhantes às seguintes quando os comandos são concluídos:

media recovery complete, elapsed time: 00:00:00
Finished recover at 29-JUN-22
Finished Duplicate Db at 29-JUN-22

Sair do RMAN:

RMAN> EXIT;

Ativar o Mediador do Data Guard:

sqlplus / as sysdba
SQL> ALTER SYSTEM SET dg_broker_start=true;
SQL> EXIT;

Configurar o Mediador do Data Guard no OracleVM1 (primário)

Inicie o Data Guard Manager e inicie sessão com o SYS e uma palavra-passe. (Não utilize a autenticação do SO.)

$ dgmgrl sys/OracleLab123@cdb1
DGMGRL for Linux: Version 19.0.0.0 - 64bit Production
Copyright (c) 2000, 2013, Oracle. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> CREATE CONFIGURATION my_dg_config AS PRIMARY DATABASE IS cdb1 CONNECT IDENTIFIER IS cdb1;
Configuration "my_dg_config" created with primary database "cdb1"
DGMGRL> ADD DATABASE cdb1_stby AS CONNECT IDENTIFIER IS cdb1_stby MAINTAINED AS PHYSICAL;
Database "cdb1_stby" added
DGMGRL> ENABLE CONFIGURATION;
Enabled.

Reveja a configuração:

DGMGRL> SHOW CONFIGURATION;
Configuration - my_dg_config
  Protection Mode: MaxPerformance
  Members:
  cdb1      - Primary database
  cdb1_stby - Physical standby database
Fast-Start Failover: DISABLED
Configuration Status:
SUCCESS   (status updated 26 seconds ago)

Concluiu a configuração do Oracle Data Guard. A secção seguinte mostra-lhe como testar a conectividade e mudar.

Ligar a base de dados a partir do computador cliente

Atualize o ficheiro tnsnames.ora no seu computador cliente. Normalmente, este ficheiro está em $ORACLE_HOME/network/admin.

cdb1=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=OracleVM1)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=cdb1)
    )
  )
cdb1_stby=
  (DESCRIPTION=
    (ADDRESS=
      (PROTOCOL=TCP)
      (HOST=OracleVM2)
      (PORT=1521)
    )
    (CONNECT_DATA=
      (SERVER=dedicated)
      (SERVICE_NAME=cdb1_stby)
    )
  )

Iniciar SQL*Plus:

$ sqlplus sys/OraPasswd1@cdb1
SQL*Plus: Release 19.0.0.0 Production on Wed May 10 14:18:31 2022
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 19.0.0.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL>

Testar a configuração do Data Guard

Mudar para a base de dados no OracleVM1 (primário)

Mudar do principal para o modo de espera (cdb1 para cdb1_stby):

$ dgmgrl sys/OracleLab123@cdb1
DGMGRL for Linux: Version 19.0.0.0 - 64bit Production
Copyright (c) 2000, 2013, Oracle. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> SWITCHOVER TO cdb1_stby;
Performing switchover NOW, please wait...
Operation requires a connection to instance "cdb1" on database "cdb1_stby"
Connecting to instance "cdb1"...
Connected as SYSDBA.
New primary database "cdb1_stby" is opening...
Operation requires start up of instance "cdb1" on database "cdb1"
Starting instance "cdb1"...
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "cdb1_stby"
DGMGRL>

Agora pode ligar à base de dados de reserva. Iniciar SQL*Plus:

$ sqlplus sys/OracleLab123@cdb1_stby
SQL*Plus: Release 19.0.0.0 Production on Wed May 10 14:18:31 2022
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL>

Mudar para a base de dados no OracleVM2 (em modo de espera)

Para mudar, execute o seguinte código em OracleVM2:

$ dgmgrl sys/OracleLab123@cdb1_stby
DGMGRL for Linux: Version 190.0.0.0 - 64bit Production
Copyright (c) 2000, 2013, Oracle. All rights reserved.
Welcome to DGMGRL, type "help" for information.
Connected as SYSDBA.
DGMGRL> SWITCHOVER TO cdb1;
Performing switchover NOW, please wait...
Operation requires a connection to instance "cdb1" on database "cdb1"
Connecting to instance "cdb1"...
Connected as SYSDBA.
New primary database "cdb1" is opening...
Operation requires start up of instance "cdb1" on database "cdb1_stby"
Starting instance "cdb1"...
ORACLE instance started.
Database mounted.
Switchover succeeded, new primary is "cdb1"

Mais uma vez, deverá conseguir ligar-se à base de dados primária. Iniciar SQL*Plus:

$ sqlplus sys/OracleLab123@cdb1
SQL*Plus: Release 19.0.0.0 Production on Wed May 10 14:18:31 2022
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
SQL>

Concluiu a instalação e configuração do Data Guard no Oracle Linux.

Elimine a máquina virtual

Quando já não precisar das VMs, pode utilizar o seguinte comando para remover o grupo de recursos, as VMs e todos os recursos relacionados:

az group delete --name $RESOURCE_GROUP

Passos seguintes