Восстановление резервной копии базы данных с помощью среды SSMS
В этой статье объясняется, как восстановить полную резервную копию базы данных с помощью SQL Server Management Studio.
ограничения
Перед восстановлением базы данных по модели полного восстановления или восстановления с неполным протоколированием, возможно, необходимо будет выполнить резервное копирование активного журнала транзакций (который называется заключительным фрагментом журнала). Дополнительные сведения см. в разделе Создание резервной копии журнала транзакций (SQL Server).
При восстановлении базы данных из другого экземпляра примите во внимание сведения из раздела Управление метаданными при обеспечении доступности базы данных на другом экземпляре сервера (SQL Server).
Чтобы восстановить зашифрованную базу данных, потребуется доступ к сертификату или асимметричному ключу, использовавшемуся для шифрования этой базы данных. Без сертификата или асимметричного ключа вы не сможете восстановить базу данных. Сохраняйте сертификат, который использовали для шифрования ключа шифрования базы данных, в течение всего периода хранения резервной копии. Дополнительные сведения см. в статье SQL Server Certificates and Asymmetric Keys.
При восстановлении более старой базы данных версий до более новой версии SQL Server эта база данных автоматически обновляется до новой версии. Это предотвращает использование базы данных с более старой версией ядра СУБД. Но это относится к обновлению метаданных и не влияет на уровень совместимости базы данных. Если уровень совместимости пользовательской базы данных до обновления был 100 или выше, после обновления он останется таким же. Если уровень совместимости равен 90 перед обновлением, в обновленной базе данных уровень совместимости имеет значение 100, что является самым низким поддерживаемым уровнем совместимости в SQL Server 2016 (13.x) и больше. Дополнительные сведения см. в разделе Уровень совместимости ALTER DATABASE (Transact-SQL).
Как правило, база данных сразу становится доступной. Однако если база данных SQL Server 2005 (9.x) содержит полнотекстовые индексы, процесс обновления импортирует, сбрасывает или перестраивает индексы в зависимости от параметра параметра полнотекстового обновления сервера. Если выбран режим обновления Импортировать или Перестроить, то полнотекстовые индексы во время обновления будут недоступны. В зависимости от объема индексируемых данных процесс импорта может занять несколько часов, а повторная сборка — до десяти раз дольше.
Если выбран режим обновления Импорт, а полнотекстовый каталог недоступен, то связанные с ним полнотекстовые индексы будут перестроены. Сведения о просмотре и изменении параметра Режим обновления полнотекстового поиска см. в статье Наблюдение за полнотекстовым поиском для экземпляра сервера и управление им.
Сведения о восстановлении SQL Server из хранилища BLOB-объектов Azure см. в статье SQL Server Backup and Restore with Microsoft Azure Blob Storage.
Примеры
О. Восстановление полной резервной копии базы данных
- В обозревателе объектовподключитесь к экземпляру компонента SQL Server Database Engine и разверните его.
- Щелкните правой кнопкой мыши узел Базы данных и выберите команду Восстановить базу данных.
- Чтобы указать источник и расположение восстанавливаемых резервных наборов данных, используйте страницу Общие , раздел Источник . Выберите один из следующих параметров.
- База данных Выберите из раскрывающегося списка базу данных для восстановления. Данный список содержит только базы данных, резервное копирование которых было выполнено в соответствии с журналом резервного копирования msdb .
Заметка Если резервная копия была получена с другого сервера, на целевом сервере не будет журнала резервного копирования для указанной базы данных. В этом случае щелкните пункт Устройство , чтобы вручную указать файл или устройство для восстановления.
- Диалоговое окноВыбор устройств резервного копирования . Носитель данных резервной копии
Выберите тип носителя в раскрывающемся списке Тип носителя данных резервной копии . Примечание. Параметр Лента появляется только в случае, если на компьютере установлен ленточный накопитель, а параметр Устройство резервного копирования — только в случае, если имеется хотя бы одно устройство резервного копирования. Прибавить
В зависимости от типа носителя данных, выбранного в поле Носитель резервной копии , при нажатии кнопки Добавить открывается одно из следующих диалоговых окон. (Если список в поле со списком Тип носителя резервной копии заполнен, кнопка Добавить недоступна.)
Тип мультимедиа Диалоговое окно Description Файл Локальный файл резервной копии В данном диалоговом окне можно выбрать локальный файл из дерева или указать удаленный файл, используя его полное имя в формате UNC. Дополнительные сведения см. в разделе Устройства резервного копирования (SQL Server). Устройство Выбор устройства резервного копирования В данном диалоговом окне из списка можно выбрать логические устройства резервного копирования, определенные на экземпляре сервера. Лента Выбор ленты с резервной копией В этом диалоговом окне можно выбрать из списка ленточных дисков, физически подключенных к компьютеру под управлением экземпляра SQL Server. URL-адрес Выберите расположение файла резервной копии В этом диалоговом окне можно выбрать существующие учетные данные SQL Server или контейнер хранилища Azure, добавить новый контейнер хранилища Azure с подписанным URL-адресом или сформировать подписанный URL-адрес и учетные данные SQL Server для уже существующего контейнера хранилища. См. также статью Соединение с подпиской Microsoft Azure URL-адрес S3 Выбор расположения файла резервного копирования S3 В этом диалоговом окне введите URL-адрес виртуального узла и идентификатор ключа секрета и идентификатор ключа доступа для хранилища объектов, совместимого с S3. Дополнительные сведения см. в статье о резервном копировании и восстановлении SQL Server с хранилищем объектов, совместимым с S3. Удалить
Удаляет один или несколько выбранных файлов, лент или устройств резервного копирования. Contents
Отображает содержимое носителя выбранного файла, ленты или устройства резервного копирования. Эта кнопка может не работать, если тип носителя — URL-адрес. Тип носителя резервной копии
Перечисляет выбранные носители. После добавления устройств в список носителей резервного копирования нажмите кнопку «ОК«, чтобы вернуться на страницу «Общие«.
В списке Источник > Устройство > База данных выберите имя базы данных, которую нужно восстановить.
Данный список доступен, только если выбран параметр Устройство . Будут выбраны только те базы данных, резервные копии которых доступны на выбранном устройстве.
- ПараметрыWITH (необязательно):
- Перезаписать существующую базу данных (WITH REPLACE)
- Сохранить параметры репликации (WITH KEEP_REPLICATION)
- Ограничить доступ к восстановленной базе данных (WITH RESTRICTED_USER)
- Выберите параметр в поле Состояние восстановления . В данном окне определяется состояние базы данных после операции восстановления.
- По умолчанию используется схема RESTORE WITH RECOVERY, которая выполняет откат незафиксированных транзакций и после завершения оставляет базу данных работоспособной. Не удается восстановить дополнительные журналы транзакций. Выберите этот вариант, если выполняется восстановление сразу всех необходимых резервных копий.
- Схема RESTORE WITH NORECOVERY оставляет базу данных в нерабочем состоянии и не выполняет откат незафиксированных транзакций. Можно восстановить дополнительные журналы транзакций. Базу данных нельзя использовать, пока она не будет восстановлена.
- СхемаRESTORE WITH STANDBY оставляет базу данных в режиме только для чтения. С помощью данного параметра можно отменить незафиксированные транзакции и сохранить отмененные действия в резервном файле, чтобы результаты восстановления можно было отменить.
- Создайте резервную копию заключительного фрагмента журнала до восстановления Не для всех сценариев восстановления требуется резервная копия заключительного фрагмента журнала. Дополнительные сведения см. в разделе Сценарии, в которых требуется резервная копия заключительного фрагмента журнала статьи Резервные копии заключительного фрагмента журнала (SQL Server).
- Если имеются активные соединения с базой данных, то операция восстановления может завершиться ошибкой. Проверьте параметр «Закрыть существующие подключения», чтобы убедиться, что все активные подключения между Management Studio и базой данных закрыты. Эта настройка переводит базу данных в однопользовательский режим перед началом процедуры восстановления, а затем возвращает в многопользовательский режим после ее завершения.
- Установите флажок Выдавать запрос перед восстановлением каждой резервной копии , если хотите отследить каждую операцию восстановления. Это не требуется, если не нужно наблюдать за состоянием операции восстановления для базы данных большого объема.
Дополнительные сведения об этих параметрах восстановления см. в разделе «Восстановление базы данных (страница параметров)».
B. Восстановление более ранней резервной копии диска поверх существующей базы данных
В следующем примере восстанавливается более ранняя резервная копия диска из базы данных Sales и перезаписывается существующая база данных Sales .
- В обозревателе объектовподключитесь к экземпляру компонента SQL Server Database Engine и разверните его.
- Щелкните правой кнопкой мыши узел Базы данных и выберите команду Восстановить базу данных.
- На странице Общие выберите пункт Устройство в разделе Источник .
- Нажмите кнопку обзора (. ), чтобы открыть диалоговое окно «Выбор устройств резервного копирования». Выберите «Добавить » и перейдите к резервной копии. Нажмите кнопку «ОК » после выбора файлов резервного копирования дисков.
- Нажмите кнопку «ОК «, чтобы вернуться на страницу «Общие «.
- Выберите параметры в области «Выбор страницы«.
- в разделе Параметры восстановления установите флажок Перезаписать существующую базу данных (WITH REPLACE).
Заметка Если этот параметр не выбран, может отобразиться следующее сообщение об ошибке: «System.Data.SqlClient.SqlError: резервный набор данных содержит резервную копию базы данных, отличающуюся от существующей базы данных Sales . (Microsoft.SqlServer.SmoExtended)»
Заметка Не для всех сценариев восстановления требуется резервная копия заключительного фрагмента журнала. Резервная копия заключительного фрагмента журнала не нужна, если точка восстановления содержится в более ранней резервной копии журнала. Кроме того, резервная копия заключительного фрагмента журнала не требуется при перемещении или замещении (перезаписи) базы данных, при котором не нужно восстанавливать ее на определенный момент времени после создания ее последней резервной копии. Дополнительные сведения см. в разделе Резервные копии заключительного фрагмента журнала (SQL Server).
Заметка Если этот параметр не выбран, может отображаться следующее сообщение об ошибке: «System.Data.SqlClient.SqlError: не удалось получить эксклюзивный доступ, поскольку база данных используется. (Microsoft.SqlServer.SmoExtended)»
C. Восстановление более ранней резервной копии диска с новым именем базы данных при условии, что исходная база данных по-прежнему существует
В следующем примере восстанавливается более ранняя резервная копия диска из базы данных Sales и создается новая база данных с именем SalesTest . При этом исходная база данных, Sales , все еще существует на сервере.
- В обозревателе объектовподключитесь к экземпляру компонента SQL Server Database Engine и разверните его.
- Щелкните правой кнопкой мыши узел Базы данных и выберите команду Восстановить базу данных.
- На странице Общие выберите пункт Устройство в разделе Источник .
- Нажмите кнопку обзора (. ), чтобы открыть диалоговое окно «Выбор устройств резервного копирования». Выберите «Добавить » и перейдите к резервной копии. Нажмите кнопку «ОК » после выбора файлов резервного копирования дисков.
- Нажмите кнопку «ОК «, чтобы вернуться на страницу «Общие «.
- В разделе Назначение , в поле База данных автоматически появится имя базы данных для восстановления. Для изменения имени базы данных введите новое имя в окно База данных .
- Выберите параметры в области «Выбор страницы«.
- В разделе Резервная копия заключительного фрагмента журнала снимите флажокДелать резервную копию заключительного фрагмента журнала перед восстановлением.
Внимание Если оставить этот флажок установленным, существующая база данных Sales сменит состояние на состояние восстановления.
Заметка Если вы получаете следующее сообщение об ошибке:
«System.Data.SqlClient.SqlError: резервная копия заключительного фрагмента журнала для базы данных » Sales » не создана. Если журнал содержит работу, потеря которой нежелательна, создайте резервную копию с помощью инструкции BACKUP LOG WITH NORECOVERY . Чтобы просто перезаписать содержимое журнала, используются предложения WITH REPLACE или WITH STOPAT с инструкцией RESTORE . (Microsoft.SqlServer.SmoExtended)».
Скорее всего, вы не ввели название новой базы данных из шага 6 выше. Восстановление обычно не допускает случайной перезаписи базы данных другой базой данных. Если указанная в инструкции RESTORE база данных уже существует на текущем сервере, а идентификатор GUID семейства для заданной базы данных отличается от идентификатора GUID семейства для базы данных, записанного в резервном наборе данных, то ее восстановление не будет выполнено. Это является важной защитной мерой.
D. Восстановление до точки во времени
В следующем примере база данных восстанавливается в состояние на 1:23:17 PM May 30, 2016 и демонстрируется операция восстановления, использующая несколько резервных копий журналов. База данных в настоящее время не существует на сервере.
- В обозревателе объектовподключитесь к экземпляру компонента SQL Server Database Engine и разверните его.
- Щелкните правой кнопкой мыши узел Базы данных и выберите команду Восстановить базу данных.
- На странице Общие выберите пункт Устройство в разделе Источник .
- Нажмите кнопку обзора (. ), чтобы открыть диалоговое окно «Выбор устройств резервного копирования». Выберите «Добавить » и перейдите к полной резервной копии и всем соответствующим резервным копиям журнала транзакций. Нажмите кнопку «ОК » после выбора файлов резервного копирования дисков.
- Нажмите кнопку «ОК «, чтобы вернуться на страницу «Общие «.
- В разделе «Назначение» выберите временную шкалу, чтобы открыть диалоговое окно «Временная шкала резервной копии», чтобы вручную выбрать точку во времени, чтобы остановить действие восстановления.
- Выберите Указанные дата и время.
- В раскрывающемся списке Интервал временной шкалы поменяйте значение на Час (необязательно).
- Переместите ползунок в нужное время.
- Нажмите кнопку «ОК «, чтобы вернуться на страницу «Общие».
- Нажмите ОК.
Д. Восстановление резервной копии с помощью службы хранилища Microsoft Azure
Общие шаги
В двух примерах ниже выполняется восстановление базы данных Sales из резервной копии, расположенной в службе хранилища Microsoft Azure. Имя учетной записи хранилища — mystorageaccount . Контейнер называется myfirstcontainer . Для краткости первые шесть шагов перечислены здесь однократно, а все примеры начинаются с шага 7.
- В обозревателе объектовподключитесь к экземпляру компонента SQL Server Database Engine и разверните его.
- Щелкните правой кнопкой мыши узел Базы данных и выберите команду Восстановить базу данных.
- На странице Общие выберите пункт Устройство в разделе Источник .
- Нажмите кнопку обзора (. ), чтобы открыть диалоговое окно Выбор устройств резервного копирования.
- Выберите URL-адрес в раскрывающемся списке Тип носителя резервной копии: .
- Выберите » Добавить » и откроется диалоговое окно «Выбор расположения файла резервного копирования».
E1. Восстановление чередующейся резервной копии поверх существующей базы данных при наличии подписанного URL-адреса.
Хранимая политика доступа была создана с правами на чтение, запись, удаление и составление списков. Подписанный URL-адрес, связанный с хранимой политикой доступа, был создан для контейнера https://mystorageaccount.blob.core.windows.net/myfirstcontainer . Шаги, в основном, одинаковы, если учетные данные SQL Server уже существуют. База данных Sales в настоящее время существует на сервере. Файлы резервной копии — Sales_stripe1of2_20160601.bak и Sales_stripe2of2_20160601.bak .
- Выберите https://mystorageaccount.blob.core.windows.net/myfirstcontainer из раскрывающегося списка Контейнер хранилища Azure: , если учетные данные SQL Server уже существуют. В противном случае введите имя контейнера вручную https://mystorageaccount.blob.core.windows.net/myfirstcontainer .
- Введите подписанный URL-адрес в поле форматированного текста Подписанный URL-адрес: .
- Нажмите кнопку «ОК » и откроется диалоговое окно «Найти файл резервной копии» в Microsoft Azure .
- Разверните узел Контейнеры и перейдите к https://mystorageaccount.blob.core.windows.net/myfirstcontainer .
- Удерживая клавишу ctrl, выберите файлы Sales_stripe1of2_20160601.bak и Sales_stripe2of2_20160601.bak .
- Нажмите ОК.
- Нажмите кнопку «ОК «, чтобы вернуться на страницу «Общие «.
- Выберите параметры в области «Выбор страницы«.
- в разделе Параметры восстановления установите флажок Перезаписать существующую базу данных (WITH REPLACE).
- В разделе Резервная копия заключительного фрагмента журнала снимите флажок Делать резервную копию заключительного фрагмента журнала перед восстановлением.
- В разделе Соединения с сервером установите флажок Закрыть существующие подключения к целевой базе данных.
- Нажмите ОК.
E2. Подпись общего доступа не существует
В этом примере Sales база данных в настоящее время не существует на сервере.
- Откроется диалоговое окно «Добавить и подключиться к подписке Майкрософт».
- Выполните диалоговое окно «Подключение к подписке Майкрософт» и нажмите кнопку «ОК «, чтобы вернуть диалоговое окно «Выбор расположения файла резервной копии». См. дополнительные сведения в статье Соединение с подпиской Microsoft Azure .
- Нажмите кнопку «ОК » в диалоговом окне «Выбор расположения файла резервного копирования» и откроется диалоговое окно «Найти файл резервного копирования» в Microsoft Azure .
- Разверните узел Контейнеры и перейдите к https://mystorageaccount.blob.core.windows.net/myfirstcontainer .
- Выберите файл резервной копии и нажмите кнопку «ОК«.
- Нажмите кнопку «ОК «, чтобы вернуться на страницу «Общие «.
- Нажмите ОК.
Е. Восстановление локальной резервной копии в хранилище Microsoft Azure (URL)
База данных Sales будет восстановлена в контейнер хранилища Microsoft Azure https://mystorageaccount.blob.core.windows.net/myfirstcontainer из резервной копии, расположенной по адресу E:\MSSQL\BAK . Учетные данные SQL Server для контейнера Azure уже созданы. Учетные данные SQL Server для целевого контейнера уже должны существовать, так как его невозможно создать с помощью задачи восстановления . База данных Sales в настоящее время не существует на сервере.
- В обозревателе объектовподключитесь к экземпляру компонента SQL Server Database Engine и разверните его.
- Щелкните правой кнопкой мыши узел Базы данных и выберите команду Восстановить базу данных.
- На странице Общие выберите пункт Устройство в разделе Источник .
- Нажмите кнопку обзора (. ), чтобы открыть диалоговое окно «Выбор устройств резервного копирования».
- Выберите файл из типа носителя резервного копирования: раскрывающийся список.
- Откроется диалоговое окно «Добавить» и «Найти файл резервного копирования».
- Перейдите к E:\MSSQL\BAK , выберите файл резервной копии и нажмите кнопку «ОК«.
- Нажмите кнопку «ОК «, чтобы вернуться на страницу «Общие «.
- Выберите «Файлы» в области «Выбор страницы«.
- Установите флажок Переместить все файлы в папку.
- Укажите контейнер, https://mystorageaccount.blob.core.windows.net/myfirstcontainer , в текстовых полях Папка файла данных: и Папка файлов журнала:.
- Нажмите ОК.
G. Восстановление локальной резервной копии из хранилища объектов, совместимого с S3 (URL-адрес S3)
В приведенном ниже примере выполняется восстановление Sales из резервной копии, расположенной в хранилище объектов, совместимом с S3.
URL-адрес S3 имеет формат s3://:// , а файл резервной копии называется Sales.bak . Идентификатор секретного ключа и идентификатор ключа доступа получены от поставщика S3. База данных Sales в настоящее время не существует на сервере.
- В обозревателе объектовподключитесь к экземпляру компонента SQL Server Database Engine и разверните его.
- Щелкните правой кнопкой мыши узел Базы данных и выберите команду Восстановить базу данных.
- На странице Общие выберите пункт Устройство в разделе Источник .
- Нажмите кнопку обзора (. ), чтобы открыть диалоговое окно «Выбор устройств резервного копирования».
- Выберите URL-адрес S3 из типа носителя резервного копирования: раскрывающийся список.
- Нажмите кнопку «Добавить«, чтобы открыть диалоговое окно «Выбор файла резервного копирования S3″.
- Введите расположение файла резервного копирования URL-адреса S3 и секретный ключ и ключ доступа.
- Нажмите ОК.
- Нажмите кнопку «ОК «, чтобы вернуться на страницу «Общие «.
- Нажмите ОК.
См. также
- Создание резервной копии журнала транзакций (SQL Server)
- Создание полной резервной копии базы данных (SQL Server)
- Восстановление базы данных в новое расположение (SQL Server)
- Восстановление резервной копии журнала транзакций (SQL Server)
- RESTORE (Transact-SQL)
- Восстановление базы данных (страница «Параметры»)
- Восстановление базы данных (страница «Общие»)
Восстановление резервной копии базы 1С на MS SQL
В этой статье рассмотрим, как происходит восстановление резервной копии базы 1С на MS SQL, а также то, как проверять работоспособность резервных копий.
Восстановление резервной копии базы
1. Запустите Среду SQL Server Menegement Studio:
2. Укажите Имя пользователя и пароль, а затем нажмите «Соединить»:

3. Найдите в списке баз ту базу, которую хотите восстановить из бэкапа:

4. Нажмите на нее правой кнопкой мыши и выберите «Задачи»/ «Восстановить»/ «База данных…»:

5. Убедитесь, что в поле «К моменту времени» указано «Самый последний», в поле «Из базы данных» указана ваша база данных и в списке «Выберите резервные наборы данных для восстановления» установлен флажок. Затем нажмите «ОК»:

6. Подождите, пока база восстановится:

7. Когда увидите вот такое окошко, просто нажмите «ОК»

Поздравляем! Вам только что удалось восстановить резервную копию базы!

Внимание!

Периодически, хотя бы раз в 2 недели, проверяйте, что резервные копии являются рабочими.
Проверка резервных копий:
Создайте клиент-серверную базу, в которую будете разворачивать копии рабочей базы.
Чтобы развернуть рабочую базу в базу для проверки резервных копий, необходимо повторить шаги 1-4 для новой базы, но в шаге 5 в поле «Из базы данных» выбрать рабочую базу:


Проверьте, что вы в тестовую базу восстанавливаете рабочую, а не наоборот! В поле «В базу данных» должна быть база для проверки бэкапов, а в поле «Из базы данных» ваша рабочая база!
Нажмите «ОК» и подождите окончания восстановления.
Теперь можете открыть тестовую базу в режиме «1С предприятие» и проверить ее работоспособность и наличие в ней свежих данных (например, новых заказов).
Если данные на месте, то ваши резервные копии в полном порядке!
- ТЕГИ
- Администрирование 1С
Резервное копирование и восстановление БД
Резервная копия может быть создана как средствами ПО, так и через SQL Server Management Studio.
Использование средств ПО RusGuard
Для того чтобы создать резервную копию БД:
1. Запустите утилиту Управление данными системы RusGuard Управление данными системы RusGuard (меню Пуск ОС Windows > список Все программы > папка RusGuard ).
Загрузится окно утилиты. По умолчанию открыта вкладка Обслуживание (см. рис. 1).

Рисунок 1 — Окно Утилиты «Управление данными системы RusGuard»

2. Нажмите на кнопку в области Резервное копирование и восстановление .
Откроется стандартный диалог Windows для сохранения файла резервной копии в формате .bak .
3. Введите имя файла, укажите, где он должен быть сохранен, подтвердите сохранение.
Система обратится к БД и выполнит резервное копирование.
Для того чтобы восстановить резервную копию:
1. Запустите утилиту Управление данными системы RusGuard Управление данными системы RusGuard (меню Пуск ОС Windows > в список Все программы > папка RusGuard ).
Загрузится окно. По умолчанию открыта вкладка Обслуживание .

2. Нажмите на кнопку в области Резервное копирование и восстановление .
3. Выберите нужный файл резервной копии и откройте его.
4. После восстановления обязательно проверьте совместимость с версией БД (кнопка
). Запустите процесс обновления в случае положительного ответа (кнопка
).
Использование SQL Server Management Studio
Если необходимо выполнить восстановление резервной копии на ПК с другой конфигурацией, используйте утилиту Microsoft SQL Server Management Studio (доступна через меню Пуск ).
Для того чтобы создать резервную копию БД:
1. Запустите SQL Server Management Studio.
2. Перейдите к пункту Базы данных > База данных RusGuard (т.е. установите курсор на папку с базой данных СКУД).
3. Вызовите контекстное меню и выберите пункты Задачи > Создать резервную копию (см. рис. 2).

Рисунок 2 — Окно Утилиты SQL Server Management Studio. Создание резервной копии
4. Укажите путь для создания резервной копии.
• В файле резервной копии содержатся данные об имени ПК, имени экземпляра SQL-сервера и пути к файлам базы данных того ПК, на котором была сформирована данная копия. Поэтому корректное восстановление возможно только на этом же ПК, или на ПК имеющем абсолютно идентичную конфигурацию.
• Не сохраняйте резервные копии на Рабочем столе или в корневом каталоге ПК.
Для того чтобы восстановить резервную копию БД:
5. Запустите SQL Server Management Studio.
6. Перейдите к пункту Базы данных .
7. Вызовите контекстное меню и выберите пункты Задачи > Восстановить .
8. Выберите файл с резервной копией и установите настройки как показано ниже (см. рис. 3, 4, 5 и 6). Нажмите на кнопку ОК .

Рисунок 3 — Окно Утилиты SQL Server Management Studio. Восстановление резервной копии

Рисунок 4 — Окно Утилиты SQL Server Management Studio. Восстановление резервной копии

Рисунок 5 — Окно Утилиты SQL Server Management Studio. Восстановление резервной копии

Рисунок 6 — Окно Утилиты SQL Server Management Studio. Восстановление резервной копии
Обратите внимание , что резервную копию нельзя восстановить с сетевого диска. Она должна находиться на локальном компьютере.
Перенос базы данных в более старую версию MS SQL Server

У вас есть база данных MS SQL Server, которую нужно перенести на другой физический комп. Вы уже сделали бэкап и радостно приступаете к восстановлению. Но тут обнаруживается, что на том компе, куда нужно перенести базу, установлена более старая версия MS SQL Server. Stack Overflow уверяет вас, что всё плохо. Но так ли это на самом деле?
Конечно, перенос базы из более новой версии в старую — это не классический и не самый правильный сценарий работы. Но зачастую базы данных создаются такими, что они поддерживают все более новые версии SQL, начиная с какой-то, например с 2008 R2, т.к. прямая совместимость у MS SQL более чем отличная. И, например, ваш клиент уже поставил себе MS SQL 2016, а у вас на тестовом сервере для разработки стоит MS SQL 2014. А вы хотите развернуть себе базу клиента, чтобы разобраться, где у него путаница с данными.
Microsoft открестились от проблемы — мол нет у них обратной совместимости, и баста. Резервную копию, созданную в более новом сервере, невозможно восстановить на более старом сервере. Да, у них есть инструменты типа DTS, копирование базы, экспорт-импорт и т.п. Но они настолько неудобны и громоздки, что нормальный перенос большой БД с множеством таблиц сделать с их помощью не особо удобно. Во всяком случае лично у меня не получилось.
Да, можно сгенерировать SQL-скрипты всей базы, включая данные. Но представьте, у вас в базе куча блоб-полей с большими данными, и вообще размер всей базы 500+ ГБ. Представляете, сколько будет занимать такой скрипт, сколько времени он будет генерироваться и исполняться.
Итак, задача — в точности воссоздать базу данных (структуру и данные) из новой версии MS SQL сервера в более старой версии. Я придумал довольно простое решение, которым хочу поделиться. Конечно, данное решение обладает значительным количеством ограничений, но всё же на мой взгляд это лучше, чем DTS и скрипты.
Ограничение номер один заключается в том, что вам нужен доступ через MS SQL Management Studio к обоим серверам — старому и новому. Если это не возможно, то должна быть возможность на той машине, откуда нужно перенести базу, установить ту версию SQL, в которую нужно перенести базу, чтобы перенести базу сначала в эту версию локально, а потом уже перетащить её через бэкап или непосредственно через *df файлы базы данных (через Detach/Attach) на новую машину (версия SQL Server’а в этом случае уже будет совпадать).
Еще одним ограничением является то, что вам будет необходим скрипт схемы базы данных (всех объектов, включая таблицы, индексы, констрейнты, хранимые процедуры, триггеры и т.п.) без данных, причем инструкции создания Foreign Key Constraints должны в этом скрипте идти в самом конце, отдельно от скрипта создания самих таблиц.
Опишу кратко сам алгоритм переноса данных. Все действия выполняются в сеансе Management Studio, подключенной к серверу, на который нужно перенести базу.
1) На новом сервере создаем пустую базу данных с такими же файлами и файловыми группами, как переносимая база.
2) Скриптом схемы базы данных создаем все объекты базы (таблицы, индексы, представления, триггеры, хранимые процедуры и функции), но без создания Foreign Key Constraints. Создавать FK на этом этапе нельзя, т.к. они будут мешать вставке данных.
3) Подключаем базу данных, из которой будем переносить данные, в качестве Linked Server’а, чтобы можно было использовать в запросах к новой базе данных обращения к старой базе данных.
EXEC sp_addlinkedserver @server=N'LinkedServerAlias', @srvproduct=N'', @provider=N'SQLNCLI', @datasrc=N'LinkedServerHost\LinkedServerName'; EXEC sp_addlinkedsrvlogin 'LinkedServerUser', 'false', null, 'RealUser', 'RealUserPassword';
4) Т.к. структуры баз совпадают, воспользуемся встроенной хранимой процедурой sp_msforeachtable, которая позволяет выполнить запрос над каждой таблицей БД, чтобы сгенерировать скрипт переноса данных из старой базы в новую через запрос вида
INSERT INTO ? SELECT * FROM ?
Вместо знака вопроса sp_msforeachtable подставляет имя каждой таблицы и выполняет запрос несколько раз (по одному разу на каждую таблицу).
Здесь я натолкнулся на самое большое количество граблей.
а) Проблема номер один заключается в том, что для таблиц с IDENTITY-полями необходимо вызывать:
SET IDENTITY_INSERT ON; --INSERT INTO . (сама вставка); SET IDENTITY_INSERT OFF;
б) Проблема номер два заключается в том, что на таблицах, в которых нет IDENTITY-полей, делать данный вызов нельзя, поэтому требуется динамически определять, есть в таблице IDENITY-колонка или нет.
Это можно сделать таким запросом:
SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE (TABLE_NAME='SomeTable') AND (COLUMNPROPERTY(object_id('dbo.SomeTable'), COLUMN_NAME, 'IsIdentity') = 1)
в) Проблема номер три заключается в том, что, как оказалось, в режиме IDENITY_INSERT ON нельзя делать
INSERT INTO . SELECT * FROM .
, а нужно перечислять конкретные поля.
Перечислить поля таблицы в строку можно таким запросом:
SELECT SUBSTRING( (SELECT ', ' + QUOTENAME(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'SomeTable' ORDER BY ORDINAL_POSITION FOR XML path('')), 3, 200000);
4) Генерируем скрипт вставки по все таблицы:
Процедура генерации скрипта
EXEC sp_msforeachtable N' DECLARE @command varchar(MAX); DECLARE @name varchar(200); SET @name=''?''; SET @name = SUBSTRING(@name, 8, LEN(@name)-8); SET @command = ''''; SELECT @command= SUBSTRING( (SELECT '', '' + QUOTENAME(COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '''' + @name + '''' ORDER BY ORDINAL_POSITION FOR XML path('''')), 3, 200000); SET @command = ''INSERT INTO ''+ @name +'' (''+ @command + '') SELECT '' + @command + '' FROM '' + ''LinkedServerAlias.SourceDatabase.'' + ''?''; SET @command= ''IF EXISTS (select * from INFORMATION_SCHEMA.COLUMNS where (TABLE_NAME='''''' + @Name + '''''') AND (COLUMNPROPERTY(object_id(''''dbo.''+@Name+''''''), COLUMN_NAME, ''''IsIdentity'''') = 1)) SET IDENTITY_INSERT '' + @name + '' ON; '' +@command; SET @command=@command+'';'' + ''IF EXISTS (select * from INFORMATION_SCHEMA.COLUMNS where (TABLE_NAME='''''' + @Name + '''''') AND (COLUMNPROPERTY(object_id(''''dbo.''+@Name+''''''), COLUMN_NAME, ''''IsIdentity'''') = 1)) SET IDENTITY_INSERT '' + @name + '' OFF;''; PRINT (@command); --EXEC(@command); // Если раскомментировать, скрипт будет сразу исполняться, а не только выводиться на экран '
5) Исполняем сгенерированный скрипт переноса данных
6) Исполняем скрипт на создание всех Foreign Key Constraints (теперь уже можно).
7) Готово! Вы перенесли базу из нового сервера SQL в старый, хоть это и считалось невозможным. Причем перенос осуществляется всего лишь раза в полтора медленнее, чем скорость передачи данных по сети, т.е. довольно быстро.
8) Прибираемся за собой (отключаем Linked Server):
EXEC sp_droplinkedsrvlogin 'LinkedServerUser', null; sp_dropserver 'LinkedServerAlias';
1) Подобным методом не получится перенести таблицы, в которых есть колонки с типом XML.
Наверняка есть множество других ограничений, т.к. в той базе, которую я переносил подобным способом, не использовалось множество возможностей SQL-сервера. Вы можете написать об ограничениях в комментариях, и я дополню ими статью.
Спасибо за внимание! Надеюсь, кому-то поможет.
- Системное администрирование
- Серверное администрирование
- Microsoft SQL Server
- Администрирование баз данных
- Разработка под Windows
