Відновити базу даних за допомогою GUI - Неправильний файл для відновлення


20

Я просто псуюся з графічним інтерфейсом SSMS та вивчаю варіанти завдання «відновити».

Одне, що я помітив, коли натискаю кнопку "Створити скрипт", перший рядок запиту:

 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 )

Гаразд, немає проблем, але я щодня роблю резервні копії цієї бази даних. це Database_name_LOGSHIPPING.BKPім'я файлу, який я зробив для доставки журналу місяць тому.

Чому коли я намагаюся використовувати графічний інтерфейс SSMS для відновлення резервної копії, він вказує на цей файл резервної копії? У мене навіть цього файлу більше немає.


За допомогою цього запиту від MSSQLTIPS я бачу всі резервні копії з цієї бази даних:

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 

введіть тут опис зображення

Що тут може бути не так? Я не використовую ТОЛЬКО КОПІЮВАННЯ.


EDIT2:

Я щодня роблю резервні копії вручну для тестування, і навіть таким чином SQL Server вибирає стару резервну копію, яка вже не існує. Під час запуску RESTORE HEADERONLY...він говорить (очевидно, що файл не існує.


EDIT 3:

Це друк із графічного інтерфейсу:

1 введіть тут опис зображення Нічого собі Вау ЧАКАЙТЕ ХВІЛЬНУ !

Ця база даних була відновленням з іншого сервера (того ж сервера, різні екземпляри). Хууум ... я думаю, що тут проблема.

Ви можете побачити на "сервері" на другій картинці? він має 2 сервери. Я використовую один із екземпляром імен GDLIC2014.

сценарій:

введіть тут опис зображення

Сценарій резервного копіювання:

DECLARE @Patch varchar(1000)

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

BACKUP DATABASE DATABASE TO DISK=@Patch with compression

З таким же запитом від MSSQLTIPS я міг знайти ці результати, використовуючи його без діапазону дат:

введіть тут опис зображення

Червоний квадрат - це неправильна резервна копія з попереднього екземпляра, Синій квадрат - це остання резервна копія (GUI повинен використовувати його)

EDIT 4:

Що ж, за допомогою цього запиту для переліку історії резервного копіювання я бачу, що кожен журнал і повний список вказані правильно:

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:

Чи є щось для перезапуску заголовка бази даних

(Мені немає ідей)


3
Чи можете ви спробувати скористатися останнім інтерфейсом SSMS GUI - 2014 ? Включено багато виправлень
Кін Шах

1
Ви налаштували трасування, а потім запустіть параметри GUI, щоб зафіксувати, як SSMS отримує інформацію? Можливо, буде швидше ...
Стів Манґямелі

1
@RafaelPiccinelli - я відчуваю, що щось просте забувають, але не впевнений, що це таке. Ви відновили базу даних msdb з оригіналу в екземпляр GDLIC2014? Чи може щось використовувати неправильний рядок з'єднання або шлях? Безумовно, SQL Server не збирає дані для резервного копіювання та відновлення. (Як бік, цікаво, що ви відновлюєте _2.mdf, _3.mdf та _4.mdf, але не без суфікса .mdf або _1.mdf.)
RLF

Заверніть використання GUI для відновлення. Подивіться на резервний диск або стрічку, щоб визначити, що у вас є насправді, і почніть з них.
Анти-слабкі паролі

Привіт @ Анти-слабкі слова. Ні ні. Я не використовую GUI. Я запитую послідовність журналів, і я працюю з ним. Мені було просто цікаво про GUI, але потім я побачив цю проблему. я намагаюся бути далеко від GUI, наскільки я можу.
Racer SQL

Відповіді:


1

Швидше за все, у таблицях історії резервного копіювання не синхронізовано, і користувальницький інтерфейс збирається на останню "послідовну" повну резервну копію. Якщо вас дійсно цікавить, чому він робить те, що робить, запустіть слід профілю, обмежений вашим обліковим записом, пройдіть кроки відновлення в графічному інтерфейсі та перегляньте команди, записані в трасі, які показують, що інтерфейс працює за кадром . Це дасть вам остаточну відповідь, яку ви шукаєте.

Якщо ви хочете просто пройти повз це, ви можете очистити історію резервного копіювання за допомогою EXEC [msdb].[dbo].[sp_delete_backuphistory] @oldest_date=getdate()(залежно від останнього разу, коли ви це запустили, ви можете очистити його за місяць за один раз), а потім взяти новий повний і т.д. підозрює, що це скине графічний інтерфейс для використання належних резервних копій вперед.

Нарешті, ще один варіант - запустити цей сценарій за авторством Уейна Шеффілда . Він може надати додаткову інформацію стосовно будь-яких проблем із ланцюгом резервного копіювання. Я не натрапив на це, поки не опублікував цю відповідь спочатку, але, сподіваюся, це допоможе комусь іншому в майбутньому.


Привіт @john Дякую за вашу відповідь .. Я зробив declare @data datetime set @data=getdate() EXEC msdb.dbo.sp_delete_backuphistory @oldest_date=@dataі видалив історію. Я зроблю кілька тестів, щоб побачити, чи спрацювало це Дякую.
Racer SQL

Привіт @RafaelPiccinelli. Це працювало для вас?
Кефаш

ей @Kefash. Я думаю, це не спрацювало. Я зараз не можу згадати. але кожного разу, коли я отримав відповідь, я негайно надсилаю заявку і вибираю як відповідь. Я думаю, це не вирішило моєї проблеми.
Racer SQL

@john Мені потрібен виправлення для цього sooo. чи врешті-решт ваше питання було вирішено?
Кефаш

@RafaelPiccinelli Мені потрібно виправити це, як коли мені потрібно відновитись до точки, сказати, додавати базу даних до HAG, це може бути прикро. Я знаю, що це можна зробити без GUI, але журнали транзакцій приймаються кожні 10 хв. Які були ваші інші підходи?
Кефаш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.