Implémenter Oracle Data Guard sur une machine virtuelle Azure basée sur Linux

S’applique à : ✔️ Machines virtuelles Linux

Vous pouvez utiliser Azure CLI pour créer et gérer des ressources Azure à partir de la ligne de commande ou dans des scripts. Cet article décrit comment utiliser l’interface de ligne de commande Azure (Azure CLI) pour déployer une base de données de Oracle Database 19c Version 3 à partir de l’image de Place de marché Microsoft Azure. L’article montre ensuite, étape par étape, comment installer et configurer Data Guard sur une machine virtuelle Azure. Pour améliorer la sécurité de l’environnement, aucun port ne sera accessible publiquement et une instance Azure Bastion fournira l’accès aux machines virtuelles Oracle.

Avant de commencer, vérifiez que l’interface de ligne de commande Azure est installée. Pour plus d’informations, consultez le Guide d’installation d’Azure CLI.

Préparer l’environnement

Hypothèses

Pour installer Oracle Data Guard, vous devez créer deux machines virtuelles Azure sur le même groupe à haute disponibilité :

  • La machine virtuelle principale (OracleVM1) dispose d’une instance Oracle active.
  • Le machine virtuelle de secours (OracleVM2) dispose uniquement du logiciel Oracle installé.

L’image Place de marché Azure que vous utilisez pour créer les machines virtuelles est Oracle:oracle-database-19-3:oracle-database-19-0904:latest.

Notes

Tenez compte des versions qui ont atteint la fin de vie (EOL) et qui ne sont plus prises en charge par Red Hat. Les images chargées dont la fin de vie est proche ou dépassée seront prises en charge sur la base d'un effort commercial raisonnable. Pour plus d’informations, consultez la page web Red Hat pour connaître les cycles de vie des produits.

Connexion à Azure

Connectez-vous à votre abonnement Azure avec la commande az login, puis suivez les instructions à l’écran.

az login

Définir des variables d’environnement

Ajustez la variable LOCATION pour votre environnement :

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

Activer l’extension Azure Bastion

Incluez l’extension Azure Bastion dans l’interface de ligne de commande Azure :

az extension add \
  --name bastion

Créer un groupe de ressources

Créez un groupe de ressources avec la commande az group create. Un groupe de ressources Azure est un conteneur logique dans lequel les ressources Azure sont déployées et gérées.

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

Créer un réseau virtuel avec deux sous-réseaux

Créez un réseau virtuel dans lequel vous allez connecter tous les services de calcul. Un sous-réseau hébergera Azure Bastion, un service Azure qui permet de protéger vos bases de données contre l’accès public. Le deuxième sous-réseau hébergera les deux machines virtuelles de base de données Oracle.

Créez aussi un groupe de sécurité réseau que tous les services référenceront pour déterminer quels ports sont exposés publiquement. Seul le port 443 sera exposé. Le service Azure Bastion ouvre automatiquement ce port lors de la création de cette instance de service.

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

Créer un groupe à haute disponibilité

La création d’un groupe à haute disponibilité est facultative, mais recommandée. Pour plus d’informations, consultez les instructions pour les groupes à haute disponibilité Azure.

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

Créer deux machines virtuelles

Créez deux machines virtuelles avec la commande az vm create. L’exemple ci-après crée deux machines virtuelles nommées OracleVM1 et OracleVM2.

Créez 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

Créez OracleVM2 (secours) :

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

Créer l’instance de service Azure Bastion

Azure Bastion fournit un tunnel sécurisé à tous les services hébergés dans le réseau virtuel. Cela sert de serveur à rebond pour éliminer l’accès direct à vos bases de données Oracle.

Créez une adresse IP publique pour accéder au service Azure Bastion :

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

Créez l’instance de service Azure Bastion :

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

Connectez-vous à la machine virtuelle.

Maintenant, vous allez accéder à OracleVM1 à l’aide du service Azure Bastion à partir du Portail Azure.

Dans la zone de recherche située en haut de la fenêtre, entrez OracleVM1. Dans la liste des résultats, sélectionnez OracleVM1 pour ouvrir cette machine virtuelle.

Diagramme montrant la zone de recherche et les résultats de la première machine virtuelle Oracle.

En haut du volet, sélectionnez ConnecterBastion.

Diagramme montrant les sélections pour la connexion via Azure Bastion.

Entrez le nom d’utilisateur et le mot de passe, puis sélectionnez le bouton Se connecter.

Diagramme montrant la saisie des informations d'identification pour la connexion via Azure Bastion.

Un nouvel onglet s’ouvre avec une connexion sécurisée à votre machine virtuelle où le logiciel Oracle est déjà installé à partir d’une image Place de marché Azure.

Diagramme montrant une connexion via Azure Bastion dans un navigateur.

Configurer OracleVM1 (principal)

Désactivez le pare-feu :

sudo systemctl stop firewalld
sudo systemctl disable firewalld

Définissez le mot de passe de l’utilisateur oracle :

sudo passwd oracle

Entrez le mot de passe azureuser : OracleLab123.

Modifiez le mot de passe de l’utilisateur oracle pour OracleLab123. (Entrez-le à nouveau pour le vérifier.)

Créer la base de données sur OracleVM1 (principal)

Le logiciel Oracle est déjà installé sur l’image Place de marché Azure, l’étape suivante consiste donc à installer la base de données.

Basculez vers le super utilisateur Oracle :

sudo su - oracle

Créez la base de données :

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

Les résultats doivent ressembler à la réponse suivante :

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.

Définissez les variables ORACLE_SID et ORACLE_HOME :

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

Si vous le souhaitez, vous pouvez ajouter ORACLE_HOME et ORACLE_SID au fichier /home/oracle/.bashrc, de façon à ce que ces paramètres soient enregistrés pour des connexions futures :

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

Configurer Data Guard

Activer le mode de journalisation d’archive sur myVM1 (machine virtuelle principale)

Activez le mode de journalisation :

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;

Activez la journalisation forcée et vérifiez qu’au moins un fichier journal est présent :

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

Créez des journaux d’activité de rétablissement de secours, en définissant la même taille et la même quantité que les journaux d’activité de rétablissement de la base de données primaire :

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;

Activez la restauration (qui facilite considérablement la récupération) et définissez STANDBY_FILE_MANAGEMENT sur AUTO. Quittez ensuite SQL* Plus.

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;

Configurer le service sur OracleVM1 (principal)

Modifiez ou créez le fichier tnsnames.ora dans le dossier $ORACLE_HOME\network\admin.

Ajoutez les entrées suivantes :

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

Modifiez ou créez le fichier listener.ora dans le dossier $ORACLE_HOME\network\admin.

Ajoutez les entrées suivantes :

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

Activez Data Guard Broker :

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

Copiez le fichier de paramètres sur le serveur de secours :

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

Démarrez l’écouteur :

 lsnrctl stop
 lsnrctl start

Configurez le service sur OracleVM2 (secours)

Revenez au portail Azure. Recherchez OracleVM2, puis sélectionnez la ressource dans la liste des résultats.

Capture d’écran de la zone de recherche et des résultats de la seconde machine virtuelle Oracle.

En haut du volet, sélectionnez ConnecterBastion.

Diagramme montrant des sélections pour la connexion via Azure Bastion.

Entrez le nom d’utilisateur et le mot de passe, puis sélectionnez le bouton Se connecter.

Capture d’écran de la saisie du nom d'utilisateur et du mot de passe pour la connexion via Azure Bastion.

Désactiver le pare-feu sur OracleVM2 (secours)

sudo systemctl stop firewalld
sudo systemctl disable firewalld

Configurer l’environnement pour OracleVM1

Définissez le mot de passe de l’utilisateur oracle :

sudo passwd oracle

Entrez le mot de passe azureuser : OracleLab123.

Modifiez le mot de passe de l’utilisateur oracle pour OracleLab123. (Entrez-le à nouveau pour le vérifier.)

Basculez vers le superutilisateur oracle :

$ sudo su – oracle

Définissez les variables ORACLE_SID et ORACLE_HOME :

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

Si vous le souhaitez, vous pouvez ajouter ORACLE_HOME et ORACLE_SID au fichier /home/oracle/.bashrc, de façon à ce que ces paramètres soient enregistrés pour des connexions futures :

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

Modifiez ou créez le fichier tnsnames.ora dans le dossier $ORACLE_HOME\network\admin.

Ajoutez les entrées suivantes :

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

Modifiez ou créez le fichier listener.ora dans le dossier $ORACLE_HOME\network\admin.

Ajoutez les entrées suivantes :

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

Démarrez l’écouteur :

 lsnrctl stop
 lsnrctl start

Restaurer la base de données sur OracleVM2 (secours)

Créez le fichier de paramètres /tmp/initcdb1_stby.ora dont le contenu est le suivant :

*.db_name='cdb1'

Créez les dossiers :

$ 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

Créez un fichier de mot de passe :

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

Lancez la base de données sur OracleVM2 :

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

Restaurez la base de données à l’aide de l’outil Oracle Recovery Manager (RMAN) :

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

Exécutez les commandes suivantes dans RMAN :

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

Les messages similaires aux suivants s’affichent lorsque les commandes sont terminées :

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

Quittez RMAN :

RMAN> EXIT;

Activez Data Guard Broker :

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

Configurer Data Guard Broker sur OracleVM1 (principal)

Démarrez Data Guard Manager et connectez-vous à l’aide de SYS et d’un mot de passe (N’utilisez pas l’authentification du système d’exploitation.)

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

Examinez la configuration :

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)

Cela achève la configuration d’Oracle Data Guard. La section suivante montre comment tester la connectivité et opérer un basculement.

Connecter la base de données à partir de la machine cliente

Mettez à jour le fichier tnsnames.ora sur votre machine cliente. Ce fichier est généralement $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)
    )
  )

Démarrez 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>

Tester la configuration de Data Guard

Commutez la base de données sur OracleVM1 (principal)

Basculer du serveur principal vers le serveur de secours (cdb1 vers 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>

Vous pouvez maintenant vous connecter à la base de données de secours. Démarrez 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>

Commutez la base de données sur OracleVM2 (secours)

Pour basculer, exécutez la commande suivante sur 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"

Une fois encore, vous devez à présent pouvoir vous connecter à la base de données primaire. Démarrez 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>

Cela achève l’installation et la configuration de Data Guard sur Oracle Linux.

Supprimer la machine virtuelle

Quand vous n’avez plus besoin des machines virtuelles, vous pouvez utiliser la commande suivante pour supprimer le groupe de ressources, les machines virtuelles et toutes les ressources associées :

az group delete --name $RESOURCE_GROUP

Étapes suivantes