Po prostu bawię się interfejsem graficznym SSMS i badam opcje zadania „przywróć”.
Jedną z rzeczy, które zauważyłem, jest to, że kiedy klikam „generuj skrypt”, pierwszy wiersz zapytania to:
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, nie ma problemu, ale robię codzienne kopie zapasowe tej bazy danych. to Database_name_LOGSHIPPING.BKP
była nazwa pliku, który utworzyłem do wysyłki dziennika miesiąc temu.
Dlaczego kiedy próbuję użyć interfejsu graficznego SSMS do przywrócenia kopii zapasowej, wskazuje ona ten plik kopii zapasowej? Nie mam już nawet tego pliku.
Dzięki temu zapytaniu z MSSQLTIPS widzę wszystkie kopie zapasowe z tej bazy danych:
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
Co może tu być nie tak? Nie używam TYLKO KOPIOWANIA.
EDYCJA 2:
Robię codzienne ręczne kopie zapasowe w celu przetestowania i nawet w ten sposób SQL Server wybiera tę starą kopię zapasową, która już nie istnieje. Podczas uruchamiania RESTORE HEADERONLY...
mówi (oczywiście), że plik nie istnieje.
EDYCJA 3:
To drukuje GUI:
Ta baza danych była przywróceniem z innego serwera (tego samego serwera, różnych instancji). Huuum ... Myślę, że problem jest tutaj.
Czy widzicie na „serwerze” na drugim zdjęciu? ma 2 serwery. Używam tego z instancją nazw GDLIC2014.
scenariusz:
Skrypt zapasowy:
DECLARE @Patch varchar(1000)
SELECT @Patch = (SELECT 'PATCH\FULL\DATABASE_ ' + convert(varchar(500),GetDate(),112) + '.bkp')
BACKUP DATABASE DATABASE TO DISK=@Patch with compression
Za pomocą tego samego zapytania z MSSQLTIPS mogłem znaleźć te wyniki, używając go bez zakresu dat:
Czerwony kwadrat to niewłaściwa kopia zapasowa ze starszej instancji, niebieski kwadrat jest ostatnią wykonaną kopią zapasową (GUI powinien jej użyć)
EDYCJA 4:
Cóż, dzięki temu zapytaniu o historię tworzenia kopii zapasowej widzę, że każdy dziennik i pełny są poprawnie wymienione:
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
EDYCJA 5:
Czy jest coś, co zrestartuje nagłówek bazy danych
(Nie mam pomysłów)
źródło
Odpowiedzi:
Szanse są pewne, że tabele historii kopii zapasowych nie są zsynchronizowane, a interfejs użytkownika przechodzi do ostatniej „spójnej” pełnej kopii zapasowej. Jeśli naprawdę interesuje Cię, dlaczego robi to, co robi, rozpocznij śledzenie profilera ograniczone do twojego konta, przejdź przez kroki przywracania w GUI i przejrzyj polecenia przechwycone w śladzie, które pokazują, co robi interfejs użytkownika za kulisami . Otrzymasz ostateczną odpowiedź, której szukasz.
Jeśli wolisz po prostu przejść obok tego, możesz wyczyścić historię tworzenia kopii zapasowych za pomocą
EXEC [msdb].[dbo].[sp_delete_backuphistory] @oldest_date=getdate()
(w zależności od ostatniego uruchomienia tej operacji, możesz ją wyczyścić co miesiąc), a następnie wziąć nową pełną, itp. I podejrzewa, że spowoduje to zresetowanie GUI, aby móc korzystać z odpowiednich kopii zapasowych w przyszłości.Wreszcie, inną opcją jest uruchomienie tego skryptu autorstwa Wayne'a Sheffield . Może dostarczyć więcej informacji na temat problemów z łańcuchem kopii zapasowych. Nie spotkałem się z tym, dopóki nie opublikowałem pierwotnie tej odpowiedzi, ale mam nadzieję, że pomoże to komuś innemu w przyszłości.
źródło
declare @data datetime set @data=getdate() EXEC msdb.dbo.sp_delete_backuphistory @oldest_date=@data
i usunąłem historię. Zrobię kilka testów, aby zobaczyć, czy to zadziałało. Dziękuję Ci.