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

È stato utile?

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.

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