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.
Na parte superior do painel, selecione Ligar>Bastion.
Introduza o nome de utilizador e a palavra-passe e, em seguida, selecione o botão Ligar .
É 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.
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.
Na parte superior do painel, selecione Ligar>Bastion.
Introduza o nome de utilizador e a palavra-passe e, em seguida, selecione o botão Ligar .
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