Share via


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.

Diagramma che mostra la casella di ricerca e i risultati per la prima macchina virtuale Oracle.

Nella parte superiore del riquadro selezionare Connetti>Bastion.

Diagramma che mostra le selezioni per la connessione tramite Azure Bastion.

Immettere il nome utente e la password e quindi selezionare il pulsante Connetti .

Diagramma che illustra come immettere le credenziali per la connessione tramite Azure Bastion.

Viene visualizzata una nuova scheda con una connessione sicura alla macchina virtuale, in cui il software Oracle è già installato da un'immagine Azure Marketplace.

Diagramma che mostra una connessione tramite Azure Bastion in un browser.

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

Screenshot della casella di ricerca e dei risultati per la seconda macchina virtuale Oracle.

Nella parte superiore del riquadro selezionare Connetti>Bastion.

Diagramma che mostra le selezioni per la connessione tramite Azure Bastion.

Immettere il nome utente e la password e quindi selezionare il pulsante Connetti .

Screenshot dell'immissione di credenziali di nome utente e password per la connessione tramite Azure Bastion.

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

Passaggi successivi