Come ripristinare un Backup con SQL Server 2005

martedì 15 gennaio 2008 - 18.08

Mosquita Profilo | Newbie

Buon giorno a tutti.
Sono un neo-iscritto al forum e vorrei salutare tutti quanti.
Vorrei descrivere un attimo il mio problema.
In azienda abbiamo 2 Pc con Win2003Server e con Microsoft SQL Server 2005 installato su entrambi.
Un Pc ha la funzione di server principale, l'altro come mirror.
All'interno del "principale" vengono scritti i vari backup di un database gestionale, sia i bak, sia i trn.
La schedulazione dei backup è così composta:
Alle ore 12.30 esegue un backup full dei bak.
Dalle ore 7.30 alle 12.30 vengono backuppati i trn.
Quindi alle ore 12.30 ho sia il backup full, sia i vari trn (di questo uno ogni 10 minuti).
Nel caso dovessi ripristinare un backup (bak e trn) delle 12.30, mi potete spiegare la procedura da attuare?
I files trn li devo "caricare" tutti uno per uno (cioè quelli creati dalle 7.30 fino alle 12.30)?
Grazie per un eventuale risposta
Riccardo

alx_81 Profilo | Guru

>Buon giorno a tutti.
>Sono un neo-iscritto al forum e vorrei salutare tutti quanti.
Ciao e benvenuto su DotNetHell!!

>Vorrei descrivere un attimo il mio problema.
>In azienda abbiamo 2 Pc con Win2003Server e con Microsoft SQL
>Server 2005 installato su entrambi.
>Un Pc ha la funzione di server principale, l'altro come mirror.
>All'interno del "principale" vengono scritti i vari backup di
>un database gestionale, sia i bak, sia i trn.
>La schedulazione dei backup è così composta:
>Alle ore 12.30 esegue un backup full dei bak.
>Dalle ore 7.30 alle 12.30 vengono backuppati i trn.
>Quindi alle ore 12.30 ho sia il backup full, sia i vari trn (di
>questo uno ogni 10 minuti).
Quindi hai un full backup giornaliero alle 12.30, poi ogni 10 minuti esegui il backup dei log

>Nel caso dovessi ripristinare un backup (bak e trn) delle 12.30,
>mi potete spiegare la procedura da attuare?
>I files trn li devo "caricare" tutti uno per uno (cioè quelli
>creati dalle 7.30 fino alle 12.30)?
da msdn:

"In simple cases, a restore sequence requires only a full database backup, a differential database backup, and the subsequent log backups. In these cases, constructing a correct restore sequence is easy. For example, to restore a whole database to the point of a failure, start by backing up the active transaction log (the tail of the log). Then, restore the most recent full database backup, the most recent differential backup (if any), and all subsequent log backups in the order in which they were taken."

leggiti bene questo link, credo che capirai meglio quello che devi fare

Planning and Performing Restore Sequences
http://technet.microsoft.com/en-us/library/ms189627.aspx

Direi che nel tuo caso basta fare restore del tuo full backup lasciando il db in RESTORE WITH NORECOVERY, e successivamente eseguire il restore dei log (tramite il restore dei Transaction Log da Management Studio) uno alla volta, dal più vecchio al più recente. Ricordati, se usi il client di SQL Server (Management Studio), di impostare nei passi intermedi il NORECOVERY (l'ultimo devi utilizzare WITH RECOVERY, per rendere accessibile il tuo database).


518x546 46Kb


in alternativa eccoti la reference a BACKUP:
http://technet.microsoft.com/it-it/library/ms186865.aspx


ciao!

>Grazie per un eventuale risposta
>Riccardo

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mosquita Profilo | Newbie

Intanto ti ringrazio.
Volevo chiederti, non esiste un modo per caricare in una sola volta i vari transaction logs?
Li devo caricare uno alla volta?
Anche perchè la schedulazione di quest'ultimi avviene ogni 5 minuti.....
Grazie
Riccardo

alx_81 Profilo | Guru

>Intanto ti ringrazio.
>Volevo chiederti, non esiste un modo per caricare in una sola
>volta i vari transaction logs?
>Li devo caricare uno alla volta?
>Anche perchè la schedulazione di quest'ultimi avviene ogni 5
>minuti.....
No, aumenta l'intervallo .
Uno alla volta.. mi spiace

Però è anche vero che lo fai solo nel caso in cui ti si "rompa" tutto..
La frequenza dei restore di questo tipo, di solito è molto bassa o si spera che lo sia

>Grazie
Di nulla!
>Riccardo

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mosquita Profilo | Newbie

Grazie
Appena mi libero proverò il tutto.....magari se mi "intorto" ti richiedo lumi
Ciao
Riccardo

Mosquita Profilo | Newbie

Arieccomi
Allora, ho simulato una rottura del server principale e del mirror (che sc*lo) alle ore 15.00.
Mi ero salvato il backup full delle 12.30 e tutti i transaction log del giorno fino alle ore 15.30.
Ho ricreato il server principale e ho restorato da prima il backup full delle 12.30, WITH NORECOVERY. Poi ho iniziato a restorare il primo transaction log sempre in NORECOVERY (il più vecchio in ordine di tempo), ma ho avuto subito un errore del tipo "devi restorate in transaction più recente".
Puoi dirmi dove sbaglio?
Grazie
Riccardo

lbenaglia Profilo | Guru

>Ho ricreato il server principale e ho restorato da prima il backup
>full delle 12.30, WITH NORECOVERY. Poi ho iniziato a restorare
>il primo transaction log sempre in NORECOVERY (il più vecchio
>in ordine di tempo)
Ovvero?
Devi ripristinare il primo t-log SUCCESSIVO alle 12.30.

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alx_81 Profilo | Guru

>Arieccomi
>Allora, ho simulato una rottura del server principale e del mirror
>(che sc*lo) alle ore 15.00.
>Mi ero salvato il backup full delle 12.30 e tutti i transaction
>log del giorno fino alle ore 15.30.
>Ho ricreato il server principale e ho restorato da prima il backup
>full delle 12.30, WITH NORECOVERY. Poi ho iniziato a restorare
>il primo transaction log sempre in NORECOVERY (il più vecchio
>in ordine di tempo), ma ho avuto subito un errore del tipo "devi
>restorate in transaction più recente".
>Puoi dirmi dove sbaglio?
Allora, probabilmente hai cercato di fare restore nello stesso modo con cui hai fatto restore del full backup.
Segui precisamente le istruzioni:

TD = Tasto destro

1 - TD sulla cartella Databases --> Restore Database..
(fai il restore e metti NORECOVERY)
Il db viene creato in "restoring.."

2 - TD sul database in recovery --> Tasks --> Restore --> Transaction Log..
(fai il restore del primo - più vecchio - backup del log)
lascia in NORECOVERY se ci sono altri log di cui fare restore

3 - ripeti il punto 2 per ogni file tranne l'ultimo disponibile

4 - ripeti il punto 2 per l'ultimo file disponibile ma impostando il WITH RECOVERY (quello di default dell'interfaccia)

così ti dovrebbe funzionare

>Grazie
di nulla!
Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

lbenaglia Profilo | Guru

>2 - TD sul database in recovery --> Tasks --> Restore -->
>Transaction Log..
> (fai il restore del primo - più vecchio - backup del log)

Ribadisco, SUCCESSIVO alle 12.30 (ora a cui si riferisce il Full Backup).
Eventuali backup del t-log antecedenti a questo full sono inutili al fine dell'operazione che sta svolgendo Riccardo.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

symo81 Profilo | Newbie

Ciao ragazzi

sono in una situazione simile a mosquita quindi mi "accodo" alla discussione

se io voglio crearmi un ambiente di test col solo database(senza db di mirror e backup schedulati), non mi basta importare il bak full e il bak dei transaction log per ottenere una situazione aggiornata alle 12:30?

Se li importo entrambi con NORECOVERY mi da errore

ADDITIONAL INFORMATION:

System.Data.SqlClient.SqlError: The log in this backup set terminates at LSN 17357000000013700001, which is too early to apply to the database.
A more recent log backup that includes LSN 18069000000011200001 can be restored. (Microsoft.SqlServer.Smo)

lbenaglia Profilo | Guru

>se io voglio crearmi un ambiente di test col solo database(senza
>db di mirror e backup schedulati), non mi basta importare il
>bak full e il bak dei transaction log per ottenere una situazione
>aggiornata alle 12:30?
Certo, a patto che il backup del t-log sia successivo al full backup. Nel caso siano stati eseguiti più backup del t-log, dovrai restorarli tutti nella giusta sequenza dopo aver restorato il full backup.

>Se li importo entrambi con NORECOVERY mi da errore
>
>ADDITIONAL INFORMATION:
>
>System.Data.SqlClient.SqlError: The log in this backup set terminates
>at LSN 17357000000013700001, which is too early to apply to the
>database.
>A more recent log backup that includes LSN 18069000000011200001
>can be restored. (Microsoft.SqlServer.Smo)
Appunto, il tuo backup del t-log è antecedente al full backup, quindi assolutamente inutile al fine che ti sei preposto.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

symo81 Profilo | Newbie


>Appunto, il tuo backup del t-log è antecedente al full backup,
>quindi assolutamente inutile al fine che ti sei preposto.
>
E' vero! l'ora di modifica del full è 12:30 mentre quella del log è 12:31

Allora quanto importo i transaction log devo "togliere la spunta" a quello delle 12:30? ma rimango indietro di un giorno!!!

Grazie delle risposte!

lbenaglia Profilo | Guru

>E' vero! l'ora di modifica del full è 12:30 mentre quella del
>log è 12:31
>
>Allora quanto importo i transaction log devo "togliere la spunta"
>a quello delle 12:30? ma rimango indietro di un giorno!!!

Non ho capito, se fai un full backup alle 12:30 cosa te ne frega di fare un backup del t-log alle 12:31?

>Grazie delle risposte!
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Mosquita Profilo | Newbie

Scusatemi, sono sempre io
Ho fatto come mi avete suggerito, ma ho un errore durante il caricamento del primo (più vecchio t.log).
Il backup full era quello delle 12.30, restorato in NORECOVERY.
I transaction log partivano dalle 12.32 fino alle ore 16.
Il caricamento del backup delle 12.30 è andato a buon fine, impostando il db in restoring........
Ho fatto tasto dx sul db e restorato il t.log più vicino alle 12.30 (12.32).
Anche questo in NORECOVERY. mi dice errore.
Spero di farcela a allegare uno screenshot dell'errore.
Buona serata a tutti


1036x836 264Kb

alx_81 Profilo | Guru

>Anche questo in NORECOVERY. mi dice errore.
Sembra che tu stia cercando di restorare un backup del tlog troppo recente. Sicuro che sia il primo successivo alle 12.30?
Il messaggio di errore dice chiaramente che quello che stai cercando di restorare è un file troppo recente..

>Buona serata a tutti
anche a te!

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

Mosquita Profilo | Newbie

Ok, ho capito.

Ma potete dirmi se la schermata che vi allegherò è giusta?
Come potete notare, il nome dei files backuppati, non rispecchiano la reale ora di creazione.
es: GSS_20080131105800.trn (backup creato alle ore 10.58 del giorno 01/31/2008), ha come data ultima modifica le ore 11:58.
Può essere qui il problema?
Ecco lo screenshot dei vari backup *.trn

800x600 300Kb

lbenaglia Profilo | Guru

>Può essere qui il problema?
Il problema è nell'eseguire un backup del t-log ogni 2 minuti!!!
Mi spieghi a cosa serve una frequenza del genere?

In vita mia la massima frequenza che ho implementato è stata di 30 minuti, solo per un paio di database particolarmente critici e SOLO in determinate fasce orarie.

Ti faccio una ulteriore domanda: qual è la quantità di dati che sei disposto a perdere a fronte di un danno irreversibile sul database server?
- 1 ora?
- 6 ore?
- 12 ore?
- 1 giorno?
- 1 settimana?
- 1 mese?

Che dimensione ha il database?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Mosquita Profilo | Newbie

Un ora di perdita dati è abbastanza critica.
Diciamo 15minuti, max 30.
Il bd full è di di 70Mb
I transaction log sono di 97KB.
Ciao
Riccardo

lbenaglia Profilo | Guru

>Un ora di perdita dati è abbastanza critica.
>Diciamo 15minuti, max 30.
>Il bd full è di di 70Mb
>I transaction log sono di 97KB.

Viste le dimensioni ridotte del database ti suggerisco di eseguire un Full Backup ogni 24 ore (ad esempio alla mezzanotte di ogni giorno), un differenziale ogni 6 ore, ed un backup del t-log ogni 30 minuti.

In caso di disastro dovrai prima di tutto cercare di eseguire un backup del t-log (se possibile), eseguire il restore dell'ultimo Full Backup, dell'ultimo Differenziale e della catena di t-log compresi tra l'ultimo differenziale e l'ora del crash.

Il backup differenziale l'ho inserito solo per diminuire il numero di restore del t-log che dovrai eseguire in caso di crash.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

Mosquita Profilo | Newbie

Sei stato chiarissimo!!
Grazie1000
Riccardo

Mosquita Profilo | Newbie

Ciao
Sono sempre io
Adesso ho un altro problemuccio in fase di mirroring.
Ho un server_principale e un server_mirror.
Ho impostato i nomi dei server in maniera coerente ma al momento del mirroring tutti e due i server usano per connettersi la porta 5022.
Come faccio a settare manualmente ad un server la porta 5023?
Grazie ancora
Riccardo

lbenaglia Profilo | Guru

>Come faccio a settare manualmente ad un server la porta 5023?

Ciao Riccardo,

ti suggeriso di leggere attentamente questo bellissimo articolo di Luca:
http://www.aspitalia.com/articoli/sqlserver2005/Mirroring.aspx

A pagina 2 troverai la risposta (ma ti consiglio di leggerlo tutto ).

>Grazie ancora
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5