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.
En haut du volet, sélectionnez ConnecterBastion.
Entrez le nom d’utilisateur et le mot de passe, puis sélectionnez le bouton Se connecter.
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.
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.
En haut du volet, sélectionnez ConnecterBastion.
Entrez le nom d’utilisateur et le mot de passe, puis sélectionnez le bouton Se connecter.
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