Cosa succede durante un backup di SQL Server live?


18

Alcuni dei miei colleghi sono rimasti sorpresi quando ho detto loro che potevo eseguire il backup di un database SQL Server mentre è ancora in esecuzione e mi chiedevo come fosse possibile. So che SQL Server è in grado di eseguire il backup di un database mentre è ancora online, ma non sono sicuro di come spiegare perché sia ​​possibile. La mia domanda è: quale effetto ha questo sul database?

Se i dati vengono modificati (mediante inserimento, aggiornamento o eliminazione) mentre il backup è in esecuzione, il backup conterrà tali modifiche o verranno successivamente aggiunti al database?

Suppongo che il file di registro svolga un ruolo importante qui, ma non sono sicuro di come.

modifica: Proprio come una nota, il mio caso prevede il backup dei database utilizzando SQL Server Agent e gli effetti delle modifiche al database durante questo processo.

Risposte:


24

Il backup completo contiene sia i dati che il registro. Per i dati, copia semplicemente ogni pagina del database nel backup, così come è nel momento in cui legge la pagina. Quindi aggiunge nel supporto di backup tutto il registro "rilevante". Ciò include, per lo meno, tutto il registro tra l'LSN all'inizio dell'operazione di backup e l'LSN alla fine dell'operazione di backup. In realtà, in genere esiste più registro, poiché deve includere tutte le transazioni attive all'inizio del backup e il registro necessari per la replica. Vedi Debunking un paio di miti sui backup completi del database .

Quando viene ripristinato il database, tutte le pagine di dati vengono copiate nei file di database, quindi tutte le pagine di registro vengono copiate nei file di registro. Il database è incoerente in questo momento, poiché contiene immagini di pagine di dati che potrebbero non essere sincronizzate tra loro. Ma ora viene eseguito un normale ripristino . Poiché il registro contiene tutto il registro durante il backup, al termine del ripristino il database è coerente.


1
Un ottimo post e il link hanno contribuito a fornire un buon esempio. Grazie.
Sean Howat,

Molto conciso Buon lavoro!
Allen1,

2

Durante il backup, lo snapshot verrà creato per il database e i dati verranno letti per il backup da tale snapshot. Le operazioni DB live effettive non influiranno sull'operazione di backup.


1

Non puoi semplicemente copiarlo poiché potrebbero esserci delle modifiche alla copia intermedia del database, come hai accennato nella domanda.

Deve essere eseguito con agenti che sono a conoscenza della funzionalità del database e quindi eseguono uno "snapshot" tramite le funzioni del sistema operativo o possono utilizzare un'utilità per scaricare il database in uno stato sicuro (come mysqldump, se si utilizza mysql).

Altrimenti si ottiene un backup che può essere danneggiato e non lo si conosce fino a quando non viene ripristinato. Penso che Joel e Jeff ne abbiano recentemente parlato un po 'in un recente podcast StackOverflow.

E hai ragione nel dire che il file di registro è importante. Se il file journal / log non è sincronizzato con i dati effettivi, il ripristino dei file comporterà il danneggiamento.

Si riduce a un backup eseguito utilizzando uno stato sicuro del database, tramite un agente sensibile al database o un'applicazione o un'applicazione snapshot che è consapevole di come agganciare correttamente il database nel rilascio dei dati senza interferire con gli aggiornamenti durante il dump dei dati e quindi il backup il file risultante.


Questa è una risposta più generalizzata, ma ho dimenticato di includere che stavo lavorando inizialmente con SQL Server Agent. Ha comunque fornito alcuni buoni dettagli su cosa potrebbe succedere durante questo processo, nonostante il metodo, quindi ha aiutato comunque! Grazie.
Sean Howat,

0

Esistono molti modi per farlo (in generale, non ho idea di come MSSQL lo faccia normalmente) come semplicemente scaricare il database in un file mentre si aggiungono eventuali modifiche a un file di registro che viene eseguito dopo il completamento del dump, per utilizzare l'istantanea specifica del file system caratteristiche come VSS su Windows.


Anche i database basati su MVCC da zero (come PostGres) possono fare uso di quel set di comportamenti per mantenere uno snapshot da cui il backup copia pur consentendo gli aggiornamenti ai file di dati da transazioni che iniziano durante l'esecuzione del backup. Come dici tu ci sono diversi metodi, quello utilizzato dipende dal design principale del motore di archiviazione dei dati e dalle funzionalità di elaborazione delle transazioni.
David Spillett,

-1

Puoi prendere quello che è noto come backup di sola copia. Non influenzerà il database mentre è online


Che cos'è un backup di sola copia? Come viene eseguito? Ci sono avvertenze da considerare? Qualche link ad esempi di una tale bestia in esecuzione? Se hai intenzione di inviare una risposta, immagina cosa potrebbe essere utile per scoprire se qualcuno ha avuto questa domanda in 2-3 anni.
rnxrx,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.