Savoir quand une base de données a été sauvegardée
-
20-08-2019 - |
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
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.