Restaurer la base de données à l'aide de l'interface graphique - Fichier incorrect à restaurer


20

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.BKPle 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 

entrez la description de l'image ici

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:

1 entrez la description de l'image ici 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:

entrez la description de l'image ici

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:

entrez la description de l'image ici

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)



1
Avez-vous configuré une trace, puis parcouru les options de l'interface graphique pour capturer comment SSMS obtient les informations? Ça pourrait être plus rapide ...
Steve Mangiameli

1
@RafaelPiccinelli - Je pense que quelque chose de simple est négligé, mais je ne suis pas sûr de ce que c'est. Avez-vous restauré la base de données msdb de l'original vers l'instance GDLIC2014? Quelque chose utilise-t-il la mauvaise chaîne ou le mauvais chemin de connexion? Certes, SQL Server ne crée pas de données pour les sauvegardes et les restaurations. (En passant, il est intéressant que vous restauriez _2.mdf, _3.mdf et _4.mdf, mais pas un .mdf non suffixé ou un _1.mdf.)
RLF

Quittez l'utilisation de l'interface graphique pour restaurer. Examinez le disque ou la bande de sauvegarde pour déterminer ce que vous avez réellement et commencez par ceux-ci.
Mots de passe anti-faiblesse

Bonjour @ Mots de passe anti-faiblesse. Non non. Je n'utilise pas d'interface graphique. Je recherche la séquence du journal et je travaille avec elle. J'étais simplement curieux de savoir l'interface graphique, mais j'ai ensuite vu ce problème. j'essaie d'être loin de l'interface graphique autant que possible.
Racer SQL

Réponses:


1

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.


Hé @john Merci pour votre réponse .. J'ai fait un declare @data datetime set @data=getdate() EXEC msdb.dbo.sp_delete_backuphistory @oldest_date=@dataEt supprimé l'historique. Je ferai quelques tests pour voir si cela a fonctionné. Je vous remercie.
Racer SQL

Salut @RafaelPiccinelli. Est-ce que cela a fonctionné pour vous?
Kefash

salut @Kefash. Je pense que cela n'a pas fonctionné. Je ne me souviens pas pour le moment. mais chaque fois que j'obtiens une réponse, je vote immédiatement et sélectionne comme réponse. Je pense que cela n'a pas résolu mon problème.
Racer SQL

@john J'ai vraiment besoin d'un correctif pour ce truc. votre problème a-t-il finalement été résolu?
Kefash

@RafaelPiccinelli J'ai besoin de résoudre ce problème car lorsque je dois restaurer au point de dire ajouter une base de données au HAG, cela peut être ennuyeux. Je sais que cela peut être fait sans l'interface graphique, mais les journaux de transactions sont pris toutes les 10 minutes. Quelles étaient vos autres approches?
Kefash
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.