Je suis juste en train de déconner avec l'interface graphique SSMS et d'étudier les options de la tâche de "restauration".
Une chose que j'ai remarquée, c'est quand je clique sur "générer un script", la première ligne de la requête est:
RESTORE DATABASE [MyDatabase] FROM DISK = N'Server_Patch\Database_name_LOGSHIPPING.BKP' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5 ( and a lot of log backups for point in time )
Ok, pas de problème, mais je fais des sauvegardes quotidiennes de cette base de données. c'est Database_name_LOGSHIPPING.BKP
le nom du fichier que j'ai créé pour l'envoi de journaux il y a un mois.
Pourquoi lorsque j'essaie d'utiliser l'interface graphique SSMS pour restaurer une sauvegarde, il pointe vers ce fichier de sauvegarde? Je n'ai même plus ce fichier.
Avec cette requête de MSSQLTIPS, je peux voir toutes les sauvegardes de cette base de données:
SELECT
CONVERT(CHAR(100), SERVERPROPERTY('Servername')) AS Server,
msdb.dbo.backupset.database_name,
msdb.dbo.backupset.backup_start_date,
msdb.dbo.backupset.backup_finish_date,
msdb.dbo.backupset.expiration_date,
CASE msdb..backupset.type
WHEN 'D' THEN 'Database'
WHEN 'L' THEN 'Log'
END AS backup_type,
msdb.dbo.backupset.backup_size,
msdb.dbo.backupmediafamily.logical_device_name,
msdb.dbo.backupmediafamily.physical_device_name,
msdb.dbo.backupset.name AS backupset_name,
msdb.dbo.backupset.description
FROM msdb.dbo.backupmediafamily
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id
WHERE (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE() - 7) and msdb..backupset.type ='D'
ORDER BY
msdb.dbo.backupset.database_name,
msdb.dbo.backupset.backup_finish_date
Que peut-il y avoir de mal ici? Je n'utilise pas COPY UNIQUEMENT.
EDIT2:
Je fais des sauvegardes manuelles quotidiennes pour tester, et même de cette façon, SQL Server sélectionne cette ancienne sauvegarde qui n'existe plus. Lors de l'exécution, RESTORE HEADERONLY...
il indique (évidemment) que le fichier n'existe pas.
EDIT 3:
Voici l'impression GUI:
Wow Wow Wow ATTENDEZ UNE MINUTE !
Cette base de données était une restauration à partir d'un autre serveur (même serveur, différentes instances). Huuum ... Je pense que le problème est là.
Pouvez-vous voir sur "serveur" dans la deuxième image? il a 2 serveurs. J'utilise celui avec l'instance de noms GDLIC2014.
le script:
Le script de sauvegarde:
DECLARE @Patch varchar(1000)
SELECT @Patch = (SELECT 'PATCH\FULL\DATABASE_ ' + convert(varchar(500),GetDate(),112) + '.bkp')
BACKUP DATABASE DATABASE TO DISK=@Patch with compression
Avec la même requête de MSSQLTIPS, j'ai pu trouver ces résultats, en l'utilisant sans plage de dates:
Le carré rouge est la mauvaise sauvegarde de l'ancienne instance, le carré bleu est la dernière sauvegarde prise (l'interface graphique devrait l'utiliser)
EDIT 4:
Eh bien, avec cette requête pour répertorier l'historique des sauvegardes, je vois que chaque journal et complet sont correctement répertoriés:
SELECT TOP 100
s.database_name,
m.physical_device_name,
CAST(CAST(s.backup_size / 1000000 AS INT) AS VARCHAR(14)) + ' ' + 'MB' AS bkSize,
CAST(DATEDIFF(second, s.backup_start_date,
s.backup_finish_date) AS VARCHAR(4)) + ' ' + 'Seconds' TimeTaken,
s.backup_start_date,
CAST(s.first_lsn AS VARCHAR(50)) AS first_lsn,
CAST(s.last_lsn AS VARCHAR(50)) AS last_lsn,
CASE s.[type]
WHEN 'D' THEN 'Full'
WHEN 'I' THEN 'Differential'
WHEN 'L' THEN 'Transaction Log'
END AS BackupType,
s.server_name,
s.recovery_model
FROM msdb.dbo.backupset s
INNER JOIN msdb.dbo.backupmediafamily m ON s.media_set_id = m.media_set_id
WHERE s.database_name = DB_NAME() -- Remove this line for all the database
ORDER BY backup_start_date DESC, backup_finish_date
GO
EDIT5:
Y a-t-il quelque chose pour redémarrer l'en-tête de la base de données
(Je suis à court d'idées)
la source
Réponses:
Il y a des chances que les tables d'historique de sauvegarde soient désynchronisées et que l'interface utilisateur passe à la dernière sauvegarde complète "cohérente". Si vous êtes vraiment intéressé par la raison pour laquelle il fait ce qu'il fait, démarrez une trace de profileur limitée à votre compte, parcourez les étapes de restauration dans l'interface graphique et passez en revue les commandes capturées dans la trace qui montrent ce que fait l'interface utilisateur en arrière-plan . Cela vous donnera la réponse définitive que vous recherchez.
Si vous préférez simplement passer au-delà de cela, vous pouvez effacer votre historique de sauvegarde via
EXEC [msdb].[dbo].[sp_delete_backuphistory] @oldest_date=getdate()
(selon la dernière fois que vous avez exécuté cela, vous voudrez peut-être l'effacer un mois à la fois), puis prendre un nouveau plein, etc. I soupçonnerait que cela réinitialisera l'interface graphique pour utiliser les sauvegardes appropriées à l'avenir.Enfin, une autre option consiste à exécuter ce script créé par Wayne Sheffield . Il peut fournir des informations supplémentaires sur tout problème avec la chaîne de sauvegarde. Je ne l'ai rencontré qu'après avoir posté cette réponse à l'origine, mais j'espère que cela aidera quelqu'un d'autre à l'avenir.
la source
declare @data datetime set @data=getdate() EXEC msdb.dbo.sp_delete_backuphistory @oldest_date=@data
Et supprimé l'historique. Je ferai quelques tests pour voir si cela a fonctionné. Je vous remercie.