Scopri quando è stato eseguito un backup del database
-
20-08-2019 - |
Domanda
La gente,
Supponi di ricevere un backup disconnesso di un database SQL Server (2005 o 2008) e di ripristinarlo nell'istanza di SQL Server.
C'è un modo, c'è un catalogo di sistema o qualcosa del genere, per scoprire quando si è verificata l'ultima operazione di scrittura su quel particolare database? Vorrei essere in grado di scoprire da quale giorno proveniva un particolare backup del database - sfortunatamente, non è stato registrato in modo esplicito da nessuna parte, e controllare tutte le dozzine di tabelle di dati per la data / ora più alta non è nemmeno un'opzione ....
Qualche idea? Certo: posso guardare la data / ora del file * .bak - ma posso scoprirlo più precisamente da SQL Server (Management Studio) ??
Grazie! Marc
Soluzione
Puoi provare RESTORE HEADERONLY
sul tuo file di backup, come descritto qui
che dovrebbe darti le informazioni che stai cercando.
Altri suggerimenti
Se si ha accesso all'istanza di SQL Server in cui era stato originariamente eseguito il backup, si dovrebbe essere in grado di interrogare msdb
:
SELECT backup_set_id, backup_start_date, backup_finish_date
FROM msdb.dbo.backupset
WHERE database_name = 'MyDBname' AND type = 'D'
Esistono diverse tabelle relative ai set di backup:
- backupfile: contiene una riga per ciascun file di dati o file di registro di cui è stato eseguito il backup
- backupmediafamily: contiene una riga per ogni famiglia di supporti
- backupmediaset: contiene una riga per ciascun set di supporti di backup
- set di backup: contiene una riga per ciascun set di backup
Interrogando queste tabelle è possibile determinare quando si sono verificati gli ultimi backup, quale tipo di backup si è verificato e dove sono stati scritti i file.
Un po 'in ritardo, ma dovrebbe essere quello che vuoi.
Ogni scrittura nel database è una voce nel file di registro. Che ha un LSN. Questo deve essere archiviato nel backup almeno per i ripristini del registro.
Quindi, come abbinare LSN a un datetime?
SELECT TOP 5 [End Time] AS BringFirst, *
FROM ::fn_dblog (NULL, NULL)
WHERE [End Time] IS NOT NULL
ORDER BY BringFirst DESC
Non l'ho mai usato prima (ho appena giocato per questa risposta). Alcune scritture fanno molto probabilmente parte del backup stesso, ma dovresti essere in grado di distinguerle con un po 'di frugamenti in giro.
per quanto ne so nel database principale esiste una tabella di registro in cui ogni scrittura è memorizzata con informazioni dettagliate. MA non sono sicuro che sia necessario abilitare il meccanismo di registro, in modo che l'impostazione predefinita non sia il registro e sia necessario abilitarlo. In Oracle, ad esempio, esiste un modo per aggirare un registro di tabella del database di sistema che puoi interrogare.
In caso contrario, potresti comunque scrivere un trigger e applicarlo su ogni tabella / colonna necessaria e eseguire tu stesso la registrazione.