Skip to content

Che cos'è un'incarnazione orfana?

Apprezziamo il tuo supporto nell'espandere le nostre sezioni sull'informatica.

Soluzione:

Di seguito è riportato un breve grafico che utilizzerò per spiegare quando vengono creati gli orfani nelle incarnazioni di un database. È una variante del grafico che ho usato per spiegare le incarnazioni nella mia risposta alla domanda Qualcuno può spiegarmi il concetto di "incarnazione" nel database Oracle in modo facile da capire?

Spero che il viaggio sia piacevole.

                                          restore db    +-----+     +-----+     +-----+          
                                          recover db    | 2>3 | --> |  3  | --> |  3  | -->  ... 
                                          resetlogs     +-----+     +-----+     +-----+  ^       
                                                            ^ Incarn   3           3     |    3  
                                                           /  SCN #   500         600    |   700 
                                                          /                              |          
                                                         /                               |          
             restore db    +-----+          +-----+     +-----+                          |          
             recover db    | 1>2 | -------> |  2  | --> |  2  | -->  ...                 |          
             resetlogs     +-----+          +-----+     +-----+  ^                       |          
                           ^       Incarn.     2          2     |    2                  |          
                          /        SCN #      300        400    |   500                 |          
                         /                                      |                       |          
                        /                           + --------------------+              |          
        +-----+     +-----+     +-----+                          |             +-----+  |  +-----+ 
    --> |  1  | --> |  1  | --> |  1  | -->   ...                |          +-> | 2>4 | --> |  4  | 
        +-----+     +-----+     +-----+  ^                       |   restore db +-----+  |  +-----+ 
Incarn.    1           1           1     |     1           2     |   recover db          |     4    
SCN #     100         200         300    |    400         400    |   resetlogs           |    400   
                                         |                       |                       |          
Backup   11:00 ----- 12:00 ----- 13:00 ----- 14:00 ----- 15:00 ----- 16:00 ----- 17:00 ----- 18:00  
                                         |                       |                       |          
Restore/                                (1)                     (2)                     (3)         
Recovery                                                                                            

Ripristino del database a un punto nel tempo (1)

Poco dopo le 13:00 qualcuno decide che il database deve essere ripristinato alle 12:00 (mezzogiorno). Il DBA avvia una serie di comandi RMAN per ripristinare il database a quel punto nel tempo o fa clic su una fantastica interfaccia grafica per avviare un ripristino/recupero da un fornitore di terze parti.

RMAN recupera il backup completo del database e tutti i backup del registro di archivio da disco/nastro e li ripristina sul disco. Nella fase di ripristino RMAN verificherà che tutte le informazioni pertinenti siano disponibili e farà avanzare tutte le transazioni concluse fino al Punto nel tempo e farà retrocedere tutte le transazioni non concluse fino al Punto nel tempo, per garantire che il database sia in uno stato coerente.

Prima di poter essere aperto al pubblico, il database deve assicurarsi che tutti i backup futuri non siano in conflitto con i backup precedenti. A questo punto deve essere creata una nuova incarnazione e ciò avviene quando si esegue il seguente comando per aprire il database:

ALTER DATABASE OPEN RESETLOGS;

È possibile eseguire il seguente script sulla propria istanza per recuperare una vista gerarchica delle incarnazioni (attuali):

set pages 50               --- repeat header every 50 records
set lines 230              --- set lines(ize) length to 230
column path format a40     --- set column path to alpha-numeric 40
alter sessiosn set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';
                           --- set date format of date columns to something more detailed
select 
    INCARNATION#, 
    PRIOR_INCARNATION#, 
    RESETLOGS_CHANGE#, 
    RESETLOGS_TIME, 
    STATUS, 
    SYS_CONNECT_BY_PATH(INCARNATION#, ' -> ') Path 
    FROM v$database_incarnation 
    WHERE LEVEL >=1 START WITH INCARNATION# = '1' 
        CONNECT BY PRIOR INCARNATION# = PRIOR_INCARNATION# 
    ORDER BY LEVEL, Path, RESETLOGS_TIME;

L'incarnazione corrente del database sarà simile a questa:

INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME      STATUS  PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
           1                  0                 1 2017-03-08 15:57:31 PARENT   -> 1
           2                  1               200 2018-07-27 13:20:00 CURRENT  -> 1 -> 2

Utilizzando il grafico possiamo vedere che ci siamo spostati dal percorso contenente l'incarnazione 1 al percorso con l'incarnazione 2, perché abbiamo aperto il database con RESETLOGS e il database ha creato una nuova incarnazione.

Ripristino del database a Point in Time (2)

Supponiamo ancora una volta che il database continui a funzionare dopo la prima azione di ripristino/recupero e che poco dopo le 15:00 qualcuno decida di effettuare un nuovo ripristino/recupero all'ora intera alle 15:00 dello stesso giorno.

RMAN ripristinerà i file, recupererà il database e farà partire un'azione di ALTER DATABASE OPEN RESETLOGS per riportare il database online. Il numero di INCARNAZIONE sarà ora impostato su 3 e il primo backup delle 16:00 conterrà le informazioni:

INCARNATION#    3
SCN#           500
Time......... 16:00

Se interroghiamo le incarnazioni nel database utilizzando lo script precedente, otterremo qualcosa di simile:

INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME      STATUS  PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
           1                  0                 1 2017-03-08 15:57:31 PARENT   -> 1
           2                  1               200 2018-07-27 13:20:00 PARENT   -> 1 -> 2
           3                  2               400 2018-07-27 15:20:00 CURRENT  -> 1 -> 2 -> 3

Ripristino del database a un punto nel tempo (3)

Supponiamo ancora una volta che il database continui a funzionare dopo la seconda azione di ripristino/recupero e che poco dopo le 17:00 (17:00) qualcuno decida di effettuare un nuovo ripristino/recupero alle 14:00 (14:00) dello stesso giorno.

RMAN ripristinerà i file, ripristinerà il database e farà partire un'azione di ALTER DATABASE OPEN RESETLOGS per riportare il database online. Il numero INCARNAZIONE sarà ora impostato su 4 e il primo backup delle 18:00 conterrà le informazioni:

INCARNATION#    4
SCN#           400
Time......... 18:00

Se interroghiamo le incarnazioni nel database utilizzando lo script precedente, otterremo qualcosa di simile:

INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME      STATUS  PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
           1                  0                 1 2017-03-08 15:57:31 PARENT   -> 1
           2                  1               200 2018-07-16 13:20:00 PARENT   -> 1 -> 2
           3                  2               400 2018-07-17 15:20:00 ORPHAN   -> 1 -> 2 -> 3
           4                  2               300 2018-07-17 17:20:00 CURRENT  -> 1 -> 2 -> 4

Che cosa è successo? Abbiamo un orfano!

Incarnazioni orfane...

Se guardate il grafico, attualmente ci troviamo sul quadrato alle 18:00 (18:00) con l'Incarnazione 4 e il SCN 400. Se si segue questa linea fino all'inizio, si può vedere che dall'incarnazione 4 si risale all'incarnazione 2 e poi si scende all'incarnazione 1, che è il momento in cui è stato creato il database.

Questo corrisponde anche all'output (semplificato) dei miei script.

INCARNATION# PRIOR_INCARNATION# RESETLOGS_CHANGE# RESETLOGS_TIME      STATUS  PATH
------------ ------------------ ----------------- ------------------- ------- --------------------
           4                  2               300 2018-07-17 17:20:00 CURRENT  -> 1 -> 2 -> 4

Quindi cosa è successo con l'incarnazione 3? L'incarnazione 3 è cattiva o stantia o cosa succede?

Risposta

No, l'incarnazione 3 non è cattiva, è solo orfana.

Su una scala più ampia, con più tempo tra i backup e i ripristini, si potrebbe comunque ripristinare/recuperare il database a un punto nel tempo del lignaggio dell'incarnazione 3. Si dovrebbe eseguire il seguente comando:

RESET DATABASE TO INCARNATION 3;

... e poi ripristinare/recuperare il database a quel punto nel tempo come si farebbe con un altro ripristino/recupero di un database.

Che cosa è il ORPHAN indica che l'incarnazione 3 non è più collegata allo stato attuale del database con l'attuale incarnazione 4. L'incarnazione 3 non è più necessaria per il ripristino del database. L'incarnazione 3 orfana non è più necessaria per ripristinare/recuperare il database lungo la linea temporale attuale.

... Risultato dei backup obsoleti

Ora guardando i backup del database in relazione all'incarnazione orfana, RMAN determina che i backup dell'incarnazione orfana sono OBSOLETE. Ma questa è una storia per un'altra domanda e risposta...

RC_DATABASE_INCARNAZIONE

ORPHAN se si tratta di un'incarnazione non corrente che non è un diretto
antenato diretto dell'incarnazione corrente.

Passi per la riproduzione:

SQL> select incarnation#, status from v$database_incarnation;

INCARNATION# STATUS
------------ -------
           1 PARENT
           2 CURRENT

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    3393014

SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  8628936 bytes
Variable Size             394265912 bytes
Database Buffers          662700032 bytes
Redo Buffers                8146944 bytes
Database mounted.
SQL> flashback database to scn 3393014;

Flashback complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select incarnation#, status from v$database_incarnation;

INCARNATION# STATUS
------------ -------
           1 PARENT
           2 PARENT
           3 CURRENT

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
    3393975

SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  8628936 bytes
Variable Size             394265912 bytes
Database Buffers          662700032 bytes
Redo Buffers                8146944 bytes
Database mounted.
SQL> flashback database to scn 3393200;

Flashback complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select incarnation#, status from v$database_incarnation;

INCARNATION# STATUS
------------ -------
           1 PARENT
           2 PARENT
           3 PARENT
           4 CURRENT

SQL> shu immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  8628936 bytes
Variable Size             394265912 bytes
Database Buffers          662700032 bytes
Redo Buffers                8146944 bytes
Database mounted.
SQL> flashback database to scn 3393014;

Flashback complete.

SQL> alter database open resetlogs;

Database altered.

SQL> select incarnation#, status from v$database_incarnation;

INCARNATION# STATUS
------------ -------
           1 PARENT
           2 PARENT
           3 ORPHAN
           4 ORPHAN
           5 CURRENT

valutazioni e recensioni

Alla fine di tutto trovi le spiegazioni di altri project manager, hai anche la libertà di lasciare la tua se lo ritieni opportuno.



Utilizzate il nostro motore di ricerca

Ricerca
Generic filters

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.