Domanda

Ho appena iniziato un lavoro e hanno identificato un problema in cui il database non è attualmente in fase di backup correttamente per così dire. Stiamo facendo un back up ogni 6 ore che utilizza l'utilità di backup nativo di Oracle, ma siamo stati anche venduto un processo da una società in cui hanno dichiarato che potevano in sostanza l'esecuzione di backup "caldi" del nostro database semplicemente prendendo copie dei file di sistema dei nostri file di database e quando abbiamo bisogno di ripristinare saremmo semplicemente Chiudere Oracle e quindi copiare i file che sono stati copiati, riavviare Oracle e il mondo sarebbe di nuovo tutto. La sfida è il fatto che non abbiamo appena ancora ottenuto questo al lavoro. Ho bisogno di passare un po 'più di tempo rivedendo il messaggio che Oracle sta dando, ma la mia domanda principale è: "E' possibile" estrarre copia di file Oracle, mentre Oracle è ancora in funzione e di utilizzare tali file in un secondo momento per ripristinare il database ? So che funziona se il database viene chiuso, e quindi le copie sono fatte, ma questo è il primo che ho sentito che una copia (file system) può essere fatto mentre il database è in esecuzione. Qualsiasi suggerimento sarebbe davvero apprezzato. Ecco l'errore che stiamo ottenendo.

ORA-00314: log 3 of thread 1, expected sequence# 1939 doesn't match 1944
ORA-00312: online log 3 thread 1: 'E:\ORACLE\ORADATA\ITMS\REDO03.LOG'
È stato utile?

Soluzione

Sì, è possibile, ma è necessario mettere tutti gli spazi tabella in modalità di backup prima e portarli fuori dopo (ad esempio ALTER TABLESPACE x BEGIN BACKUP e ALTER TABLESPACE x END BACKUP;! È necessario controllare la sintassi e assicurarsi che sia appropriato per la situazione) . Semplificando enormemente, questo indica a Oracle di non scrivere qualsiasi file di dati, in modo da sono tutti tenuti in uno stato coerente.

I due problemi principali che si ottengono in caso contrario sono che singoli file vengono aggiornati mentre si sta copiando in modo un singolo file può essere danneggiato; e più visibilmente che i file diversi hanno diversi timestamp interne e sequenze in modo da Oracle non permette loro di essere utilizzati.

Se si utilizza un processo che hai comprato in poi dovrebbe essere già prendendo cura di tutto ciò, però. Suona il backup è OK ed è il ripristino che non hai lavoro.

Non mi hanno coinvolto in un ripristino da un backup a caldo per qualche tempo in modo che qualcun altro dovrà dare dettaglio su l'errore effettivo. La mia lettura di esso è che avete cercato di aprire con i file di dati ripristinati, ma i registri di ripristino in seguito dal vivo. Durante il ripristino Penso che hai per RECOVER il database utilizzando i redo log generati dopo l'ultimo backup è stato preso; o se si sta cercando di ripristinare a quel punto nel tempo, allora è possibile aprire i dati con la direttiva RESETLOGS e perdere tutte le modifiche da tutti i registri di ripristino che è venuto dopo. Ma davvero prendere consigli più informati di questo ...

Altri suggerimenti

Per quanto ne so, ci sono due modi in cui è possibile "copiare" file di dati da un'istanza Oracle in esecuzione.

  • I file di dati vengono copiati per un Tablespace quando lo spazio tabella è in "BEGIN BACKUP" modalità.
  • Si sta utilizzando un journalling fascia alta filesystem come Veritas quella lattina istantanea e traccia blocco cambia sul filesystem, mentre la copia è in corso.

E 'possibile. Devi necessario essere in modalità ARCHIVELOG.

Uno script di esempio sarebbe per il manuale:

Alter tablespace USERS begin backup;
host cp -p /u02/oradata/PROD/users01.dbf /u03/backup/PROD/
host cp -p /u02/oradata/PROD/users02.dbf /u03/backup/PROD/
Alter tablespace USERS end backup;

Tuttavia, mi sento di raccomandare semplicemente utilizzando RMAN. RMAN è abbastanza robusto, incluso gratuitamente, e farà il backup a caldo, così come freddo. Sarà clonare ad un altro caso, il clone come un punto nel tempo, recuperare ad un certo punto nel tempo, ecc Qualsiasi procedura di backup manuale deve essere migrato utilizzando il RMAN.

Se si voleva fare il backup dell'intero database mentre è aperto (io preferisco come Oracle con DBA in modo da poter evitare le password negli script, ma YMMV):

$ ORAENV_ASK=NO
$ ORACLE_SID=PROD
$ . oraenv
$ rman target=/

Recovery Manager: Release 10.2.0.4.0 - Production on Thu Oct 28 14:23:29 2010

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

connected to target database: PROD (DBID=x)

RMAN> backup as compressed backupset database plus archivelog;

...

Backup Complete.

Ho fatto in modo efficace questo con un non-mission-critical database in esecuzione su Amazon EC2. La mia strategia di backup è quello di eseguire periodicamente un'istantanea del volume EBS. Per ripristinare un backup, creo un nuovo volume EBS dalla snapshot, avviare l'istanza di usarlo, RECOVER DATABASE quindi eseguire.

Questa perde tutte le transazioni che erano in volo nel momento in cui l'istantanea è stata presa, naturalmente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top