- Implementa una topologia di disaster recovery multicloud utilizzando Oracle Database Service for Azure
- Preparazione alla distribuzione della topologia
Preparazione alla distribuzione della topologia
Per garantire il funzionamento di Data Guard, i due database nelle diverse aree devono comunicare. Pertanto, è necessario impostare una connessione di peering remoto tra le due aree in OCI tramite i rispettivi DRG. I DRG vengono creati dall'impostazione OracleDB per Azure, pertanto è sufficiente stabilire una connessione di peering remoto tra i DRG esistenti.
Impostare la rete
Per configurare una rete, procedere come segue
- Impostare la connettività di rete per i sistemi di database Azure VM e OracleDB per Azure.
- Assicurarsi di disporre della chiave privata ssh per il sistema Oracle DB disponibile nella VM di Azure.
- Testare la connettività tra le VM di Azure e i sistemi DB di OracleDB for Azure.
- Impostare la rete per i sistemi di database in OCI.
- Passare ai dettagli della VCN del sistema DB nell'area 1, selezionare Collegamenti gateway di instradamento dinamico, quindi il nome del DRG per caricare i dettagli del DRG nell'area 1. Selezionare quindi Allegati a connessione peering remoto. In una seconda finestra del browser, fare esattamente lo stesso per l'area 2.
- Successivamente, in entrambe le aree, selezionare Crea connessione peering remoto per creare un RPC.
- Dopo aver creato entrambi gli RPC, selezionare il nome RPC nell'area 1 e copiare l'OCID.
- Nell'area 2, selezionare il nome RPC e selezionare Stabilisci connessione. Selezionare il nome dell'area corretta per l'area 1 (alla quale ci si connette) e fornire l'OCID per l'RPC nell'area 1, copiato nel passo precedente. Pochi istanti dopo aver stabilito la connessione, lo stato peer deve essere "Peered".
- Successivamente, consenti il traffico tra le reti VCN nelle due regioni. Passare ai dettagli della VCN e selezionare l'elenco di sicurezza predefinito. Selezionare Aggiungi regole di entrata per consentire il traffico dall'intervallo CIDR della VCN opposta.
- Infine, connettiti dalle VM di Azure ai rispettivi sistemi OCI Base DB. Modificare il file
tnsnames.ora
affinché entrambi i sistemi Base DB possano avere una connessione all'altro database. - Verificare che
tnsping
funzioni correttamente da entrambi i sistemi DB al database opposto.
Impostazione della configurazione DR di Oracle Database for Azure
Per impostare il database Oracle per la configurazione DR di Azure, è necessario preparare sia un database primario che un database secondario, come descritto di seguito.
Nota
Fare clic su Copia per salvare l'esempio di comando negli Appunti da incollare nella riga di comando. Assicurarsi di sostituire qualsiasivariables
con valori specifici dell'implementazione.
Prepara il database primario
Per preparare il database primario, è necessario configurare listener statici, aggiornare il file tnsnames.ora e configurare varie impostazioni e parametri del database.
- Dal prompt
SQL>
, verificare le seguenti informazioni:- Controllare che il flashback del database sia abilitato
- Controllare che il log forzato del database sia abilitato
- Controllare che il database sia in modalità di log di archivio
- Verifica che il database sia in modalità aperta
- Controlla che il database sia nel ruolo di database primario
select log_mode, FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE from v$database ;
L'output deve essere simile al seguente:LOG_MODE FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE ---------------- ------------------------ ---------------------- -------------------- ----------------------- ARCHIVELOG YES YES READ WRITE PRIMARY
- Controllare che la gestione automatica dei file in standby sia impostata su automatica eseguendo questo comando:
show parameter standby_file_management
L'output deve essere simile al seguente:NAME TYPE VALUE ------------------------------------ ----------- ---------- standby_file_management string AUTO
- Impostare i file di configurazione del broker:
show parameter dg_broker_config_file1;
L'output deve essere simile al seguente:NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ dg_broker_config_file1 string /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr1dbuks_898_lhr.dat
Quindi immettere il comando seguente:
show parameter dg_broker_config_file2;
L'output deve essere simile al seguente:NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ dg_broker_config_file2 string /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/dr2dbuks_898_lhr.dat
- Abilitare il broker Data Guard:
show parameter dg_broker_start
L'output deve essere simile al seguente:NAME TYPE VALUE ------------------------------------ ----------- -------------- dg_broker_start boolean FALSE
Immettere quindi i seguenti comandi:alter system set dg_broker_start=true scope=both;
show parameter dg_broker_start
L'output deve essere simile al seguente:NAME TYPE VALUE ------------------------------------ ----------- -------------- dg_broker_start boolean TRUE
- Dal prompt dei comandi (ad esempio,
[oracle@ldbuksdr ]$
), prendere nota dello stato del listerner:lsnrctl status
- Dettagli di configurazione del database note:
srvctl config database -d db_unique_name
- Prendere nota delle voci
tns
:cat $ORACLE_HOME/network/admin/tnsnames.ora
- Output della nota
sqlnet.ora
:cat $ORACLE_HOME/network/admin/sqlnet.ora
- Copiare il file delle password nel sistema DB in standby nella posizione
/tmp
immettendo i comandi riportati di seguito.cd .ssh
scp -i private_key /tmp/orapw<sid> opc@ip_standby_vm:/tmp/orapwsid
- Individuare e copiare i file wallet nel sistema DB in standby nella posizione
/tmp
:select CON_ID, WRL_PARAMETER, WRL_TYPE, STATUS, WALLET_TYPE from V$ENCRYPTION_WALLET;
L'output deve essere simile al seguente:CON_ID WRL_PARAMETER STATUS WALLET_TYPE ---------- ------------------------------------------------------------------------------ ------------ ------------ ---------------------------- 1 /opt/oracle/dcs/commonstore/wallets/dbuks_898_lhr/tde/ OPEN AUTOLOGIN 2 OPEN AUTOLOGIN 3 OPEN AUTOLOGIN
Quindi immettere:cd /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde ls -ltra
Dovresti vedere qualcosa del genere:-rw------- 1 oracle asmadmin 5467 Jun 19 18:59 ewallet.p12 -rw------- 1 oracle asmadmin 5512 Jun 19 18:59 cwallet.sso
Immettere quindi i comandi seguenti (dovedb_unique_name
è il nome univoco del database del wallet):[oracle@ ~]$ cp /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12/tmp/cwallet.p12
cp /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.sso/tmp/cwallet.sso
chmod 777 /tmp/ewallet.p12
chmod 777 /tmp/cwallet.sso
scp -i private_key /tmp/ewallet.p12 opc@ip_standby_vm:/tmp/ewallet.p12
scp -i private_key /tmp/cwallet.sso opc@ip_standby_vm:/tmp/cwallet.sso.
- Configurare il listener statico.Per la creazione iniziale di un'istanza del database di standby è necessario un listener statico. Quando un database è inattivo, un listener statico abilita una connessione remota a un'istanza, consentendo di utilizzare Oracle Data Guard per avviare l'istanza. Accertarsi che non vi siano interruzioni di riga o spazi vuoti nei file
listener.ora
.Nel database primario aggiungere il file
SID_LIST_LISTENER
nel filelistener.ora
per includere il nome univoco del database, la Oracle home e il SID (ID di sistema) Oracle del database primario.
Aggiungere la voce seguente alsnrctl status vi listener.ora
listener.ora
, dove:DB_UNIQUE_NAME
è il nome univoco del database primario.ORACLE_HOME
è la Oracle home locale del database primario.ORACLE SID
è il SID del database primario.
La voce deve avere un aspetto simile al seguente (le voci perSID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=DB_UNIQUE_NAME)(ORACLE_HOME=ORACLE_HOME) (SID_NAME = ORACLE SID)))
GLOBAL_DBNAME
,ORACLE_HOME
eSID_NAME
variano):SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com) (ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1)(SID_NAME=dbuks)))
Ricaricare il listener e verificarne lo stato.lsnrctl reload lsnrctl status
- Configurare le voci
tns
.Per garantire il trasporto corretto dei redo, sono necessarie voci per ogni database nei filetnsnames.ora
primario e in standby. Gli indirizzi IP vengono utilizzati in quanto non vi è alcun DNS tra i database per risolvere i nomi dei server agli indirizzi IP. Per sostituire i valori rilevanti per la configurazione, usare l'esempio seguente. Le configurazioni Oracle Real Application Clusters (Oracle RAC) non sono in grado di risolvere il nome del listener di scansione. È pertanto necessario utilizzare una lista di indirizzi per definire tutti i nodi. Questi verranno aggiunti in seguito, l'istanza iniziale dovrebbe elencare solo un indirizzo IP nelle voci tns per garantire che Oracle Recovery Manager (RMAN) si connetta sempre agli stessi nodi.[oracle@~]$ cd $ORACLE_HOME/network/admin [oracle@~]$ vi tnsnames.ora
La voce nel filetnsnames.ora
dovrebbe avere un aspetto simile al seguente:DBUKS_R2J_AMS=(DESCRIPTION=(SDU=65536)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3) (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.91.0.177)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=dbuks_r2j_ams.odsp083156.cvcn.oraclevcn.com)(UR=A))) DBUKS_898_LHR=(DESCRIPTION=(SDU=65535)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3) (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.90.0.246)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)(UR=A)))
Prepara il database in standby
Successivamente, preparare il database in standby.
- Elimina manualmente il database creato dagli strumenti di Oracle Database for Azure. Prima di eliminare il database di standby, salvare il file db_unique_name corrente e prendere nota della posizione del wallet che verrà utilizzata in seguito. La query seguente fornisce dettagli per la posizione del wallet.
- Dal prompt dei comandi sqlplus, immettere::
select * from V$ENCRYPTION_WALLET;
- Successivamente, preparare lo script
rm_dbfiles.sql
per rimuovere i file correlati al database:srvctl config database -d db_unique_name
- Eseguire lo script seguente per chiudere il database che si sta creando come database in standby e rimuovere i file del database:
vi rm_dbfiles.sql set heading off linesize 999 pagesize 0 feedback off trimspool on spool /home/oracle/demo/files.lst select 'asmcmd rm '||name from v$datafile union all select 'asmcmd rm '||name from v$tempfile union all select 'asmcmd rm '||member from v$logfile; spool off create pfile='/home/oracle/demo/ORACLE_UNQNAME.pfile' from spfile; exit
- Quindi passare al prompt sqlplus come DBA di sistema:
sqlplus "/ as sysdba"
Ed eseguire i seguenti comandi:@rm_dbfiles.sql
exit
- Successivamente, concedere l'autorizzazione per leggere, scrivere ed eseguire (dove
db_unique_name
è il nome univoco del database interessato):chmod 777 files.lst
srvctl stop database -d db_unique_name
- Salvare ed eseguire lo script:
./files.lst
- Dal prompt dei comandi sqlplus, immettere::
- Copiare il password file e i file wallet ricevuti in
/tmp
dal database primario nelle rispettive posizioni nel sistema DB del database di standby.- Copiare il password file del database e i file del wallet ricevuti in /tmp dal database primario alle rispettive posizioni nel sistema DB del database di standby (dove orapwsid è la password SID):
Ad esempio:sudo cp /tmp/orapwsid $ORACLE_HOME/dbs/orapwsid
L'output deve essere simile al seguente:sudo ls -ltra /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
-rw-r-----1 oracle oinstall 2048 Jul3 13:42 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
- Verificare che l'output md5sum del password file corrisponda a quello primario e in standby (dove orapwsid è la password SID):
L'output del database primario deve avere un aspetto simile al seguente (dove orapwsid èmd5sum /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwsid
orapwdbuks
):
E per il database in standby:b3895fa6357471f80c6e0f4ac16fdc23 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
b3895fa6357471f80c6e0f4ac16fdc23 /u01/app/oracle/product/19.0.0.0/dbhome_1/dbs/orapwdbuks
- Rimuovere i file wallet esistenti e copiare i file wallet da
/tmp
nella posizione TDE (dovedb_unique_name
è il nome univoco del database interessato):[oracle@ ~]$ cd /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/
rm ewallet.p12 cwallet.sso
sudo cp /tmp/ewallet.p12 /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12
sudo cp /tmp/cwallet.sso /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.ss
chown oracle:asmadmin /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/ewallet.p12
sudo chown oracle:asmadmin /opt/oracle/dcs/commonstore/wallets/db_unique_name/tde/cwallet.sso
- Copiare il password file del database e i file del wallet ricevuti in /tmp dal database primario alle rispettive posizioni nel sistema DB del database di standby (dove orapwsid è la password SID):
- Configura listener statico:
- Nel database di standby in OCI, aggiungere il file
SID_LIST_LISTENER
per includere il nome univoco del database, la Oracle home di OCI e il SID (ID di sistema) Oracle del database primario.lsnrctl status
vi listener.ora
- Aggiungere la voce seguente al file
listener.ora
, dove:- DB_UNIQUE_NAME è il nome del database primario.
- ORACLE_HOME è la Oracle home locale del database primario.
- ORACLE SID è il SID del database primario.
Ad esempio, la voce dovrebbe avere un aspetto simile al seguente:SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=DB_UNIQUE_NAME)(ORACLE_HOME=ORACLE_HOME) (SID_NAME = ORACLE_SID)))
SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME= dbuks_r2j_ams. odsp083156.cvcn.oraclevcn.com) (ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/dbhome_1)(SID_NAME=dbuks)))
- Ricaricare il listener e controllare lo stato:
lsnrctl reload
lsnrctl status
- Nel database di standby in OCI, aggiungere il file
- Configurare le voci
tns
:cd $ORACLE_HOME/network/admin
vi tnsnames.ora
La voce nel filetnsnames.ora
dovrebbe avere un aspetto simile al seguente:DBUKS_R2J_AMS=(DESCRIPTION=(SDU=65536)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3) (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.91.0.177)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=dbuks_r2j_ams.odsp083156.cvcn.oraclevcn.com)(UR=A))) DBUKS_898_LHR=(DESCRIPTION=(SDU=65535)(RECV_BUF_SIZE=134217728)(SEND_BUF_SIZE=134217728)(ADDRESS_LIST=(FAILOVER=on)(CONNECT_TIMEOUT=3) (RETRY_COUNT=3)(ADDRESS=(PROTOCOL=TCP)(HOST=10.90.0.246)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED) (SERVICE_NAME=dbuks_898_lhr.odsp129521.cvcn.oraclevcn.com)(UR=A)))