Przywróć bazę danych za pomocą GUI - Nieprawidłowy plik do przywrócenia

20

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.BKPbył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 

wprowadź opis zdjęcia tutaj

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:

1 wprowadź opis zdjęcia tutaj Wow Wow Wow CZEKAJ MINUTĘ !

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:

wprowadź opis zdjęcia tutaj

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:

wprowadź opis zdjęcia tutaj

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)

Racer SQL
źródło
3
Czy możesz spróbować użyć najnowszego GUI SSMS - 2014 ? Wprowadzono wiele poprawek
Kin Shah
1
Czy skonfigurowałeś śledzenie, a następnie przejrzałeś opcje GUI, aby uchwycić, w jaki sposób SSMS otrzymuje informacje? Może być szybciej ...
Steve Mangiameli
1
@RafaelPiccinelli - Czuję, że coś prostego jest przeoczane, ale nie jestem pewien, co to jest. Czy przywróciłeś bazę danych msdb z oryginału do instancji GDLIC2014? Czy coś może używać niewłaściwego ciągu lub ścieżki połączenia? Z pewnością SQL Server nie tworzy danych dla kopii zapasowych i przywraca. (Nawiasem mówiąc, ciekawe jest to, że przywracasz _2.mdf, _3.mdf i _4.mdf, ale nie nie-przyrostkowy .mdf lub _1.mdf.)
RLF
Zakończ używanie GUI do przywracania. Spójrz na dysk kopii zapasowej lub taśmę, aby ustalić, co faktycznie masz, i zacznij od nich.
Antysłabe hasła
Cześć @ Anty-słabe hasła. Nie? Nie. Nie używam GUI. Przeszukuję sekwencję logów i pracuję z nią. Byłem ciekawy GUI, ale potem zobaczyłem ten problem. staram się być jak najbardziej z dala od GUI.
Racer SQL

Odpowiedzi:

1

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.

John Eisbrener
źródło
Hej @john Dziękuję za odpowiedź. Zrobiłem declare @data datetime set @data=getdate() EXEC msdb.dbo.sp_delete_backuphistory @oldest_date=@datai usunąłem historię. Zrobię kilka testów, aby zobaczyć, czy to zadziałało. Dziękuję Ci.
Racer SQL,
Cześć @RafaelPiccinelli. Czy to zadziałało dla ciebie?
Kefash,
cześć @Kefash. Myślę, że to nie zadziałało. Nie pamiętam teraz. ale za każdym razem, gdy otrzymuję odpowiedź, natychmiast głosuję za nią i wybieram jako odpowiedź. Myślę, że to nie rozwiązało mojego problemu.
Racer SQL
@ john Potrzebuję naprawy tego tak bardzo. czy Twój problem został ostatecznie rozwiązany?
Kefash
@RafaelPiccinelli Muszę to naprawić, ponieważ kiedy muszę przywrócić do tego stopnia, że ​​dodanie bazy danych do HAG może być denerwujące. Wiem, że można tego dokonać bez GUI, ale dzienniki transakcji są pobierane co 10 minut. Jakie były twoje inne podejścia?
Kefash