Je ne fais que jouer avec l'interface graphique SSMS et étudier les options de la tâche "Restaurer".
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 la suivante:
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. ce Database_name_LOGSHIPPING.BKP
Était le nom du fichier que j'ai fait pour la journalisation de journal il y a un mois.
Pourquoi quand j'essaie d'utiliser l'interface graphique SSMS pour restaurer une sauvegarde, cela pointe sur 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
Qu'est-ce qui peut être faux ici? Je n'utilise pas une copie seulement.
Edit2 :
je fais des sauvegardes manuelles quotidiennes pour tester, et même cette façon, SQL Server sélectionne cette vieille sauvegarde qui n'existe plus. Lors de la course RESTORE HEADERONLY...
Il dit (évidemment) le fichier n'existe pas.
Edit 3 :
Ceci est l'imprimé GUI :
Wow wow wow attendre une minute!
Cette base de données était une restauration d'un autre serveur (même serveur, des instances différentes). Huum ... Je pense que le problème est ici.
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, je pourrais trouver ces résultats, en l'utilisant sans plage de date:
Le carré rouge est la mauvaise sauvegarde de l'autre 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 de sauvegarde, je vois que chaque journal et complète 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 à redémarrer l'en-tête de la base de données
(Je suis à court d'idées)
Les chances sont quelque chose dans les tables de l'historique de sauvegarde de Synchronisation et l'interface utilisateur va à la dernière sauvegarde complète "cohérente". Si vous êtes vraiment intéressé par la raison pour laquelle il fait ce que c'est faire, démarrez un profiler Trace Limited à votre compte, parcourez les étapes de restauration de l'interface graphique et examinez les commandes capturées dans la trace qui montrent ce que l'interface utilisateur fait dans la scène . Cela vous obtiendra la réponse définitive que vous recherchez.
Si vous préférez 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 effacer le premier mois à la fois), puis prendre Un nouveau complet, etc. Je soupçonnerais que cela réinitialisera l'interface graphique d'utiliser les sauvegardes appropriées.
Enfin, une autre option est d'exécuter ce script authentifié par Wayne Sheffield . Il peut fournir des informations supplémentaires sur les problèmes de la chaîne de sauvegarde. Je ne suis tombé sur là avant que je posais cette réponse à l'origine, mais j'espère que cela aide quelqu'un d'autre à l'avenir.