Восстановление базы данных в новом расположении (SQL Server)
В этой статье описывается, как восстановить базу данных SQL Server в новое расположение и при необходимости переименовать базу данных в SQL Server с помощью SQL Server Management Studio (SSMS) или Transact-SQL. Эта процедура позволяет переместить базу данных по новому пути каталога или создать копию базы данных на том же или другом экземпляре сервера.
Подготовка к работе
ограничения
- При восстановлении базы данных из полной резервной копии системный администратор должен быть единственным пользователем, работающим с базой данных.
Необходимые компоненты
- Модель восстановления с полным резервным копированием или с неполным протоколированием регламентирует, что перед восстановлением базы данных необходимо создать резервную копию активного журнала транзакций. Дополнительные сведения см. в разделе Создание резервной копии журнала транзакций (SQL Server).
- Чтобы восстановить зашифрованную базу данных, необходимо иметь доступ к сертификату или асимметричному ключу, используемому для шифрования базы данных! Без этого сертификата или асимметричного ключа невозможно восстановить базу данных. Этот сертификат должен храниться для шифрования ключа шифрования базы данных до тех пор, пока требуется резервное копирование. Дополнительные сведения см. в статье SQL Server Certificates and Asymmetric Keys.
Рекомендации
- Дополнительные сведения о перемещении базы данных см. в разделе «Копирование баз данных с помощью резервного копирования и восстановления».
- При восстановлении базы данных SQL Server 2005 (9.x) или более поздней версии до SQL Server база данных автоматически обновляется. Как правило, база данных сразу становится доступной. Но если база данных SQL Server 2005 (9.x) содержит полнотекстовые индексы, при обновлении будет произведен их импорт, сброс или повторное создание в зависимости от установленного на сервере значения свойства upgrade_option. Если при обновлении выбран режим импорта (upgrade_option = 2) или перестроения (upgrade_option = 0), полнотекстовые индексы во время обновления будут недоступны. В зависимости от объема индексируемых данных импорт может занять несколько часов, а перестроение — в несколько (до 10) раз больше. Обратите внимание, что при импорте параметра обновления связанные полнотекстовые индексы перестраиваются, если полнотекстовый каталог недоступен. Чтобы изменить значение свойства сервера upgrade_option , следует использовать процедуру sp_fulltext_service.
Безопасность
В целях безопасности рекомендуется не подключать или восстанавливать базы данных из неизвестных или ненадежных источников. В этих базах данных может содержаться вредоносный код, вызывающий выполнение непредусмотренных инструкций Transact-SQL или появление ошибок из-за изменения схемы или физической структуры базы данных. Перед тем как использовать базу данных, полученную из неизвестного или ненадежного источника, выполните на тестовом сервере инструкцию DBCC CHECKDB для этой базы данных, а также изучите исходный код в базе данных, например хранимые процедуры и другой пользовательский код.
Разрешения
Если восстановленная база данных не существует, пользователь должен иметь разрешения CREATE DATABASE, чтобы иметь возможность выполнить RESTORE. Если база данных существует, разрешения на выполнение инструкции RESTORE по умолчанию предоставлены членам предопределенных ролей сервера sysadmin и dbcreator , а также владельцу базы данных (dbo).
Разрешения на выполнение инструкции RESTORE даются ролям, в которых данные о членстве всегда доступны серверу. Так как членство в предопределенной роли базы данных может быть проверка только в том случае, если база данных доступна и не повреждена, что не всегда происходит при выполнении RESTORE, члены предопределенной роли базы данных db_owner не имеют разрешений RESTORE.
Восстановление базы данных в новую папку и при необходимости ее переименование с помощью SSMS
- Подключение в соответствующий экземпляр ядро СУБД SQL Server, а затем в обозреватель объектов выберите имя сервера, чтобы развернуть дерево сервера.
- Щелкните правой кнопкой мыши базы данных и выберите пункт «Восстановить базу данных«. Откроется диалоговое окно Восстановление базы данных .
- Чтобы указать источник и расположение восстанавливаемых резервных наборов данных, используйте страницу Общие , раздел Источник . Выберите один из следующих вариантов:
- База данных Выберите из раскрывающегося списка базу данных для восстановления. Данный список содержит только базы данных, резервное копирование которых было выполнено в соответствии с журналом резервного копирования msdb .
Если резервная копия была получена с другого сервера, на целевом сервере не будет журнала резервного копирования для указанной базы данных. В этом случае щелкните пункт Устройство , чтобы вручную указать файл или устройство для восстановления.
- Устройство Нажмите кнопку обзора (. ), чтобы открыть диалоговое окно «Выбор устройств резервного копирования». В окне Тип носителя резервной копии выберите один из перечисленных типов устройств. Чтобы выбрать одно или несколько устройств для поля мультимедиа резервного копирования, нажмите кнопку «Добавить«. После добавления устройств в список носителей резервного копирования нажмите кнопку «ОК«, чтобы вернуться на страницу «Общие«. В списке Источник > Устройство > База данных выберите имя базы данных, которую нужно восстановить. Примечание. Этот список доступен, только если выбрано Устройство . Будут выбраны только те базы данных, резервные копии которых доступны на выбранном устройстве.
Восстановление базы данных в новую папку и при необходимости ее переименование с помощью T-SQL
- При необходимости определите логическое и физическое имена файлов в резервном наборе, содержащем полную резервную копию базы данных, которую нужно восстановить. Эта инструкция возвращает список файлов базы данных и журнала, содержащихся в резервном наборе данных. Базовый синтаксис: RESTORE FILELISTONLY FROM WITH FILE = BACKUP_SET_FILE_NUMBER В этом случае аргумент номер_файла_резервного_набора указывает позицию резервной копии в наборе носителей. Положение резервного набора можно получить с помощью инструкции RESTORE HEADERONLY . Дополнительные сведения см. в разделе «Указание резервного набора данных». Эта инструкция также поддерживает несколько вариантов WITH. Дополнительные сведения см. в разделе Инструкция RESTORE FILELISTONLY (Transact-SQL).
- Используйте инструкцию RESTORE DATABASE для восстановления полной резервной копии базы данных. По умолчанию файлы данных и журналов восстанавливаются в исходных местоположениях. Чтобы переместить базу данных, используйте параметр MOVE для перемещения каждого из файлов базы данных и предотвращения конфликтов с существующими файлами.
Базовый синтаксис Transact-SQL для восстановления базы данных в новом расположении и новое имя:
RESTORE DATABASE *new_database_name* FROM *backup_device* [ . *n* ] [ WITH < [ **RECOVERY** | NORECOVERY ] [ , ] [ FILE =< *backup_set_file_number* | @*backup_set_file_number* >] [ , ] MOVE '*logical_file_name_in_backup*' TO '*operating_system_file_name*' [ . *n* ] > ;
При подготовке к перемещению базы данных на другой диск необходимо проверить наличие достаточного места и определить потенциальные конфликты с существующими файлами. Это включает использование инструкции RESTORE VERIFYONLY , указывающей те же параметры MOVE, которые планируется использовать в инструкции RESTORE DATABASE.
В следующей таблице аргументы инструкции RESTORE описаны применительно к восстановлению базы данных в новом месте. Дополнительные сведения об этих аргументах см. в разделе RESTORE (Transact-SQL).
новое_имя_базы_данных
Новое имя базы данных.
При восстановлении базы данных на другом экземпляре сервера можно указать исходное имя базы данных вместо нового.
backup_device [ ,. n ]
Указывает список с разделителями-запятыми от 1 до 64 устройств резервного копирования, используемых для восстановления базы данных из резервной копии. Можно указать как физическое устройство резервного копирования, так и соответствующее логическое устройство, если оно определено. Для указания физического устройства резервного копирования используйте параметр DISK или TAPE.
< DISK | TAPE >=имя_физического_устройства_резервного_копирования
< RECOVERY | NORECOVERY >
Если в базе данных используется модель полного восстановления, может возникнуть необходимость применить резервные копии журналов транзакций после восстановления базы данных. В этом случае укажите параметр NORECOVERY.
В противном случае используйте параметр RECOVERY, который применяется по умолчанию.
FILE =< номер_файла_резервного_набора | @номер_файла_резервного_набора >
Идентифицирует резервный набор данных для восстановления. Например, аргумент номер_файла_резервного_набора , равный 1 , указывает первый резервный набор данных на носителе данных резервных копий, а аргумент номер_файла_резервного_набора , равный 2 , указывает второй резервный набор данных. Значение номер_файла_резервного_набора резервного набора данных можно получить с помощью инструкции RESTORE HEADERONLY .
Если этот параметр не указан, по умолчанию используется первый резервный набор на устройстве резервного копирования.
Дополнительные сведения см. в разделе «Указание резервного набора данных» в аргументах RESTORE (Transact-SQL).
MOVE ‘logical_file_name_in_backup‘ TO ‘operating_system_file_name‘ [ ,. n ]
Показывает, что файл данных или журнала, указанный параметром логическое_имя_файла_в_резервной_копии , следует восстановить из копии в месте, указанном параметром имя_файла_в_операционной_системе. Укажите инструкцию MOVE для каждого логического файла, который надо восстановить из резервного набора данных в новом месте.
Пример (Transact-SQL)
В приведенном ниже примере создается база данных MyAdvWorks посредством восстановления резервной копии образца базы данных AdventureWorks2022 , в которой содержатся два файла: AdventureWorks2022 _Data и AdventureWorks2022 _Log. В этой базе данных используется простая модель восстановления. База данных AdventureWorks2022 уже существует на экземпляре сервера, поэтому файлы в резервной копии должны быть восстановлены в новом месте. Количество и имена восстанавливаемых файлов базы данных можно определить с помощью инструкции RESTORE FILELISTONLY. Резервная копия базы данных является первым резервным набором данных на устройстве резервного копирования.
В примерах резервного копирования и восстановления журнала транзакций из резервной копии, включая восстановление на момент времени, используется база данных MyAdvWorks_FullRM , которая создается из базы данных AdventureWorks2022 , как в следующем примере с базой данных MyAdvWorks . Однако результирующая MyAdvWorks_FullRM база данных должна быть изменена, чтобы использовать полную модель восстановления с помощью следующей инструкции Transact-SQL: ALTER DATABASE SET RECOVERY FULL.
USE master; GO -- First determine the number and names of the files in the backup. -- AdventureWorks2022_Backup is the name of the backup device. RESTORE FILELISTONLY FROM AdventureWorks2022_Backup; -- Restore the files for MyAdvWorks. RESTORE DATABASE MyAdvWorks FROM AdventureWorks2022_Backup WITH RECOVERY, MOVE 'AdventureWorks2022_Data' TO 'D:\MyData\MyAdvWorks_Data.mdf', MOVE 'AdventureWorks2022_Log' TO 'F:\MyLog\MyAdvWorks_Log.ldf'; GO
Связанные задачи
- Создание полной резервной копии базы данных (SQL Server)
- Restore a Database Backup Using SSMS
- Создание резервной копии журнала транзакций (SQL Server)
- Восстановление резервной копии журнала транзакций (SQL Server)
См. также
- Управление метаданными при создании базы данных в другом экземпляре сервера (SQL Server)
- RESTORE (Transact-SQL)
- Копирование баз данных путем создания и восстановления резервных копий
Восстановление базы данных Microsoft SQL Server
В инструкции описана процедура восстановления базы данных Microsoft SQL Server из бэкапов, сделанных с помощью BACKUP RENT. Восстановление базы данных выполняется на сервере (компьютере), где установлен и запущен Microsoft SQL Server. Для выполнения восстановления базы данных достаточно установить на компьютер (сервер) программный комплекс BACKUP RENT и воспользоваться Мастером восстановления, который не требует активации подписки для компьютера (сервера).
- Запуск мастера восстановления
- Загрузка бэкапов из хранилища
- Восстановление базы данных Microsoft SQL Server
Шаг 1 – Запуск мастера восстановления
Запустите программу Мастер восстановления (меню Пуск → Все программы → Backup Rent → Мастер восстановления). После запуска программа Мастер восстановления попросит ввести Логин и Пароль для авторизации клиента, который был предоставлен при регистрации.

После введения Логина и Пароля нажмите кнопку ОК для авторизации в программе.
Шаг 2 – Загрузка бэкапов из хранилища
Если на компьютере (сервере), где планируется выполнить восстановление базы данных Microsoft SQL Server отсутствуют бэкапы базы данных, то выполните данный шаг для загрузки бэкапов из облачного хранилища. В случае если бэкапы уже есть на компьютере, то Шаг 2 можно пропустить.

В программе Мастер восстановления выберите операцию «Загрузка резервной копии» и нажмите кнопку Далее.

Выберите из списка Компьютер (1), для которого ранее было настроено резервирование BACKUPRENT.
После выбора компьютера в списке Каталог (2) программа отобразит все каталоги выбранного компьютера, для которых было настроено сохранение резервных копий в облачное хранилище. Необходимо выбрать нужный каталог из списка.
| СОВЕТ | |
| При необходимости загрузить бэкапы, которые были ранее удалены в ходе работы BACKUP RENT, отметьте в блоке Отложенное удаление дату и время удаления бэкапа. | |
Выберите каталог на компьютере (3), куда будут загружены бэкапы из облачного хранилища.
После выполнения всех настроек нажмите кнопку Выполнить для загрузки бэкапов. В зависимости от размера резервных копий базы данных, загрузка может занять некоторое время.

После завершения загрузки бэкапов программа Мастер восстановления покажет для ознакомления протокол работы операции. Нажмите кнопку Следующая операция для перехода к следующему шагу.
Шаг 3 – Восстановление базы данных Microsoft SQL Server

В программе Мастер восстановления выберите из списка операцию «Восстановление базы данных Microsoft SQL из резервной копии» и нажмите кнопку Далее.

Укажите каталог (1), где расположены бэкапы базы данных Microsoft SQL Server.
Если при настройке резервирования базы данных Microsoft SQL Server был задан пароль-шифрования, то введите его в поле Пароль (2) или укажите ключ RSA для расшифровки резервной копии, иначе оставьте данное поле пустым.
Выберите Microsoft SQL Server из предложенного программой списка (3).
| СОВЕТ | |
| Если в предложенном Мастером восстановления списке Microsoft SQL Server нет нужного сервера, введите его имя вручную в поле Сервер (3). | |
Укажите имя пользователя (4) и пароль (5) для подключения к Microsoft SQL Server и нажмите кнопку Далее для перехода к следующим настройкам.
| СОВЕТ | |
| В случае использования авторизации Windows, поля Логин/Пароль нужно оставить пустыми. Пользователь от имени которого запущена программа Мастер восстановления в таком случае должен обладать правами Администратора системы для выполнения восстановления базы данных Microsoft SQL Server. | |
Мастер восстановления проверит возможность подключения к Microsoft SQL Server и если подключение установить не удастся, то на экране будет выведено сообщение об ошибке и переход к следующему этапу настройки будет отменен программой.

В списке Резервная копия БД (1) программа покажет имена баз данных, для которых найдены бэкапы в каталоге, который был задан в предыдущем окне. Необходимо выбрать из данного списка базу данных, которую будем восстанавливать.
Затем необходимо определить имя Новой базы данных (2) – база данных Microsoft SQL Server, в которую будет выполняться восстановление базы данных из бэкапа. По умолчанию программа предлагает для базы данных имя, которое соответствует имени базы данных в бэкапе, но его можно отредактировать при необходимости.
| СОВЕТ | |
| Если необходимо выполнить восстановление на какой-то определенный момент, то установите флажок «Восстановить на» и определите дату и время (Recovery point) на которую нужно выполнить восстановление базы данных. | |
В списке Файлы базы данных (3) проверьте расположение файлов базы данных после восстановления.
| ВНИМАНИЕ | |
| По умолчанию файлы базы данных будут располагаться на диске там же, где они были в момент создания резервной копии базы данных. Если выполняется восстановление копии базы данных на том же компьютере (сервере), где расположена оригинальная база, то необходимо изменить месторасположение файлов базы данных или их имена. | |
После выполнения всех настроек нажмите кнопку Выполнить для запуска процесса восстановления базы данных Microsoft SQL Server. Процесс восстановления базы данных, может занять некоторое время. После завершения восстановления базы данных Мастер восстановления покажет протокол работы.

Нажмите кнопку Выход для завершения работы с Мастером восстановления.
После завершения процедуры восстановления базы данных Microsoft SQL Server база данных полностью готова к работе.
Перенос данных бэкапа новой версии MS SQL Server на более старую версию
Как-то раз для воспроизведения бага мне потребовался бэкап production-базы.
К моему удивлению я столкнулся со следующими ограничениями:
- Бэкап базы был сделан на версии SQL Server 2016 и не был совместим с моей SQL Server 2014.
- На моем рабочем компьютере в качестве ОС использовалась Windows 7, поэтому я не мог обновить SQL Server до версии 2016
- Поддерживаемый продукт был частью более крупной системы с сильно связанной легаси-архитектурой и также обращался к другим продуктам и базам, поэтому его развертывание на другой станции могло занять очень много времени.
Восстановление данных из бэкапа
Я решил использовать виртуальную машину Oracle VM VirtualBox с Windows 10 (можно взять тестовый образ для браузера Edge отсюда). На виртуальную машину был установлен SQL Server 2016 и на нем из бэкапа была восстановлена база данных приложения (инструкция).
Настройка доступа к SQL Server на виртуальной машине
Далее было необходимо предпринять некоторые шаги, чтобы появилась возможность доступа к SQL Server извне:
- Для фаервола добавить правило пропускать запросы на порт 1433.
- Желательно, чтобы доступ к серверу шел не через windows-аутентификация, а через SQL по логину и паролю (проще настроить доступ). Однако в этом случае нужно не забыть включить в свойствах SQL Server возможность SQL-аутентификации.
- В настройках пользователя на SQL Server на вкладке User Mapping указать для восстановленной базы роль пользователя db_securityadmin.
Перенос данных
Собственно сам перенос данных состоит из двух этапов:
- Перенос схемы данных (таблицы, представления, хранимые процедуры и т.д.)
- Перенос самих данных
Перенос схемы данных
Выполняем следующие операции:
- Выбираем Tasks -> Generate Scripts для переносимой базы.
- Выбираем нужные для переноса объекта или оставляем значение по умолчанию (в этом случае будут созданы скрипты для всех объектов базы).
- Указываем настройки для сохранения скрипта. Удобнее всего сохранить скрипт в единый файл в кодировке Unicode. Тогда при сбое не понадобится заново повторять все шаги.
Внимание: после выполнения скрипта необходимо проверить соответствие настроек базы из бэкапа и базы, созданной скриптом. В моем случае в скрипте отсутствовала настройка для COLLATE, что приводило к сбою при переносе данных и танцам с бубном пересозданию базы с помощью дополненного скрипта.
Перенос данных
Перед переносом данных необходимо отключить проверку всех ограничений на базе:
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
Перенос данных осуществляем с помощью мастера импорта данных Tasks -> Import Data на SQL Server, где находится созданная скриптом база:
- Указываем настройки подключения к источнику (SQL Server 2016 на виртуальной машине). Я использовал Data Source SQL Server Native Client и вышеупомянутую SQL-аутентификацию.
- Указываем настройки подключения к месту назначения (SQL Server 2014 на хост-машине).
- Далее настраиваем маппинг. Необходимо выбрать все не read-only объекты (например, представления выбирать не нужно). В качестве дополнительных опций следует выбрать «Разрешить вставку в identity-столбцы», если такие используются.
Внимание: если при попытке выделить несколько таблиц и проставить им свойство «Разрешить вставку в identity-столбцы» свойство уже было ранее установлено хотя бы для одной из выделенных таблиц, в диалоге будет отмечено, что свойство уже установлено для всех выделенных таблиц. Данный факт может сбить с толку и привести к ошибкам переноса. - Запускаем перенос.
- Восстанавливаем проверку ограничений:
EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
Заключение
Данная задача встречается довольно редко и возникает только из-за вышеуказанных ограничений. Чаще всего решение заключается в обновлении SQL Server или подключению к удаленному серверу, если это позволяет архитектура приложения. Однако от легаси-кода и кривых рук некачественной разработки никто не застрахован. Надеюсь, что Вам эта инструкция не понадобится, а если все же в ней возникнет необходимость, то поможет сэкономить кучу времени и нервов. Спасибо за внимание!
Список использованных источников
- How do I deal with FK constraints when importing data using DTS Import/Export Wizard?
- The column «Column 2» cannot be processed because more than one code page (65001 and 1252) are specified for it.
- How can I connect to SQLServer running on VirtualBox from my host Macbook.
- SQL SERVER – Enable Identity Insert – Import Expert Wizard
- Troubleshooting Microsoft SQL Server Error 18456, Login failed for user
Восстановление базы 1С из бэкапа MS SQL
Модели восстановление базы данных в MS SQL существует две «простая» и «полная». Отличаются они тем, что в полной модели восстановления ведется еще и бэкап журнала транзакций. Рассмотрим восстановление базы 1С в MS SQL на примере простой модели восстановления.
Модели восстановление базы данных в MS SQL существует две «простая» и «полная». Отличаются они тем, что в полной модели восстановления ведется еще и бэкап журнала транзакций. Рассмотрим восстановление базы 1С в MS SQL на примере простой модели восстановления.
Бэкапы баз данных MS SQL хранятся в файлах с расширением .bak. Сами бэкапы баз тоже бывают двух типов: полный бэкап и разностный бэкап. В полном бэкапе содержится полная копия базы данных, а в разностном только изменения внесенные в базу с момента полного бэкапа.
Восстанавливаем полный бэкап.
В Microsoft SQL Server Managment Studio создаем базу данных в которую будет выполнятся восстановление. Как настроить базу в MS SQL для 1С рассмотренно здесь.

Выбираем созданную базу и в контекстном меню переходим Задачи — Восстановить — База данных.

Выбираем источник восстановления «С устройства» и указываем путь к файлу бэкапа. После добавления файла бэкапа отмечаем галочкой набор данных для восстановления.

Слева в меню «Выбор страницы» переходим к пункту «Параметры». В пункте параметры восстановления отмечаем «Перезаписать существующую базу данных (WITH REPLACE)».
Если восстанавливаете только полный бэкап, то в разеде состояние восстановления оставляем пункт «Оставить базу готовой к использованию»
Если далее планируется восстанавливать еще и разностный бэкап, то в разеде состояние восстановления отмечаем «Оставить базу данных в неработающем состоянии. «.

Жмем ОК и дожидаемся сообщения о завершении восстановления.

Восстанавливаем разностный бэкап.
Снова в целевой базу данных выбираем из контекстного меню Задачи — Восстановить — База данных.
Указываем источник восстановления. Выбираем файл .bak разностного бэкапа.

На странице Параметры настройки оставляем как есть. В разделе «Состояние восстановления» отмечен пункт «Оставить базу готовой к использованию. «.
Жмем ОК, дожидаемся завершения и переходим к добавлению базы на сервер 1С.
Добавляем базу на сервер 1С.
Запускаем в 1С настройку добавление информационной базы и выбираем пункт «Создание новой информационной базы»

На следующем шаге должен быть отмечен пункт «Создание информационной базы без конфигурации..»

Вписываем имя базы и указываем тип расположения информационной базы «На сервере 1С предприятия»

Указываем настройки для подключения к базе сервера MS SQL

Далее оставляем настройки как есть и жмем Готово. База добавлена — запускаем 1С и проверяем работоспособность.