29 maggio 2007

RMAN rollforward standby

Forse ne sono uscito. Per colpa di qualche script scritto male si sono persi dei redo log archiviati dal database RAC in produzione, quindi lo standby database non poteva più andare avanti.
Il concetto è questo: si usa RMAN per fare il rollforward dei blocchi dei datafile dello standby, che essendo fisico sono uguali a quelli originali.
Per fare ciò bisogna procurarsi un backup incrementale per lo standby:

SQL> SELECT CURRENT_SCN FROM V$DATABASE;

RMAN> BACKUP INCREMENTAL FROM SCN <scn dello stdby> DATABASE FORMAT '/tmp/ForStandby_%U' tag 'FOR STANDBY';

Portare poi i file prodotti al cospetto dello standby, portandoli a conoscenza del suo RMAN:

RMAN> CATALOG START WITH '/tmp/ForStandby_';

Io ho utilizzato un catalogo sul db principale e il control file sullo standby per evitare problemi: i due db hanno lo stesso ID!
Ora gli diciamo di fare il recover senza redo!:

RMAN> RECOVER DATABASE NOREDO;

Ora il database dovrebbe essere pronto:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

Peccato che, nel mio caso, il control file dello standby è rimasto all'SCN originale, quindi ho dovuto ricrearlo con uno snapshot di RMAN sul principale:

SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '...';

Portiamo il control file appena creato sullo standby e facciamo partire l'ultimo recover; dovrebbe funzionare.

1 commento:

clusterrac2 ha detto...

ciao ..

mai fermare gli stby per un tempo superiore alla retention policy implementata sul Primary DB.. e fisiologico immagino (in base allo storage) definire degli automatiscmi che svuotano gli archive log sui primari (ridondati o meno) ... l'insieme di automatismi (backup,applicativi,tuning,errori etc etc) consoni e sincornizzati tra loro permette a molti sistemi di "vivere di vita propia" anche senza la normale amministrazione che questi dovrebbero avere..garantendo quindi uptime apprezzabili


poi se lo script killer :) fosse una cosa scappata nel momento del fault per errore va be ..succede.

bye.