web-dev-qa-db-fra.com

Restaurer la base de données à l'aide de l'interface graphique pour restaurer

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 

enter image description here

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 :

1enter image description here 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 :

enter image description here

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:

enter image description here

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)

20
Racer SQL

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.

1
John Eisbrener