Database restore ms sql: RESTORE (Transact-SQL) — SQL Server
Содержание
Параметры и примеры восстановления базы данных SQL Server
Автор: Joe Gavin |
Обновлено: 21.06.2021 |
Комментарии (2) | Связанный: Еще > Восстановить
Проблема
В чем разница между полной резервной копией, резервной копией журнала транзакций и дифференциальной резервной копией базы данных SQL Server? И как восстановить из каждого типа резервной копии? Какие варианты базы данных доступны? Каковы общие операции восстановления?
Решение
Мы рассмотрим различия между каждым типом резервного копирования и их совместное использование, а затем продемонстрируем несколько примеров с ядром базы данных SQL Server.
Каковы различия между каждым типом резервного копирования SQL Server?
Полное резервное копирование базы данных
- Как следует из названия, полная резервная копия — это полная резервная копия всего в
база данных, которая обычно представляет собой файл *.bak - Эта резервная копия может быть восстановлена сама по себе
- Это основа для восстановления журнала транзакций и дифференциальных
резервные копии
Резервная копия журнала транзакций
- Резервное копирование файла журнала транзакций базы данных с момента последнего полного резервного копирования или резервного копирования журнала транзакций,
который обычно представляет собой *. trn fie - Восстановлено после восстановления полной резервной копии
Дифференциальная резервная копия
- Дифференциальная резервная копия — это резервная копия данных, которые изменились с момента
последняя полная резервная копия, которая обычно представляет собой *.dif fie - Восстановлено после восстановления полной резервной копии
Зачем нужны разные типы резервных копий базы данных SQL Server?
Допустим, у вас очень маленькая база данных, и ваши требования к восстановлению таковы, что вы
не может потерять более 1 часа данных. Вполне возможно, что вы могли бы просто сделать
полное резервное копирование базы данных каждый час. Однако маловероятно, что это
дело. Скорее всего, у вас гораздо большая база данных, и вы храните ее.
многие полные резервные копии просто нецелесообразны из-за размера файлов резервных копий.
Кроме того, у вас не будет возможности остановить восстановление в определенный момент.
вовремя или восстановить отдельную страницу данных без резервных копий журнала транзакций.
Примеры резервного копирования и восстановления базы данных SQL Server
Расписание резервного копирования
Мы создаем резервную копию MyDatabase (имя базы данных) в D:\Backups (файл
местонахождение) согласно
следующий график:
Тип резервного копирования | Расписание |
---|---|
Полный | Каждую ночь в 12 часов ночи |
Журнал транзакций | Каждый час, начиная с 00:15 |
Дифференциал | Каждые 8 часов, начиная с 01:30 |
Резервные файлы/История
Чтобы продемонстрировать различия между типами резервных копий, мы рассмотрим
примеры восстановления резервных копий MyDatabase (существующей базы данных) в другую базу данных с именем MyDatabaseTest
(новая база данных).
В следующей таблице приведен список всех файлов резервных копий за 24-часовой период, начиная с
в полночь. Существует 1 полная, 24 журнала транзакций и 3 дифференциальных резервных копии.
Время резервного копирования | Тип резервного копирования | Путь к файлу резервной копии \ Имя |
---|---|---|
01.06.21 00:00 | Полный | D:\Backups\MyDatabase_backup_2021_06_01_000011_4175616.bak |
01.06.21 00:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_001502_1580793.trn |
01.06.21 01:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_011501_4325128.trn |
01.06.21 01:30 | Дифференциал | D:\Backups\MyDatabase_backup_2021_06_01_013001_9294408.dif |
01.06.21 02:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_021501_5352741.trn |
01.06.21 03:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_031501_5822593. trn |
01.06.21 04:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_041501_8351922.trn |
01.06.21 05:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_051502_0940555.trn |
01.06.21 06:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_061501_5368917.trn |
01.06.21 07:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_071502_5161373.trn |
01.06.21 08:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_081501_5644279.trn |
01.06.21 09:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_091501_6308147.trn |
01.06.21 09:30 | Дифференциал | D:\Backups\MyDatabase_backup_2021_06_01_093001_4951166.dif |
01.06. 21 10:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_101502_4623997.trn |
01.06.21 11:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_111502_5178928.trn |
01.06.21 12:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_121503_0205342.trn |
01.06.21 13:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_131503_3755175.trn |
01.06.21 14:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_141501_8916226.trn |
01.06.21 15:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_151501_2361858.trn |
01.06.21 16:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_161501_4941559.trn |
01.06.21 17:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_171501_2457229. trn |
01.06.21 17:30 | Дифференциал | D:\Backups\MyDatabase_backup_2021_06_01_173001_7071188.dif |
01.06.21 18:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_181501_5856632.trn |
01.06.21 19:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_191501_6847568.трн |
01.06.21 20:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_201501_2697377.trn |
01.06.21 21:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_211502_6835717.trn |
01.06.21 22:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_221502_3743339.trn |
01.06.21 23:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_231502_6227036.trn |
Восстановление до последней полной резервной копии
В нашем первом примере хорошо восстановить MyDatabaseTest из последней полной резервной копии.
MyDatabase, запустив приведенный ниже код T-SQL в SQL Server Management Studio.
(SSMS):
Время резервного копирования | Тип резервного копирования | Путь к файлу резервной копии \ Имя |
---|---|---|
01.06.21 00:00 | Полный | D:\Backups\MyDatabase_backup_2021_06_01_000011_4175616.bak |
/* восстановление из последней полной резервной копии */ -- восстановить базу данных ВОССТАНОВИТЬ БАЗУ ДАННЫХ [MyDatabaseTest] С ДИСКА = N'D:\Backups\MyDatabase_backup_2021_06_01_000011_4175616.bak' С ПЕРЕМЕЩЕНИЕМ N'MyDatabase' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabaseTest.mdf', ПЕРЕМЕСТИТЕ N'MyDatabase_log' В N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabaseTest_log.ldf', ВОССТАНОВЛЕНИЕ, -- "с восстановлением" здесь не обязательно - это значение по умолчанию, если не указано - база данных будет доступна ЗАМЕНЯТЬ;
Теперь мы восстановили MyDatabaseTest на момент времени полной резервной копии
MyDatabase была взята.
Восстановление до последнего момента времени с полной резервной копией и резервной копией журнала транзакций
В этом примере мы на мгновение забудем о дифференциальных резервных копиях.
и восстановить MyDatabase до последнего момента времени с полным и транзакционным
резервные копии журналов. Этот список начинается с последней полной резервной копии и журналов транзакций.
резервные копии для восстановления, которые перезаписывают базу данных.
Время резервного копирования | Тип резервного копирования | Путь к файлу резервной копии \ Имя |
---|---|---|
01.06.21 00:00 | Полный | D:\Backups\MyDatabase_backup_2021_06_01_000011_4175616.bak |
01.06.21 00:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_001502_1580793.trn |
01.06.21 01:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_011501_4325128. trn |
01.06.21 02:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_021501_5352741.trn |
01.06.21 03:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_031501_5822593.trn |
01.06.21 04:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_041501_8351922.trn |
01.06.21 05:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_051502_0940555.trn |
01.06.21 06:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_061501_5368917.trn |
01.06.21 07:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_071502_5161373.trn |
01.06.21 08:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_081501_5644279.трн |
01. 06.21 09:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_091501_6308147.trn |
01.06.21 10:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_101502_4623997.trn |
01.06.21 11:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_111502_5178928.trn |
01.06.21 12:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_121503_0205342.trn |
01.06.21 13:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_131503_3755175.trn |
01.06.21 14:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_141501_8916226.trn |
01.06.21 15:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_151501_2361858.trn |
01.06.21 16:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_161501_4941559. trn |
01.06.21 17:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_171501_2457229.trn |
01.06.21 18:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_181501_5856632.trn |
01.06.21 19:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_191501_6847568.trn |
01.06.21 20:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_201501_2697377.trn |
01.06.21 21:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_211502_6835717.trn |
01.06.21 22:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_221502_3743339.трн |
01.06.21 23:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_231502_6227036.trn |
/* восстановление на последний момент времени с полной резервной копией и резервной копией журнала транзакций */ -- восстановить полную резервную копию - основа для восстановления резервных копий журнала транзакций ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_000011_4175616. bak' С ПЕРЕМЕЩЕНИЕМ N'MyDatabase' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabaseTest.mdf', ПЕРЕМЕСТИТЕ N'MyDatabase_log' В N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabaseTest_log.ldf', NORECOVERY, -- 'восстановление без восстановления' позволяет применять дополнительные резервные копии - база данных будет недоступна ЗАМЕНЯТЬ; -- восстановить резервные копии журнала транзакций ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] С ДИСКА = N'D:\Backups\MyDatabase_backup_2021_06_01_001502_1580793.trn' БЕЗ ВОССТАНОВЛЕНИЯ; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_011501_4325128.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_021501_5352741.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_031501_5822593.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_041501_8351922. trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] С ДИСКА = N'D:\Backups\MyDatabase_backup_2021_06_01_051502_0940555.трн' БЕЗВОЗВРАТА; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_061501_5368917.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_071502_5161373.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_081501_5644279.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_091501_6308147.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] С ДИСКА = N'D:\Backups\MyDatabase_backup_2021_06_01_101502_4623997.трн' С БЕЗВОЗВРАТА; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_111502_5178928.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_121503_0205342. trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_131503_3755175.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_141501_8916226.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_151501_2361858.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] С ДИСКА = N'D:\Backups\MyDatabase_backup_2021_06_01_161501_4941559.трн' БЕЗВОЗВРАТА; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_171501_2457229.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_181501_5856632.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_191501_6847568.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] С ДИСКА = N'D:\Backups\MyDatabase_backup_2021_06_01_201501_2697377. трн' БЕЗВОЗВРАТА; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_211502_6835717.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_221502_3743339.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_231502_6227036.trn' WITH NORECOVERY; -- сделать базу данных доступной и больше нельзя применять файлы резервных копий ВОССТАНОВЛЕНИЕ ЖУРНАЛА [MyDatabaseTest] С ВОССТАНОВЛЕНИЕМ; -- "восстановить с восстановлением", чтобы не применялись дополнительные журналы транзакций
В этом примере журналы транзакций копируются каждый час, поэтому нам нужно
для запуска 24 отдельных инструкций RESTORE LOG. Если бы они копировались каждые 15 минут,
потребуется восстановить 96 отдельных файлов резервных копий журнала транзакций. Пока
это вполне допустимый способ восстановления базы данных, он громоздкий и подвержен
к ошибкам. Как это можно упростить?
Восстановление до последнего момента времени с полным, дифференциальным и транзакционным
Резервные копии журналов
Здесь дифференциальные резервные копии очень полезны. На этот раз мы
повторить восстановление MyDatabaseTest до последнего момента времени с полным, дифференциальным,
и резервные копии журнала транзакций.
- Восстановить последнюю полную резервную копию
- Поскольку дифференциальные резервные копии содержат данные, которые изменились с момента последней
полное резервное копирование, мы можем опустить резервные копии журнала транзакций между полным резервным копированием
и последняя дифференциальная резервная копия - Нам понадобятся только резервные копии журнала транзакций после последнего дифференциального
резервная копия
Вот резервные файлы для восстановления.
Время резервного копирования | Тип резервного копирования | Путь к файлу резервной копии \ Имя |
---|---|---|
01. 06.21 00:00 | Полный | D:\Backups\MyDatabase_backup_2021_06_01_000011_4175616.bak |
01.06.21 17:30 | Дифференциал | D:\Backups\MyDatabase_backup_2021_06_01_173001_7071188.dif |
01.06.21 18:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_181501_5856632.trn |
01.06.21 19:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_191501_6847568.trn |
01.06.21 20:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_201501_2697377.trn |
01.06.21 21:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_211502_6835717.trn |
01.06.21 22:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_221502_3743339.трн |
01.06.21 23:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_231502_6227036. trn |
/* параметры восстановления — восстановление на последний момент времени с полными, дифференциальными резервными копиями и резервными копиями журнала транзакций */ -- восстановить полную резервную копию ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_000011_4175616.bak' С ПЕРЕМЕЩЕНИЕМ N'MyDatabase' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabaseTest.mdf', ПЕРЕМЕСТИТЕ N'MyDatabase_log' В N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabaseTest_log.ldf', NORECOVERY, -- 'восстановление без восстановления' позволяет применять дополнительные резервные копии - база данных будет недоступна ЗАМЕНЯТЬ; -- восстановить самую последнюю дифференциальную резервную копию ВОССТАНОВИТЬ БАЗУ ДАННЫХ [MyDatabaseTest] С ДИСКА = N'D:\Backups\MyDatabase_backup_2021_06_01_173001_7071188.dif' С NORECOVERY; -- восстановить резервные копии журнала транзакций, сделанные после последней разности ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_181501_5856632. trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] С ДИСКА = N'D:\Backups\MyDatabase_backup_2021_06_01_191501_6847568.trn' БЕЗ ВОССТАНОВЛЕНИЯ; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_201501_2697377.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_211502_6835717.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_221502_3743339.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_231502_6227036.trn' WITH NORECOVERY; -- сделать базу данных доступной и больше нельзя применять файлы резервных копий ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] WITH RECOVERY; -- 'восстановить с восстановлением'
MyDatabaseTest восстановлен на тот же момент времени, что и в предыдущем
пример.
Восстановление до более раннего момента времени при транзакции
Журнал был скопирован
Давайте рассмотрим пример восстановления до 03:15.
- Восстановить полную резервную копию
- Восстановление разностной резервной копии, которая последний раз была сделана до 03:15
- Восстановите резервные копии журнала транзакций, сделанные между 01:30 и 03:15.
AM
Вот резервные файлы для восстановления.
Время резервного копирования | Тип резервного копирования | Путь к файлу резервной копии \ Имя |
---|---|---|
01.06.21 00:00 | Полный | D:\Backups\MyDatabase_backup_2021_06_01_000011_4175616.bak |
01.06.21 01:30 | Дифференциал | D:\Backups\MyDatabase_backup_2021_06_01_013001_9294408.dif |
01.06.21 02:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_021501_5352741.trn |
01.06.21 03:15 | Журнал транзакций | D:\Backups\MyDatabase_backup_2021_06_01_031501_5822593. trn |
/* параметры восстановления — восстановление на момент времени, когда была создана резервная копия журнала транзакций */ -- восстановить полную резервную копию ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_000011_4175616.bak' С ПЕРЕМЕЩЕНИЕМ N'MyDatabase' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabaseTest.mdf', ПЕРЕМЕСТИТЕ N'MyDatabase_log' В N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabaseTest_log.ldf', NORECOVERY, -- 'with norecovery' позволяет применять дополнительные резервные копии - база данных будет недоступна ЗАМЕНЯТЬ; -- восстановить разностную резервную копию ВОССТАНОВИТЬ БАЗУ ДАННЫХ [MyDatabaseTest] С ДИСКА = N'D:\Backups\MyDatabase_backup_2021_06_01_013001_9294408.dif' БЕЗ ВОССТАНОВЛЕНИЯ; -- восстановить резервные копии журнала транзакций ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_021501_5352741. trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_031501_5822593.trn' WITH NORECOVERY; -- сделать базу данных доступной и больше нельзя применять файлы резервных копий ВОССТАНОВЛЕНИЕ ЖУРНАЛА [MyDatabaseTest] С ВОССТАНОВЛЕНИЕМ;
Восстановление до определенного момента времени между резервными копиями журнала транзакций
В этом примере показано, как остановить восстановление той же резервной копии журнала транзакций,
но остановившись в 02:30 в резервной копии с помощью STOPAT.
/* восстановление на момент времени, когда была создана резервная копия журнала транзакций */ -- восстановить полную резервную копию ВОССТАНОВЛЕНИЕ БАЗЫ ДАННЫХ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_000011_4175616.bak' С ПЕРЕМЕЩЕНИЕМ N'MyDatabase' TO N'D:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\MyDatabaseTest.mdf', ПЕРЕМЕСТИТЕ N'MyDatabase_log' В N'D:\Program Files\Microsoft SQL Server\MSSQL15. MSSQLSERVER\MSSQL\DATA\MyDatabaseTest_log.ldf', NORECOVERY, -- 'with norecovery' позволяет применять дополнительные резервные копии - база данных будет недоступна ЗАМЕНЯТЬ; -- восстановить разностную резервную копию ВОССТАНОВИТЬ БАЗУ ДАННЫХ [MyDatabaseTest] С ДИСКА = N'D:\Backups\MyDatabase_backup_2021_06_01_013001_9294408.dif' БЕЗ ВОССТАНОВЛЕНИЯ; -- восстановить резервные копии журнала транзакций ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_021501_5352741.trn' WITH NORECOVERY; ЖУРНАЛ ВОССТАНОВЛЕНИЯ [MyDatabaseTest] FROM DISK = N'D:\Backups\MyDatabase_backup_2021_06_01_031501_5822593.trn' С NORECOVERY, STOPAT = '2021-06-01 02:30:00'; -- сделать базу данных доступной и больше нельзя применять файлы резервных копий ВОССТАНОВЛЕНИЕ ЖУРНАЛА [MyDatabaseTest] С ВОССТАНОВЛЕНИЕМ;
Следующие шаги
Теперь мы знаем, как выполнить восстановление на любой момент времени из самой старой полной резервной копии.
Вот несколько ссылок на дополнительную информацию.
Простой скрипт для резервного копирования всех баз данных SQL Server
Руководство по параметрам и командам резервного копирования SQL Server
Чередование резервных копий базы данных SQL Server
Копировать только резервную копию для SQL Server
COPY_ONLY Резервные копии с SQL Server
- SQL
Учебное пособие по резервному копированию сервера Модели восстановления SQL Server
Вызов резервных копий базы данных SQL Server с помощью PowerShell
Об авторе
Джо Гэвин из района Большого Бостона. Он начал работать с SQL Server и Sybase в 1998 году в сфере финансовых услуг и с 2011 года является администратором базы данных SQL Server в молочном кооперативе. Он окончил Северо-восточный университет в Бостоне со степенью бакалавра наук в области инженерных технологий (BSET) в Компьютерные технологии. Джо выступал на субботних мероприятиях SQL в Бостоне и Провиденсе.
Посмотреть все мои советы
Последнее обновление статьи: 21 июня 2021 г.
Как восстановить резервную копию базы данных с помощью T-SQL
Нравится
(2)
Твитнуть
Делиться
15.76К
просмотров
Давайте узнаем, как восстановить резервную копию базы данных SQL Server для Microsoft SQL Server. Восстановление — это метод копирования данных из резервной копии и применения к данным зарегистрированных транзакций. Восстановление, по сути, делает резервную копию базы данных и превращает ее обратно в базу данных. Существуют различные процедуры восстановления резервной копии базы данных, которые включают использование кода T-SQL, SQL Server Management Studio или сторонних приложений. В этой статье мы не будем углубляться в то, как создаются резервные копии, но вы, по крайней мере, должны знать, что резервные копии создаются специально для восстановления в случае повреждения или сбоя базы данных, миграции базы данных, создания копии базы данных и других бизнес-требований. В этом ускоренном курсе мы сосредоточимся в основном на том, как восстановить с помощью кода T-SQL.
Предпосылки
Предполагается, что резервная копия базы данных легкодоступна и расположение файла известно. У нас также есть разрешение на доступ к файлу/каталогу, если в файле резервной копии нет повреждений или проблем с диском. Кроме того, во время процесса восстановления базы данных вам потребуется эксклюзивный доступ к базе данных, что означает, что никакие другие пользовательские подключения не могут подключаться к базе данных.
Наконец, версия базы данных не может быть больше версии SQL Server, на котором необходимо восстановить резервную копию. Например, вы не можете восстановить базу данных версии 130 (SQL Server 2016) на SQL Server 2012 или версии (110). Узнайте больше здесь.
Действия по восстановлению резервной копии базы данных с помощью T-SQL
RESTORE DATABASE
— это очень распространенная и универсальная команда T-SQL для восстановления резервных копий SQL Server, поскольку этот язык работает практически в любой среде или инструменте, который его понимает. Поэтому вы можете выполнить их в SQL Server Management Studio, утилите SQLCMD или любом другом стороннем инструменте. Команда RESTORE DATABASE
в основном используется для восстановления полной, дифференциальной резервной копии, резервной копии файла или группы файлов. Мы рассмотрим методы восстановления различных резервных копий и другие параметры, которые можно применить к процессу команды восстановления.
1. Восстановление полной резервной копии базы данных SQL Server
Во-первых, давайте начнем с наиболее распространенного восстановления полной резервной копии. Эти резервные копии содержат всю информацию, необходимую для восстановления базы данных на момент завершения процесса резервного копирования. Процесс восстановления резервной копии потенциально может перезаписать существующую базу данных или создать новую в зависимости от того, как вы пишете код. Давайте рассмотрим базовое восстановление полной резервной копии, которая хранится в папке C:\MSSQL\Backup\MyDB_full.bak 9.0794, и вы хотите восстановить его в базу данных MyDB. Вам необходимо выполнить следующие команды:
p>Обратите внимание, что приведенная выше команда T-SQL полностью восстановит полную резервную копию и переведет базу данных в оперативный режим. Если бы у вас были дополнительные журналы дифференциалов или транзакций, вы не смогли бы восстановить их поверх базы данных. Чтобы после этого продолжить восстановление разностных резервных копий или резервных копий журнала транзакций, необходимо добавить параметр NORECOVERY. Это переводит базу данных в состояние восстановления и позволяет восстанавливать в ней дополнительные разностные резервные копии или резервные копии журнала транзакций.
2. Восстановить разностную резервную копию базы данных SQL Server
Разностная резервная копия — это в основном изменения, произошедшие в базе данных с момента создания последней полной резервной копии. Дифференциальная резервная копия полной резервной копии собирает все изменения, поэтому все предыдущие дифференциальные резервные копии не нужны для восстановления базы данных, а только последняя на момент времени, на который вам нужно восстановить. Перед восстановлением разностной резервной копии необходимо сначала восстановить последнюю полную резервную копию с помощью NORECOVERY 9.0786, а затем последнюю дифференциальную резервную копию с параметром
RECOVERY
:
3. Восстановить журнал транзакций Резервное копирование базы данных SQL Server
Резервные копии журнала транзакций охватывают все транзакции, которые произошли между первым полным резервным копированием или последней резервной копией журнала транзакций и время завершения процесса резервного копирования. При восстановлении журналов транзакций необходимо восстановить все резервные копии журналов транзакций последовательно после последней разностной резервной копии. Кроме того, имейте в виду, что все ваши последовательные восстановления журналов должны выполняться в NORECOVERY
до восстановления последнего журнала. Последнюю следует восстановить с помощью RECOVERY
, чтобы перевести базу данных в оперативный режим. Наконец, резервные копии журналов — это последний набор резервных копий, который необходимо восстановить после завершения создания полных и дифференциальных резервных копий в состоянии NORECOVERY
.
4. Восстановление с использованием файла резервной копии с несколькими резервными копиями
Эти файлы резервных копий настроены как один файл, но содержат несколько резервных копий и позиций. Например, вы можете записать все свои бэкапы как полные, так и разные в один единственный файл на C:\MSSQL\Backup\MyDB_full.bak . Команду RESTORE HEADERONLY
можно использовать для предварительного просмотра содержимого файла как в резервных копиях, так и в позициях. Как только мы узнаем, где в файле находятся резервные копии и позиции, вы можете выполнить восстановление, как показано ниже. В этом примере позиция 1 — это полная резервная копия, а позиция 2 — дифференциальная резервная копия.
5. Восстановление полной резервной копии С ПЕРЕМЕЩЕНИЕМ
Резервные копии не только создают резервные копии данных в базе данных, но также метаданных и конфигураций, таких как физический путь, по которому хранятся файлы базы данных. Во время восстановления, если оператор WITH MOVE не используется, SQL Server попытается восстановить файлы базы данных точно в том месте, где они существовали в исходной базе данных. Вы можете столкнуться с ошибкой, если этот путь не существует, поэтому можно использовать WITH MOVE, чтобы указать, где вы хотите сохранить восстановленные файлы базы данных. Код T-SQL ниже демонстрирует такой сценарий.
6. Восстановление полной резервной копии с использованием WITH REPLACE
В случае восстановления существующей базы данных в SQL Server используется параметр WITH REPLACE
. Бывают случаи, когда при восстановлении выдается сообщение об ошибке «Конец журнала для базы данных [xxxx] не был скопирован». чтобы перезаписать существующую базу данных без предварительного резервного копирования хвоста журнала транзакций. Эта команда в основном указывает, что игнорируются все активные транзакции в журнале транзакций и выполняется восстановление.Приведенный ниже код T-SQL восстановит базу данных и проигнорирует все активные записи в журнале текущих транзакций
Заключение
Эта демонстрация представляет собой бесшовную установку, в которой вы не сталкиваетесь с повреждением, доступом, потерянными файлами базы данных и базами данных, пораженными вирусами. В этом случае вы можете легко восстановить базу данных, написав простой сценарий T-SQL, как показано выше, чтобы добиться полного восстановления базы данных.
Сталкивались ли вы с наихудшим сценарием, когда вы не можете завершить восстановление из-за возможного повреждения базы данных или даже резервных копий? Хорошие новости! Я хотел бы представить вам надежный инструмент восстановления базы данных SQL, который не только исправит вашу базу данных или резервные копии с минимальной потерей данных, но также потенциально поможет вам восстановить удаленные записи из базы данных.