- Implementa una topologia di disaster recovery multicloud utilizzando Oracle Database Service for Azure
- Distribuire la topologia
Distribuire la topologia
La clausola "from service" RMAN consente di ripristinare e recuperare i file del database primario in un database di standby in tutta la rete. È possibile utilizzare questa funzionalità per creare un'istanza di un database in standby al posto del comando RMAN DUPLICATE DATABASE
ed è più intuitiva e meno soggetta a errori, con un conseguente risparmio di tempo.
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.
Creare un database in standby utilizzando RMAN
Utilizzare Oracle Recovery Manager (RMAN) per creare il database di standby dal database primario attivo. In alternativa, è possibile eseguire il ripristino da un backup del database primario.
- Connettersi al database e avviare il database in modalità
NOMOUNT
.$ rman target /
startup nomount;
- Ripristinare il control file in standby dal servizio primario. In questo esempio, DBUKS_898_LHR è il database primario:
L'output deve essere simile al seguente:restore standby controlfile from service 'DBUKS_898_LHR';
Starting restore at 04-JUL-23 using target database control file instead of recovery catalog allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=28 device type=DISK channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: restoring control file channel ORA_DISK_1: restore complete, elapsed time: 00:00:04 output file name=+RECO/DBUKS_R2J_AMS/CONTROLFILE/current.256.1139953721 Finished restore at 04-JUL-23
- Mount the database:
L'output deve essere simile al seguente:alter database mount;
released channel: ORA_DISK_1 Statement processed
- Come root nell'istanza OCI, modificare le autorizzazioni della directory Oracle in apertura (
chmod 777
).cd /opt/
ls -ltra
Dovresti vedere:drwxr-xr-x 10 root root 4096 Jun 20 03:52 oracle
L'ingresso:[root@ldbuksdr]# chmod 777 oracle/
ls -ltra
Dovresti vedere:drwxrwxrwx 10 root root 4096 Jun 20 03:52 oracle
- Eseguire il ripristino dal database primario (DBUKS_898_LHR):
L'output deve essere simile al seguente:restore database from service ' DBUKS_898_LHR ';
Starting restore at 04-JUL-23 using target database control file instead of recovery catalog allocated channel: ORA_SBT_TAPE_1 channel ORA_SBT_TAPE_1: SID=162 device type=SBT_TAPE channel ORA_SBT_TAPE_1: Oracle Database Backup Service Library VER=19.0.0.1 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=28 device type=DISK channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00001 to +DATA/DBUKS_898_LHR/DATAFILE/system.261.1139943103 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00003 to +DATA/DBUKS_898_LHR/DATAFILE/sysaux.268.1139943085 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:38 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00004 to +DATA/DBUKS_898_LHR/DATAFILE/undotbs1.260.1139943133 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:04 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00005 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/system.264.1139942759 channel ORA_DISK_1: restore complete, elapsed time: 00:00:49 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00006 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/sysaux.265.1139942759 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:25 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00007 to +DATA/DBUKS_898_LHR/F9D6EA8CCAA09630E0530905F40A5107/DATAFILE/undotbs1.266.1139942759 channel ORA_DISK_1: restore complete, elapsed time: 00:00:18 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00008 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/system.273.1139943583 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:04 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00009 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/sysaux.271.1139943599 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:16 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00010 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/undotbs1.270.1139943611 channel ORA_DISK_1: restore complete, elapsed time: 00:00:20 channel ORA_DISK_1: starting datafile backup set restore channel ORA_DISK_1: using network backup set from service DBUKS_898_LHR channel ORA_DISK_1: specifying datafile(s) to restore from backup set channel ORA_DISK_1: restoring datafile 00011 to +DATA/DBUKS_898_LHR/DATAFILE/users.269.1139943873 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:02 channel ORA_SBT_TAPE_1: starting datafile backup set restore channel ORA_SBT_TAPE_1: using network backup set from service DBUKS_898_LHR channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set channel ORA_SBT_TAPE_1: restoring datafile 00012 to +DATA/DBUKS_898_LHR/FE812140C0716067E053F6005A0AEB32/DATAFILE/users.274.1139943875 channel ORA_DISK_1: restore complete, elapsed time: 00:00:02 channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:02 Finished restore at 04-JUL-23
exit ;
Convalida database in standby
Successivamente, è necessario convalidare il database in standby.
- Visualizzare il nome e il ruolo del database. Nel prompt
SQL>
immettere:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
Dovresti vedere una risposta simile a questa:
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE -------------------- ------------------ --------------- ------------------- ------------------------ ---------------------------- YES NO MOUNTED PHYSICAL STANDBY DISABLED MAXIMUM PERFORMANCE
- Visualizzare il processo di archiviazione, il numero di thread di stato e il numero di sequenza per il database:
select sysdate,process,status,thread#,sequence#,block# from v$managed_standby where status!='IDLE';
Dovresti vedere una risposta simile a questa:
04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0
Quindi immettere:
select distinct process from gv$managed_standby;
Dovresti vedere una risposta simile a questa:
PROCESS --------- ARCH DGRD
Aggiungi file di log in standby ai database primari e in standby
SQL>
per le seguenti operazioni:
- In primo luogo, aggiungere i file di log in standby al database primario.
- Immettere:
select group#, type, member from v$logfile;
Vedrai una risposta simile a questa:
GROUP# TYPE MEMBER ---------- ------- --------------------------------------------------------- 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.259.1139942665 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.258.1139942665 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665
- Immettere:
select bytes, group# from v$log;
Vedrai una risposta simile a questa:1073741824 1 1073741824 3 1073741824 2
- Inserire questa serie di comandi:
SQL> alter database add standby logfile thread 1 group 5 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 6 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 7 ('+RECO') size 1073741824;
La risposta per ciascuno di essi dovrebbe essere:Database altered
- Immettere:
select group#, type, member from v$logfile;
Vedrai una risposta simile a questa:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------- 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.259.1139942665 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.258.1139942665 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665 4 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_4.432.1141789993 5 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_5.431.1141790001 6 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_6.430.1141790011 7 STANDBY +RECO/DBUKS_898_LHR/ONLINELOG/group_7.430.1141790017
- Archiviare l'elenco di log:
archive log list
- Immettere:
- A questo punto, aggiungere i file di log in standby al database in standby.
- Immettere:
select group#, type, member from v$logfile;
Vedrai una risposta simile a questa:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------ 3 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_3.489.1141280529 2 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_2.488.1141280519 1 ONLINE +RECO/DBUKS_R2J_AMS/ONLINELOG/group_1.487.1141280511
- Immettere:
select bytes, group# from v$log;
Vedrai una risposta simile a questa:1073741824 1 1073741824 3 1073741824 2
- Inserire questa serie di comandi:
alter database add standby logfile thread 1 group 4 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 5 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 6 ('+RECO') size 1073741824;
alter database add standby logfile thread 1 group 7 ('+RECO') size 1073741824;
La risposta per ogni comando deve essere:Database altered
- Immettere:
select group#, type, member from v$logfile;
Vedrai una risposta simile a questa:GROUP# TYPE MEMBER ---------- ------- ------------------------------------------------------ 3 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_3.489.1141280529 2 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_2.488.1141280519 1 ONLINE +RECO/DBUKS_898_LHR/ONLINELOG/group_1.487.1141280511 4 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_4.294.1141283919 5 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_5.295.1141283929 6 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_6.296.1141283937 7 STANDBY +DATA/DBUKS_R2J_AMS/ONLINELOG/group_7.296.1141283938
- Immettere:
- Eliminare i file di log con il nome univoco del database primario. Uno dei tre file di log sarà il log corrente, pertanto non sarà possibile eliminarlo in questo momento. Questo file verrà eliminato e ricreato in seguito.
- Immettere:
alter database drop logfile group 1;
Vedrai una risposta simile a questa:alter database drop logfile group 1 * ERROR at line 1: ORA-01623: log 1 is current log for instance dbuks (thread 1) - cannot drop ORA-00312: online log 1 thread 1: '+RECO/DBUKS_898_LHR/ONLINELOG/group_1.257.1139942665'
- Immettere:
alter database drop logfile group 2;
alter database drop logfile group 3;
La risposta per ciascuno di essi dovrebbe essere:Database altered
- Immettere:
- Ricreare i file di log immettendo i seguenti comandi:
alter database add logfile thread 1 group 2 ('+RECO') size 1073741824;
alter database add logfile thread 1 group 3 ('+RECO') size 1073741824;
La risposta per ciascuno di essi dovrebbe essere:Database altered.
Configurare Oracle Data Guard Broker
- Verificare il valore dg_broker_start per il database primario e il database in standby. Assicurarsi che sia impostato su True. Nella riga di comando SQL immettere:
show parameter dg_broker_start;
L'output deve essere simile al seguente:NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ dg_broker_start boolean TRUE
Se dg_broker_start è impostato suFALSE
, impostare il parametro suTRUE
prima di passare ai passi successivi; immettere:alter system set dg_broker_start=true;
L'output deve essere simile al seguente:select pname from v$process where pname like 'DMON%';
PNAME ----- DMON
- Controllare i file Oracle Data Guard per il database primario:
show parameter dg_broker_config_file1;
Se si dispone di Oracle RAC o Oracle ASM, è possibile modificare la posizione del file di configurazione, ad esempio:show parameter dg_broker_config_file2;
alter system set dg_broker_config_file1=broker_config_file_location;
alter system set dg_broker_config_file2=broker_config_file_location;
- Registrare il database primario e il database di standby:Utilizzare l'interfaccia della riga di comando (DGMGRL) di Oracle Data Guard per registrare il database primario e aggiungere il profilo del database in standby alla configurazione del broker.
- Eseguire il login all'host principale come sys.
dgmgrl sys/password@net_service_name_for_primary
- Creare una configurazione che utilizzi il nome del database primario.
CREATE CONFIGURATION configuration_name AS PRIMARY DATABASE IS primary_database_name CONNECT IDENTIFIER IS primary_database_name;
L'output deve essere simile al seguente:CREATE CONFIGURATION dbuks_898_lhr_dbuks_r2j_ams AS PRIMARY DATABASE IS dbuks_898_lhr CONNECT IDENTIFIER IS dbuks_898_lhr;
- Aggiungere il database di standby.
Ad esempio:ADD DATABASE standby unique database name AS CONNECT IDENTIFIER IS standby unique database name MAINTAINED AS PHYSICAL;
ADD DATABASE dbuks_r2j_ams AS CONNECT IDENTIFIER IS dbuks_r2j_ams MAINTAINED AS PHYSICAL;
L'output deve essere simile al seguente:Database "dbuks_r2j_ams" added
- Eseguire il login all'host principale come sys.
- Abilitare la configurazione:
enable configuration;
- Visualizzare la configurazione:
- Immettere:
show configuration;
Nota
Se si riceve un'AVVERTENZA che indica che non è stato possibile determinare il ritardo di applicazione, eseguire il login al database primario tramite sqlplus ed eseguire alcuni switch di log.Configuration - dbuks_898_lhr_dbuks_r2j_ams Protection Mode: MaxPerformance Members: dbuks_898_lhr - Primary database dbuks_r2j_ams - Physical standby database Fast-Start Failover: Disabled Configuration Status: SUCCESS (status updated 36 seconds ago)
- Visualizzare la configurazione per il database primario (in questo esempio, dbuks_898_lhr):
Verrà visualizzata una risposta simile alla seguente:show database dbuks_898_lhr
Database - dbuks_898_lhr Role: PRIMARY Intended State: TRANSPORT-ON Instance(s): dbuks Database Status: SUCCESS
- Visualizzare la configurazione per il database di standby (in questo esempio, dbuks_r2j_ams):
Verrà visualizzata una risposta simile alla seguente:show database dbuks_r2j_ams
Database - dbuks_r2j_ams Role: PHYSICAL STANDBY Intended State: APPLY-ON Transport Lag: 0 seconds (computed 1 second ago) Apply Lag: 0 seconds (computed 0 seconds ago) Average Apply Rate: 59.00 KByte/s Real Time Query: ON Instance(s): dbuks Database Status: SUCCESS
- Immettere:
Conferma la replica
Il database di standby dovrebbe ora iniziare ad applicare il redo ricevuto dal database primario.
SQL>
per le seguenti operazioni:
- Controllare il processo MRP:
- Immettere:
select sysdate, process, status, thread#, sequence#, block# from v$managed_standby where status!='IDLE';
L'output deve essere simile al seguente:SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 RFS RECEIVING 1 417 2413 10-JUL-23 MRP0 APPLYING_LOG 1 417 2412
- Visualizzare i processi Data Guard.
L'output deve essere simile al seguente:select distinct process from gv$managed_standby;
PROCESS --------- DGRD RFS MRP0 ARCH
- Il database di standby ha ora iniziato ad applicare i redo log. Eseguire alcuni switch di log nel database primario e confermare di nuovo nel database di standby:
L'output deve essere simile al seguente:select sysdate, process, status, thread#, sequence#, block#from v$managed_standbywhere status!='IDLE';
SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 DGRD ALLOCATED 0 0 0 04-JUL-23 ARCH CLOSING 1 253 1 04-JUL-23 ARCH CONNECTED 0 0 0 04-JUL-23 ARCH CLOSING 1 252 1 04-JUL-23 MRP0 APPLYING_LOG 1 254 17 04-JUL-23 RFS RECEIVING 1 254 18
- Archiviare la lista di log nel database primario:
L'output deve essere simile al seguente:archive log list
Quindi immettere:Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 415 Next log sequence to archive 417 Current log sequence 417
alter system switch logfile;
Dovresti ricevere questa risposta:System altered.
Immettere:/
Dovresti vedere:System altered.
A questo punto, archiviare l'elenco di log:
Dovresti ricevere questa risposta:archive log list
Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 417 Next log sequence to archive 419 Current log sequence 419
- Archiviare la lista di log nel database di standby; immettere:
select sysdate, process, status, thread#, sequence#, block# from v$managed_standby where status!='IDLE';
Dovresti ricevere questa risposta:
SYSDATE PROCESS STATUS THREAD# SEQUENCE# BLOCK# --------- --------- ------------ ---------- ---------- ---------- 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 DGRD ALLOCATED 0 0 0 10-JUL-23 ARCH CLOSING 1 418 1 10-JUL-23 ARCH CONNECTED 0 0 0 10-JUL-23 ARCH CLOSING 1 417 2048 10-JUL-23 RFS RECEIVING 1 419 59 10-JUL-23 MRP0 APPLYING_LOG 1 419 58
- Immettere:
- Abilitare il flashback sul database in standby:
- Immettere:
Dopo ogni comando, dovresti vedere:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel; SQL> alter database flashback on;
Database altered
- Verificare che il flashback del database sia abilitato (attivo).
L'output deve essere simile al seguente:select flashback_on from v$database;
FLASHBACK_ON ------------------ YES
- Quindi immettere:
Dovresti vedere:recover managed standby database using current logfile disconnect from session;
Media recovery complete.
- Immettere:
- Visualizzare i dettagli del database:
L'output deve essere simile al seguente:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE ---------------------------------------------------------- --------------- ----- ----------------------- ----------------------------- YES YES MOUNTED PHYSICAL STANDBY ENABLED MAXIMUM PERFORMANCE
- Utilizzare la utility Server Control (srvctl) per arrestare il database di standby:
L'output deve essere simile al seguente:srvctl stop database -d db_unique_name
srvctl stop database -d dbuks_r2j_ams
- Utilizzare la utility Server Control per avviare il database in standby.
L'output deve essere simile al seguente:srvctl start database -d db_unique_name
srvctl start database -d dbuks_r2j_ams
- Visualizzare i dettagli del database:
L'output deve essere simile al seguente:select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
FORCE_LOGGING FLASHBACK_ON OPEN_MODE DATABASE_ROLE DATAGUARD_BROKER PROTECTION_MODE ----------------------------------------------------------------------- -------------------- ----------------------- YES YES READ ONLY WITH APPLY PHYSICAL STANDBY ENABLED MAXIMUM PERFORMANCE
- Ora è possibile assegnare altri switch di file di log dal database primario e assicurarsi che il redo venga applicato al database in standby.
- Ricreare il file di log in sospeso esistente con il nome univoco principale. Immettere i seguenti comandi:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE cancel;
alter database drop logfile group 1;
Dopo ogni comando, dovresti vedere:alter database add standby logfile thread 1 group 1 ('+RECO') size 1073741824;
Infine, inserire:Database altered.
Dovresti vedere:recover managed standby database using current logfile disconnect from session;
Media recovery complete.