Datenbank mit GUI wiederherstellen - Falsche Datei zum Wiederherstellen

20

Ich spiele nur mit der SSMS-Grafikschnittstelle herum und untersuche die Optionen der Aufgabe "Wiederherstellen".

Eine Sache, die mir aufgefallen ist, wenn ich auf "Skript generieren" geklickt habe, ist die erste Zeile der Abfrage:

 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, kein Problem, aber ich mache tägliche Backups dieser Datenbank. Dies Database_name_LOGSHIPPING.BKPwar der Name der Datei, die ich vor einem Monat für den Protokollversand erstellt habe.

Warum verweist die SSMS-Grafikschnittstelle auf diese Sicherungsdatei, wenn ich versuche, eine Sicherung wiederherzustellen? Ich habe nicht einmal mehr diese Datei.


Mit dieser Abfrage von MSSQLTIPS kann ich alle Sicherungen von dieser Datenbank sehen:

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 

Bildbeschreibung hier eingeben

Was kann hier falsch sein? Ich verwende NUR KOPIEREN nicht.


EDIT2:

Ich mache täglich manuelle Sicherungen zum Testen, und auch auf diese Weise wählt SQL Server die alte Sicherung aus, die nicht mehr vorhanden ist. Beim Ausführen RESTORE HEADERONLY...heißt es (offensichtlich), dass die Datei nicht existiert.


EDIT 3:

Dies ist die GUI drucken:

1 Bildbeschreibung hier eingeben Wow Wow Wow WARTEN SIE EINE MINUTE !

Diese Datenbank wurde von einem anderen Server wiederhergestellt (derselbe Server, verschiedene Instanzen). Huuum ... Ich denke, das Problem ist hier.

Könnt ihr auf dem zweiten Bild auf "Server" sehen? Es hat 2 Server. Ich benutze die mit den Namen Instanz GDLIC2014.

das Drehbuch:

Bildbeschreibung hier eingeben

Das Backup-Skript:

DECLARE @Patch varchar(1000)

SELECT @Patch = (SELECT 'PATCH\FULL\DATABASE_ ' + convert(varchar(500),GetDate(),112) + '.bkp') 

BACKUP DATABASE DATABASE TO DISK=@Patch with compression

Mit der gleichen Abfrage von MSSQLTIPS konnte ich diese Ergebnisse ohne Datumsbereich finden:

Bildbeschreibung hier eingeben

Das rote Quadrat ist die falsche Sicherung von der älteren Instanz, das blaue Quadrat ist die letzte Sicherung (die GUI sollte sie verwenden).

EDIT 4:

Nun, mit dieser Abfrage zum Auflisten des Sicherungsverlaufs sehe ich, dass alle Protokolle und vollständigen Daten korrekt aufgelistet sind:

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:

Gibt es etwas, um den Header der Datenbank neu zu starten

(Ich habe keine Ideen mehr)

Racer SQL
quelle
3
Können Sie versuchen, die neueste SSMS-GUI-2014 zu verwenden ? Es wurden viele Fehler behoben
Kin Shah
1
Haben Sie eine Ablaufverfolgung eingerichtet und dann die GUI-Optionen durchlaufen, um zu erfassen, wie SSMS die Informationen erhält? Könnte schneller sein ...
Steve Mangiameli
1
@RafaelPiccinelli - Ich habe das Gefühl, dass etwas Einfaches übersehen wird, aber ich weiß nicht, was es ist. Haben Sie die msdb-Datenbank vom Original in die GDLIC2014-Instanz zurückgeschrieben? Könnte etwas die falsche Verbindungszeichenfolge oder den falschen Pfad verwenden? Sicherlich erstellt der SQL Server keine Daten für die Sicherungen und Wiederherstellungen. (Abgesehen davon ist es interessant, dass Sie _2.mdf, _3.mdf und _4.mdf wiederherstellen, aber keine nicht angehängten .mdf oder _1.mdf.)
RLF
Beenden Sie die Wiederherstellung über die GUI. Sehen Sie sich die Sicherungsdiskette oder das Sicherungsband an, um festzustellen, was Sie tatsächlich haben, und beginnen Sie mit diesen.
Anti-Weakpasswords
Hallo @ Anti-Weakpasswords. Nein nein Ich benutze keine GUI. Ich frage die Protokollsequenz ab und arbeite damit. Ich war nur neugierig auf die GUI, aber dann sah ich dieses Problem. Ich versuche, so weit wie möglich von der Benutzeroberfläche weg zu sein.
Racer SQL

Antworten:

1

Es besteht die Möglichkeit, dass die Sicherungsverlaufstabellen nicht mehr synchron sind und die Benutzeroberfläche zur letzten "konsistenten" vollständigen Sicherung wechselt. Wenn Sie wirklich daran interessiert sind, warum es das tut, was es tut, starten Sie eine Profiler-Ablaufverfolgung, die auf Ihr Konto beschränkt ist, führen Sie die Wiederherstellungsschritte in der GUI durch und überprüfen Sie die in der Ablaufverfolgung erfassten Befehle, die zeigen, was die Benutzeroberfläche hinter den Kulissen tut . So erhalten Sie die endgültige Antwort, nach der Sie suchen.

Wenn Sie lieber daran vorbeigehen EXEC [msdb].[dbo].[sp_delete_backuphistory] @oldest_date=getdate()möchten , können Sie Ihren Sicherungsverlauf über löschen (je nachdem, wann Sie ihn das letzte Mal ausgeführt haben, möchten Sie ihn möglicherweise jeden Monat löschen) und dann einen neuen vollständigen usw. I abrufen Ich würde vermuten, dass dies die GUI zurücksetzt, um die richtigen Backups für die Zukunft zu verwenden.

Schließlich besteht eine andere Möglichkeit darin, dieses von Wayne Sheffield verfasste Skript auszuführen . Es enthält möglicherweise weitere Informationen zu Problemen mit der Sicherungskette. Ich bin erst darauf gestoßen, nachdem ich diese Antwort ursprünglich gepostet hatte, aber hoffentlich hilft es jemand anderem in der Zukunft.

John Eisbrener
quelle
Hey @john, danke für deine Antwort. Ich habe einen gemacht declare @data datetime set @data=getdate() EXEC msdb.dbo.sp_delete_backuphistory @oldest_date=@dataund den Verlauf gelöscht. Ich werde ein paar Tests machen, um zu sehen, ob es funktioniert hat. Vielen Dank.
Racer SQL
Hi @RafaelPiccinelli. Hat das für dich geklappt?
Kefash
hey @Kefash. Ich denke, es hat nicht funktioniert. Ich kann mich gerade nicht erinnern. Aber jedes Mal, wenn ich eine Antwort erhielt, stimmte ich sofort zu und wählte sie als Antwort aus. Ich denke, es hat mein Problem nicht gelöst.
Racer SQL
@john ich brauche ein Update dafür soooo dringend. Wurde Ihr Problem schließlich behoben?
Kefash
@RafaelPiccinelli Ich muss dieses Problem beheben, da es ärgerlich sein kann, wenn ich bis zu einem bestimmten Punkt wiederherstellen muss, um zu sagen, dass der HAG eine Datenbank hinzugefügt werden soll. Ich weiß, dass dies ohne die grafische Benutzeroberfläche möglich ist, aber die Transaktionsprotokolle werden alle 10 Minuten erstellt. Was waren Ihre anderen Ansätze?
Kefash