Oracle
 sql >> Database >  >> RDS >> Oracle

come recuperare il database in standby da un registro di archivio mancante

Un database Physical Standby si basa sull'applicazione continua dei registri di archivio da un database primario per essere sincronizzato con esso. Nelle versioni di Oracle Database precedenti a 10g, in caso di un registro di archivio scomparso o danneggiato, è stato necessario ricostruire da zero il database di standby. Da 10g puoi utilizzare un backup incrementale da SCN e ripristinare lo standby utilizzando lo stesso per compensare i log di archivio mancanti. In questo, vedremo come recuperare il database di standby da un log di archivio mancante

Quindi, ecco i passaggi su come recuperare il database in standby da un registro di archivio mancante

Passaggio 1:

Sul database di standby controlla l'SCN corrente

sqlplus "/ as sysdba"
SQL>set numwidth 30;
SQL>select current_scn from v$database;
CURRENT_SCN
-----------
6746747647647

Passaggio 2 :

Sul database primario creare il backup incrementale necessario dall'SCN di cui sopra

rman target /
RMAN> {
allocate channel c1 type disk;
BACKUP INCREMENTAL FROM SCN 6746747647647 DATABASE
FORMAT /tmp/inc_standby_%U';
}

Possiamo utilizzare i lavoratori paralleli per velocizzare la creazione del backup se il database ha generato molte modifiche

run
{allocate channel d1 type disk;
allocate channel d2 type disk;
allocate channel d3 type disk;
allocate channel d4 type disk;
allocate channel d5 type disk;
allocate channel d6 type disk;
allocate channel d7 type disk;
allocate channel d8 type disk;
allocate channel d9 type disk;
allocate channel d10 type disk;
BACKUP INCREMENTAL FROM SCN 6746747647647 DATABASE
FORMAT /tmp/inc_standby_%U';
}

Passaggio 3:

Annulla il ripristino gestito nel database di standby

sqlplus "/ as sysdba"
SQL>alter database recover managed standby database cancel;
Media recovery complete.

Passaggio 4:

  • scp i file di backup sul server di standby nella cartella /tmp.
  • Catalogare i file di backup incrementali nel database di standby
rman target /
RMAN> CATALOG START WITH '/tmp/';
searching for all files that match the pattern /tmp/
List of Files Unknown to the Database
=====================================……
Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files…
cataloging done

Passaggio 5:

Applica il backup incrementale al database di standby

rman target /
RMAN>RECOVER DATABASE NOREDO;

Passaggio 6:

Riporta il database in standby in modalità di ripristino gestito.

sqlplus "/ as sysdba"
SQL>recover managed standby database disconnect;
Media recovery complete.

Da alert.log noterai che il database in standby sta ancora cercando i vecchi file di registro

FAL[client]: Failed to request gap sequence
GAP - thread 1 sequence ….

Ciò è dovuto al fatto che il file di controllo non è stato aggiornato. Quindi il controlfile di standby deve essere ricreato

Passaggio 7:

Sul primario crea un nuovo file di controllo standby

sqlplus "/ as sysdba"
SQL> alter database create standby controlfile as ‘/tmp/standby01.ctl’;
System altered.

Passaggio 8:

Acquisisci informazioni sul file di dati nel database STANDBY.
Il file di controllo in standby dovrà essere aggiornato dal backup eseguito al passaggio n. 7. Poiché è probabile che i nomi dei file di dati siano diversi da quelli primari, salvare i nomi dei file di dati di standby come riferimento dopo aver ripristinato il file di controllo dal backup primario. Esegui la query seguente nel database di standby e salva i risultati per un ulteriore utilizzo.

spool standby_datafile_names.txt
set pagesize 1000;
set lines 200
col name format a60
select file#, name from v$datafile order by file# ;
spool off

Passaggio 9:

Copiare il file di controllo di standby nel sito di standby. Arrestare il database in standby e sostituire i file di controllo in standby e riavviare il database in standby nella modalità di ripristino gestito utilizzando il comando seguente

RMAN> SHUTDOWN IMMEDIATE ;
RMAN> STARTUP NOMOUNT;
RMAN> RESTORE STANDBY CONTROLFILE FROM '/tmp/standby01.ctl';

Passaggio 10:

Monta lo standby

RMAN> ALTER DATABASE MOUNT;

Passaggio 11:

Questo passaggio è necessario se la posizione dei file di dati è diversa in standby e Primaria

Se il primario e lo standby hanno la stessa struttura e nomi di file di dati, questo passaggio può essere saltato.

Oracle consiglia di controllare l'incarnazione per primaria e standby prima di completare questo passaggio.

example:  
RMAN> list incarnation; 

Poiché abbiamo ripristinato il file di controllo da PRIMARY, i nomi di posizione del file di dati in questo file di controllo STANDBY ripristinato saranno gli stessi del database PRIMARY. Se la struttura della directory è diversa tra il database di standby e quello primario o se si utilizzano i nomi di file gestiti da Oracle OMF, non sarà in grado di identificare i file di standby. Quindi possiamo catalogare i file di dati STANDBY con RMAN per eseguire l'operazione di ridenominazione.

Esegui il passaggio seguente in STANDBY per ogni gruppo di dischi (o directory) in cui risiedono i file di dati in standby.

RMAN> CATALOG START WITH '+DATA/STBY/datafile/';

Se dei file di dati sono stati aggiunti al primario DOPO l'SCN di backup (nel nostro esempio, scn 6746747647647), tali file di dati non verranno creati automaticamente sul server di standby indipendentemente dall'impostazione del parametro standby_file_management. I file di dati aggiunti dovranno essere ripristinati sul server di standby. Per determinare se sono stati aggiunti file a Primario dall'SCN corrente in standby

SQL>SELECT FILE#, NAME FROM V$DATAFILE WHERE CREATION_CHANGE# > 6746747647647

Se restituisce delle righe, dobbiamo ripristinare quei file dal primario allo standby

RMAN> backup datafile <missing-1>,<missing-2> ,<missing-3> , format '/tmp/ForStandby_%U' tag 'FORSTANDBY';

Copiali in standby, quindi cataloga e ripristina

CATALOG START WITH '/tmp/ForStandby';
run
{
set newname for datafile X to '+DISKGROUP';
set newname for datafile Y to '+DISKGROUP';
set newname for datafile Z to '+DISKGROUP';
etc.
restore datafile x,y,z,….;
}

Ora possiamo cambiare il database per copiare

RMAN> SWITCH DATABASE TO COPY;

Se la query precedente restituisce 0 zero righe

RMAN> SWITCH DATABASE TO COPY;

Passaggio 11

In STANDBY  database, cancella tutti i gruppi di log di ripristino in standby:

SQL> seleziona GROUP# da v$logfile dove TYPE='STANDBY' raggruppa per GROUP#;
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 1;
SQL> ALTER DATABASE CLEAR LOGFILE GROUP 2;
SQL> ALTER DATABASE CANCELLA LOGFILE GROUP 3;
….

Passaggio 12

Ora puoi avviare l'MRP

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;

Spero che ti piacciano questi passaggi dettagliati su come recuperare un database in standby da un registro di archivio mancante. Si prega di fornire il feedback. Potrebbe esserci un errore.

Legge anche
Da ASM a ASM
come trovare il numero di sequenza del registro di archivio in Oracle
come controllare gli errori del registro di avviso in Oracle
Comandi di backup RMAN
Comandi di backup dell'elenco RMAN
Passaggi da eseguire per il rollforward di un database in standby fisico utilizzando il backup incrementale RMAN. (ID documento 836986.1)