Question

Les gens,

Supposons que vous recevez une sauvegarde déconnectée d'une base de données SQL Server (2005 ou 2008) et que vous la restaurez sur votre instance SQL Server.

Existe-t-il un moyen, existe-t-il un catalogue système ou quelque chose d'autre pour savoir quand la dernière opération d'écriture a eu lieu sur cette base de données particulière? J'aimerais pouvoir savoir le jour d'une sauvegarde de base de données particulière - malheureusement, cela n'est pas enregistré explicitement nulle part, et vérifier toutes les dizaines de tableaux de données pour le tampon de date / heure le plus élevé n'est pas vraiment une option non plus. ....

Des idées? Bien sûr, je peux consulter l’horodatage du fichier * .bak, mais puis-je obtenir des informations plus précises à partir de SQL Server (Management Studio)?

Merci! Marc

Était-ce utile?

La solution

Vous pouvez essayer RESTORE HEADERONLY sur votre fichier de sauvegarde, comme indiqué ici

qui devrait vous donner les informations que vous recherchez.

Autres conseils

Si vous avez accès à l'instance SQL Server où la sauvegarde a été exécutée à l'origine, vous devriez pouvoir interroger msdb:

.
SELECT backup_set_id, backup_start_date, backup_finish_date
FROM  msdb.dbo.backupset  
WHERE database_name = 'MyDBname' AND type = 'D' 

Il existe plusieurs tableaux relatifs aux jeux de sauvegarde:

  • backupfile - contient une ligne pour chaque fichier de données ou fichier journal sauvegardé
  • backupmediafamily - contient une ligne pour chaque famille de médias
  • backupmediaset - contient une ligne pour chaque jeu de supports de sauvegarde
  • backupset - contient une ligne pour chaque jeu de sauvegarde

En interrogeant ces tables, vous pouvez déterminer quand les dernières sauvegardes ont eu lieu, quel type de sauvegardes ont eu lieu et où les fichiers ont été écrits.

Un peu tard, mais devrait être ce que vous voulez.

Chaque écriture dans la base de données est une entrée du fichier journal. Qui a un LSN. Cela doit être stocké dans la sauvegarde pour que les restaurations de journal au moins.

Alors, comment faire correspondre LSN à un datetime?

SELECT TOP 5 [End Time] AS BringFirst, *
FROM ::fn_dblog (NULL, NULL)
WHERE [End Time] IS NOT NULL
ORDER BY BringFirst DESC

Je n'ai jamais utilisé cela auparavant (je viens d'avoir une pièce de théâtre pour cette réponse). Certaines écritures font très probablement partie de la sauvegarde elle-même, mais vous devriez être en mesure de les distinguer en fouillant.

autant que je sache dans la base de données master, il existe une table log où chaque écriture est stockée avec des informations détaillées. MAIS je ne suis pas sûr si vous devez activer le mécanisme de journalisation - afin que la valeur par défaut ne soit pas de vous connecter et que vous deviez l'activer. Dans Oracle, par exemple, il existe un moyen de contourner une table de base de données système que vous pouvez interroger.

Si ce n'est pas le cas, vous pouvez toujours écrire vous-même un déclencheur et l'appliquer à chaque table / colonne nécessaire et effectuer vous-même la journalisation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top