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.BKP
war 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
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:
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:
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:
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)
quelle
Antworten:
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.
quelle
declare @data datetime set @data=getdate() EXEC msdb.dbo.sp_delete_backuphistory @oldest_date=@data
und den Verlauf gelöscht. Ich werde ein paar Tests machen, um zu sehen, ob es funktioniert hat. Vielen Dank.