Implementare Oracle Data Guard in una macchina virtuale di Azure basata su Linux
Si applica a: ✔️ Macchine virtuali Linux
È possibile usare l'interfaccia della riga di comando di Azure per creare e gestire le risorse di Azure dalla riga di comando o tramite script. Questo articolo descrive come usare l'interfaccia della riga di comando di Azure per distribuire un database Oracle Database 19c Release 3 dall'immagine Azure Marketplace. In questo articolo viene anche illustrata la procedura per installare e configurare Data Guard su una macchina virtuale di Azure (VM). Per proteggere l'ambiente, nessuna porta sarà accessibile pubblicamente e un'istanza di Azure Bastion fornirà l'accesso alle macchine virtuali Oracle.
Prima di iniziare, assicurarsi che l'interfaccia della riga di comando di Azure sia installata. Per altre informazioni, vedere la guida all'installazione dell'interfaccia della riga di comando di Azure.
Preparare l'ambiente
Presupposti
Per installare Oracle Data Guard, è necessario creare due macchine virtuali di Azure nello stesso set di disponibilità:
- La macchina virtuale primaria (
OracleVM1
) ha un'istanza Oracle in esecuzione. - La macchina virtuale standby (
OracleVM2
) ha installato solo il software Oracle.
L'immagine Azure Marketplace usata per creare le macchine virtuali è Oracle:oracle-database-19-3:oracle-database-19-0904:latest
.
Nota
Tenere presente le versioni che hanno raggiunto la fine del ciclo di vita (EOL) e non sono più supportate da Red Hat. Le immagini caricate che si trovano a o oltre EOL saranno supportate in base a un impegno aziendale ragionevole. Per altre informazioni, vedere la pagina Web Red Hat per i cicli di vita dei prodotti.
Accedere ad Azure
Accedere alla sottoscrizione di Azure con il comando az login e seguire le istruzioni visualizzate.
az login
Impostare le variabili di ambiente
Modificare la variabile per l'ambiente LOCATION
:
LOCATION=eastus
RESOURCE_GROUP="Oracle-Lab"
VM_USERNAME="azureuser"
VM_PASSWORD="OracleLab123"
VNET_NAME="${RESOURCE_GROUP}VNet"
Abilitare l'estensione Azure Bastion
Includere l'estensione Azure Bastion nell'interfaccia della riga di comando di Azure:
az extension add \
--name bastion
Creare un gruppo di risorse
Creare un gruppo di risorse con il comando az group create. Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite.
az group create \
--name $RESOURCE_GROUP \
--location $LOCATION
Creare una rete virtuale con due subnet
Creare una rete virtuale in cui si connetteranno tutti i servizi di calcolo. Una subnet ospiterà Azure Bastion, un servizio di Azure che consente di proteggere i database dall'accesso pubblico. La seconda subnet ospiterà le due macchine virtuali del database Oracle.
Creare anche un gruppo di sicurezza di rete a cui faranno riferimento tutti i servizi per determinare le porte esposte pubblicamente. Verrà esposta solo la porta 443. Il servizio Azure Bastion aprirà automaticamente questa porta quando si crea l'istanza del servizio.
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
Creare un set di disponibilità
Creare un set di disponibilità è un'operazione facoltativa, ma consigliata. Per altre informazioni, vedere le linee guida per i set di disponibilità di Azure.
az vm availability-set create \
--resource-group $RESOURCE_GROUP \
--name OracleVMAvailabilitySet \
--platform-fault-domain-count 2 \
--platform-update-domain-count 2
Creare due macchine virtuali
Creare due macchine virtuali usando il comando az vm create . Nell'esempio seguente vengono create macchine virtuali denominate OracleVM1
e OracleVM2
.
Crea OracleVM1
(primario):
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
Crea OracleVM2
(standby):
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
Creare l'istanza del servizio Azure Bastion
Azure Bastion offre un tunnel sicuro a tutti i servizi ospitati all'interno della rete virtuale. Funge da jump box per eliminare l'accesso diretto ai database Oracle.
Creare un indirizzo IP pubblico per accedere al servizio Azure Bastion:
az network public-ip create \
--resource-group $RESOURCE_GROUP \
--name OracleLabBastionPublicIP \
--sku Standard
Creare l'istanza del servizio Azure Bastion:
az network bastion create \
--location $LOCATION \
--name OracleLabBastion \
--public-ip-address OracleLabBastionPublicIP \
--resource-group $RESOURCE_GROUP \
--vnet-name $VNET_NAME \
--sku basic
Connettersi alla macchina virtuale
A questo punto, si accederà OracleVM1
usando il servizio Azure Bastion dal portale di Azure.
Nella casella di ricerca nella parte superiore della finestra immettere OracleVM1. Nell'elenco dei risultati selezionare OracleVM1 per aprire la macchina virtuale.
Nella parte superiore del riquadro selezionare Connetti>Bastion.
Immettere il nome utente e la password e quindi selezionare il pulsante Connetti .
Viene visualizzata una nuova scheda con una connessione sicura alla macchina virtuale, in cui il software Oracle è già installato da un'immagine Azure Marketplace.
Configurare OracleVM1 (primario)
Disabilitare il firewall:
sudo systemctl stop firewalld
sudo systemctl disable firewalld
Impostare la oracle
password utente:
sudo passwd oracle
Immettere la azureuser
password: OracleLab123
.
Modificare la oracle
password dell'utente in OracleLab123
. (Immetterlo di nuovo per verificare).
Creare il database in OracleVM1 (primario)
Il software Oracle è già installato nell'immagine Azure Marketplace, quindi il passaggio successivo consiste nell'installare il database.
Passare all'utente Oracle con privilegi avanzati:
sudo su - oracle
Creare il database:
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
Gli output saranno simili alla risposta seguente:
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.
Impostare le ORACLE_SID
variabili e ORACLE_HOME
:
$ ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1; export ORACLE_HOME
$ ORACLE_SID=cdb1; export ORACLE_SID
Facoltativamente, è possibile aggiungere ORACLE_HOME
e ORACLE_SID
al file /home/oracle/.bashrc , in modo che queste impostazioni vengano salvate per gli account di accesso futuri:
# add oracle home
export ORACLE_HOME= /u01/app/oracle/product/19.0.0/dbhome_1
# add oracle sid
export ORACLE_SID=cdb1
Configurare Data Guard
Abilitare la modalità archivelog in myVM1 (primaria)
Abilitare la modalità log:
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;
Abilitare la registrazione forzata e assicurarsi che sia presente almeno un file di log:
SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER SYSTEM SWITCH LOGFILE;
Creare log di rollforward di standby, impostando le stesse dimensioni e quantità dei log di rollforward del database primario:
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;
Attivare Flashback (che semplifica molto il ripristino) e impostare su STANDBY_FILE_MANAGEMENT
AUTO
. Chiudere quindi il comando 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;
Configurare il servizio in OracleVM1 (primario)
Modificare o creare il file tnsnames.ora , che si trova nella cartella $ORACLE_HOME/network/admin .
Aggiungere le voci seguenti:
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)
)
)
Modificare o creare il file listener.ora , che si trova nella cartella $ORACLE_HOME/network/admin .
Aggiungere le voci seguenti:
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
Abilitare Data Guard Broker:
sqlplus / as sysdba
SQL> ALTER SYSTEM SET dg_broker_start=true;
SQL> CREATE pfile FROM spfile;
SQL> EXIT;
Copiare il file dei parametri nel server standby:
scp -p $ORACLE_HOME/dbs/initcdb1.ora oracle@OracleVM2:$ORACLE_HOME/dbs/
Avviare il listener:
lsnrctl stop
lsnrctl start
Configurare il servizio in OracleVM2 (standby)
Tornare al portale di Azure. Cercare OracleVM2 e quindi selezionare la risorsa nell'elenco dei risultati.
Nella parte superiore del riquadro selezionare Connetti>Bastion.
Immettere il nome utente e la password e quindi selezionare il pulsante Connetti .
Disabilitare il firewall in OracleVM2 (standby)
sudo systemctl stop firewalld
sudo systemctl disable firewalld
Configurare l'ambiente per OracleVM1
Impostare la oracle
password utente:
sudo passwd oracle
Immettere la azureuser
password: OracleLab123
.
Modificare la oracle
password dell'utente in OracleLab123
. (Immetterlo di nuovo per verificare).
Passare all'utente oracle
con privilegi avanzati:
$ sudo su – oracle
Impostare le ORACLE_SID
variabili e ORACLE_HOME
:
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1; export ORACLE_HOME
ORACLE_SID=cdb1; export ORACLE_SID
Facoltativamente, è possibile aggiungere ORACLE_HOME
e ORACLE_SID
al file /home/oracle/.bashrc , in modo che queste impostazioni vengano salvate per gli account di accesso futuri:
# add oracle home
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
# add oracle sid
export ORACLE_SID=cdb1
Modificare o creare il file tnsnames.ora , che si trova nella cartella $ORACLE_HOME/network/admin .
Aggiungere le voci seguenti:
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)
)
)
Modificare o creare il file listener.ora , che si trova nella cartella $ORACLE_HOME/network/admin .
Aggiungere le voci seguenti:
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
Avviare il listener:
lsnrctl stop
lsnrctl start
Ripristinare il database in OracleVM2 (standby)
Creare il file di parametri /tmp/initcdb1_stby.ora con il contenuto seguente:
*.db_name='cdb1'
Creare le cartelle:
$ 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
Creare un file di password:
$ orapwd file=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/orapwcdb1 password=OracleLab123 entries=10 force=y
Avviare il database in OracleVM2
:
export ORACLE_SID=cdb1
sqlplus / as sysdba
SQL> CREATE spfile from pfile;
SQL> STARTUP NOMOUNT PFILE='/tmp/initcdb1_stby.ora';
SQL> EXIT;
Ripristinare il database usando lo strumento Oracle Gestione ripristino (RMAN):
$ rman TARGET sys/OracleLab123@cdb1 AUXILIARY sys/OracleLab123@cdb1_stby
Eseguire i comandi seguenti in RMAN:
DUPLICATE TARGET DATABASE
FOR STANDBY
FROM ACTIVE DATABASE
DORECOVER
SPFILE
SET db_unique_name='CDB1_STBY' COMMENT 'Is standby'
NOFILENAMECHECK;
I messaggi simili ai seguenti vengono visualizzati al termine dei comandi:
media recovery complete, elapsed time: 00:00:00
Finished recover at 29-JUN-22
Finished Duplicate Db at 29-JUN-22
Esci da RMAN:
RMAN> EXIT;
Abilitare Data Guard Broker:
sqlplus / as sysdba
SQL> ALTER SYSTEM SET dg_broker_start=true;
SQL> EXIT;
Configurare Data Guard Broker in OracleVM1 (primario)
Avviare Data Guard Manage e accedere usando SYS e una password. Non usare l'autenticazione 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.
Rivedere la configurazione:
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)
L'installazione di Oracle Data Guard è stata completata. La sezione successiva illustra come testare la connettività e il passaggio.
Connettere il database dal computer client
Aggiornare il file tnsnames.ora nel computer client. Questo file si trova in genere in $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)
)
)
Avviare il comando 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>
Testare la configurazione di Data Guard
Passare al database in OracleVM1 (primario)
Passare da primario a standby (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>
È ora possibile connettersi al database di standby. Avviare il comando 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>
Passare al database in OracleVM2 (standby)
Per passare al passaggio, eseguire il codice seguente in 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"
Dovrebbe essere ancora possibile connettersi al database primario. Avviare il comando 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>
L'installazione e la configurazione di Data Guard in Oracle Linux sono state terminate.
Eliminare la macchina virtuale
Quando le macchine virtuali non sono più necessarie, è possibile usare il comando seguente per rimuovere il gruppo di risorse, le macchine virtuali e tutte le risorse correlate:
az group delete --name $RESOURCE_GROUP