Implementación de Oracle Data Guard en una máquina virtual de Azure basada en Linux

Se aplica a: ✔️ Máquinas virtuales Linux

Puede usar la CLI de Azure para crear y administrar recursos de Azure desde la línea de comandos o en scripts. En este artículo se describe cómo usar la CLI de Azure para implementar una base de datos de Oracle Database 19c Release 3 desde una imagen de la imagen de Azure Marketplace. Por lo tanto, este artículo le muestra paso a paso cómo instalar y configurar Data Guard en una máquina virtual (VM) de Azure. Para ayudar a proteger el entorno, no se podrá acceder a ningún puerto públicamente y una instancia de Azure Bastion proporcionará acceso a las máquinas virtuales de Oracle.

Antes de comenzar, asegúrese de que esté instalada la CLI de Azure. Para obtener más información, vea la guía de instalación de la CLI de Azure.

Preparación del entorno

Supuestos

Para instalar Oracle Data Guard, debe crear dos máquinas virtuales de Azure en el mismo conjunto de disponibilidad:

  • La máquina virtual principal (OracleVM1) tiene una instancia de Oracle en ejecución.
  • La máquina virtual en espera (OracleVM2) solo tiene el software de Oracle instalado.

La imagen Azure Marketplace que se usa para crear las máquinas virtuales es Oracle:oracle-database-19-3:oracle-database-19-0904:latest.

Nota

Tenga en cuenta las versiones que han alcanzado el final del ciclo de vida (EOL) y que ya no son compatibles con Red Hat. Las imágenes cargadas que hayan alcanzado o superado el EOL recibirán soporte en función de un esfuerzo empresarial razonable. Para obtener más información, consulte la página web de Red Hat sobre los ciclos de vida del producto.

Inicio de sesión en Azure

Inicie sesión en la suscripción de Azure con el comando az login y siga las instrucciones de la pantalla.

az login

Establecimiento de variables de entorno

Ajuste la variable LOCATION del entorno:

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

Habilitar la extensión Azure Bastion

Incluya la extensión de Azure Bastion en la CLI de Azure:

az extension add \
  --name bastion

Crear un grupo de recursos

Cree un grupo de recursos con el comando az group create. Un grupo de recursos de Azure es un contenedor lógico en el que se implementan y se administran los recursos de Azure.

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

Creación de una red virtual con dos subredes

Cree una red virtual donde se conecten todos los servicios de proceso. Una subred hospedará Azure Bastion, un servicio de Azure que ayuda a proteger las bases de datos del acceso público. La segunda subred hospedará las dos máquinas virtuales de base de datos de Oracle.

Además, crearemos un grupo de seguridad de red al que harán referencia todos los servicios para determinar qué puertos se exponen públicamente. Solo se expondrá el puerto 443. El servicio Azure Bastion abrirá este puerto automáticamente cuando cree esa instancia de servicio.

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

Crear un conjunto de disponibilidad

La creación de un conjunto de disponibilidad es opcional, pero es recomendable. Para más información, consulte las directrices de los conjuntos de disponibilidad de Azure.

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

Creación de dos máquinas virtuales

Cree dos máquinas virtuales con el comando az vm create. En el ejemplo siguiente se crean máquinas virtuales denominadas "OracleVM1" y "OracleVM2".

Creación de OracleVM1 (principal):

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

Crear OracleVM2 (en 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

Creación de la instancia de servicio de Azure Bastion

Azure Bastion proporciona un túnel seguro a todos los servicios hospedados en la red virtual. Sirve como jumpbox para eliminar el acceso directo a las bases de datos de Oracle.

Cree una dirección IP pública para acceder al servicio de Azure Bastion:

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

Cree la instancia de servicio de Azure Bastion:

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

Conexión a la máquina virtual

Ahora, accederá a OracleVM1 mediante el servicio de Azure Bastion desde el Azure Portal.

En el cuadro de búsqueda de la parte superior de la ventana, escriba OracleVM1. En la lista de resultados, seleccione OracleVM1 para abrir esa máquina virtual.

Diagrama que muestra el cuadro de búsqueda y de los resultados para la primera máquina virtual de Oracle.

En la parte superior del panel, seleccione Conectar>Bastion.

Diagrama que muestra las selecciones para conectar a través de Azure Bastion.

Escriba el nombre de usuario y la contraseña y seleccione el botón Conectar.

Diagrama que muestra cómo introducir credenciales para conectar a través de Azure Bastion.

Se abrirá una nueva pestaña con una conexión segura a la máquina virtual en la que el software de Oracle ya está instalado desde una imagen de Azure Marketplace.

Diagrama que muestra una conexión a través de Azure Bastion en un navegador.

Configuración de OracleVM1 (principal)

Deshabilite el firewall:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

Defina la contraseña del usuario de oracle:

sudo passwd oracle

Escriba al contraseña de azureuser: OracleLab123.

Cambie la contraseña de usuario de oracle para OracleLab123. (Vuelva a escribirla para verificarla).

Creación de la base de datos en OracleVM1 (principal)

El software de Oracle ya está instalado en la imagen de Azure Marketplace, por lo que el siguiente paso es instalar la base de datos.

Cambie al superusuario de Oracle:

sudo su - oracle

Cree la base de datos:

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

Los resultados tienen que ser similares a la siguiente respuesta:

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.

Establezca las variables ORACLE_SID y ORACLE_HOME:

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

Opcionalmente, puede agregar ORACLE_HOME y ORACLE_SID al archivo /home/oracle/.bashrc para que esta configuración se guarde para futuros inicios de sesión:

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

Configuración de Data Guard

Habilitar el modo de archivar registro en myVM1 (principal)

Habilite el modo de registro:

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;

Habilite el registro forzado y asegúrese de que, al menos, haya un archivo de registro presente:

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

Cree registros de rehacer en espera y establezca el mismo tamaño y cantidad que los registros de rehacer de la base de datos principal:

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;

Active la base de datos flashback (que anteriormente se utilizó numerosas veces para la recuperación) y establezca el valor de STANDBY_FILE_MANAGEMENT en AUTO. Salga de SQL * Plus a continuación.

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;

Configuración del servicio en OracleVM1 (principal)

Edite o cree el archivo tnsnames.ora, que se encuentra en la carpeta $ORACLE_HOME/network/admin.

Agregue las siguientes 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 o cree el archivo listener.ora, que se encuentra en la carpeta $ORACLE_HOME/network/admin.

Agregue las siguientes 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

Habilite el agente de Data Guard:

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

Copie el archivo de parámetros en el servidor en espera:

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

Inicie el agente de escucha:

 lsnrctl stop
 lsnrctl start

Configuración del servicio en OracleVM2 (en espera)

Vuelva a Azure Portal. Busque OracleVM2 y, a continuación, seleccione el recurso en la lista de resultados.

Captura de pantalla del cuadro de búsqueda y de los resultados para la segunda máquina virtual de Oracle.

En la parte superior del panel, seleccione Conectar>Bastion.

Diagrama que muestra las selecciones para conectar a través de Azure Bastion.

Escriba el nombre de usuario y la contraseña y seleccione el botón Conectar.

Captura de pantalla de la introducción de credenciales de nombre de usuario y contraseña para conectar a través de Azure Bastion.

Deshabilitación del firewall en OracleVM2 (en espera)

sudo systemctl stop firewalld
sudo systemctl disable firewalld

Configuración del entorno para OracleVM1

Defina la contraseña del usuario de oracle:

sudo passwd oracle

Escriba al contraseña de azureuser: OracleLab123.

Cambie la contraseña de usuario de oracle para OracleLab123. (Vuelva a escribirla para verificarla).

Cambie para ser el superusuario de oracle:

$ sudo su – oracle

Establezca las variables ORACLE_SID y ORACLE_HOME:

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

Opcionalmente, puede agregar ORACLE_HOME y ORACLE_SID al archivo /home/oracle/.bashrc para que esta configuración se guarde para futuros inicios de sesión:

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

Edite o cree el archivo tnsnames.ora, que se encuentra en la carpeta $ORACLE_HOME/network/admin.

Agregue las siguientes 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 o cree el archivo listener.ora, que se encuentra en la carpeta $ORACLE_HOME/network/admin.

Agregue las siguientes 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 el agente de escucha:

 lsnrctl stop
 lsnrctl start

Restauración de la base de datos OracleVM2 (en espera)

Cree un archivo de parámetros /tmp/initcdb1_stby.ora con el contenido siguiente:

*.db_name='cdb1'

Cree carpetas:

$ 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

Cree un archivo de contraseña:

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

Inicie la base de datos en OracleVM2:

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

Restaure la base de datos mediante la herramienta Oracle Recovery Manager (RMAN):

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

Ejecute los siguientes comandos en RMAN:

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

Los mensajes similares a los siguientes aparecen cuando se completan los comandos:

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

Salga de RMAN:

RMAN> EXIT;

Habilite el agente de Data Guard:

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

Configuración del agente de Data Guard en OracleVM1 (principal)

Inicie el administrador de Data Guard e inicie sesión mediante SYS y una contraseña. (No use la autenticación del sistema operativo).

$ 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.

Revise la configuración:

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)

Ha completado la instalación de Oracle Data Guard. En la sección siguiente se muestra cómo probar la conectividad y el cambio.

Conexión de la base de datos desde el equipo cliente

Actualice el archivo tnsnames.ora en el equipo cliente. Este archivo suele encontrarse en $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)
    )
  )

Inicie 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>

Prueba de la configuración de Data Guard

Cambio de la base de datos en OracleVM1 (principal)

Cambie de la principal a la de en espera (de cdb1 a 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>

Ahora puede conectarse a la base de datos en espera. Inicie 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>

Cambio de la base de datos en OracleVM2 (en espera)

Para cambiar, ejecute el siguiente código en 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"

Una vez más, debería poder conectarse a la base de datos principal. Inicie 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>

Ha completado la instalación y configuración de Data Guard en Oracle Linux.

Eliminación de la máquina virtual

Cuando ya no necesite la máquina virtual, puede usar el comando siguiente para quitar el grupo de recursos, la máquina virtual y todos los recursos relacionados:

az group delete --name $RESOURCE_GROUP

Pasos siguientes