Перенос базы данных на другой SQL-сервер
Иногда возникает необходимость перенести SQL базу данных с одного SQL-сервера на другой. Обычно процесс переноса данных заключается в создании резервной копии базы данных и восстановлении ее на другом SQL-сервере. Однако, казалось бы, в такой простой операции могут возникать разного рода трудности. В данной статье мы попробуем разобраться с некоторыми из них.
1. Если база данных с таким именем уже существует
Если при переносе базы данных обнаружится, что база данных с таким именем уже существует, или при восстановлении возникает ошибка, что файл базы данных с таким именем уже существует, требуется вручную указать новое имя базы данных и/или папку, в которой будут размещаться физические файлы БД. Это можно сделать в SQL Server Managment Studio, указав при восстановлении новое имя базы данных на закладке Общие
и папку, в которой должны будут размещаться файлы БД (закладка Файлы)
2. Перенос базы данных Альта-ГТД вместе с дополнительными базами ЭД
Если требуется перенести базу данных Альта-ГТД вместе с дополнительными базами ЭД, то необходимо:
1. Создать средствами программы Альта-ГТД резервную копию базы данных вместе с дополнительными базами. Для этого необходимо выполнить Сервис - Администратор SQL - Бэкап SQL базы данных, после чего утвердительно ответить на вопрос о необходимости резервного копирования дополнительных ЭД-баз. После того, как операция по созданию резервных копий дополнительных баз будет завершена, программа выдаст информационное окно с описанием всех созданных бэкап-файлов. Эти файлы, а также бэкап-файл рабочей базы данных необходимо перенести на другой SQL-сервер.
2. Восстановить базы данных из резервных копий. Если на сервере уже имеется БД с таким названием, то ее необходимо восстановить с другим названием (см. п.1).
3. Если при восстановлении была переименована рабочая база данных, тогда необходимо для всех дополнительных баз выполнить скрипт:
UPDATE [Имя_Доп_Базы].[dbo].[Version] SET [Program] = '_gtd_ed@Имя_Основной_Базы'
4. Если при восстановлении была переименована одна или несколько дополнительных баз, то для каждой из них необходимо выполнить скрипт
UPDATE [Имя_Основной_Базы].[dbo].[EdMsgs] SET [MsgDB] = 'Новое_Имя_Доп_Базы' WHERE [MsgDB] = 'Старое_Имя_Доп_Базы'
3. Если перенос производится на SQL-сервер более младшей версии
Перенос базы данных с SQL-сервера более старшей версии на SQL-сервер более младшей версии стандартными средствами (посредством резервного копирования или переноса физических файлов) невозможен.
В идеале, конечно же, лучше избегать подобных ситуаций. Однако, если такая потребность все же возникла, существует ручной метод переноса данных с помощью мастера импорта-экспорта, встроенного в SQL Server Managment Studio (оба сервера при этом должны находиться в одной сети).
Порядок действия следующий:
1. Сформировать скрипт исходной базы. Для этого в SQL Server Managment Studio нужно выполнить Задачи - Сформировать скрипты. Выбрать Таблицы. В следующем окне нажать Дополнительно, и установить атрибут "Внести в скрипт индексы". Сохранить скрипт в файл.
2. Далее необходимо определить порядок переноса данных, для чего выполнить команду:
exec sp_MSdependencies
3. Создать новую базу данных на "младшем" SQL-сервере, и там выполнить сформированный в п.1 скрипт.
4. На "старшем" сервере открыть Задачи - Экспорт данных. В открывшемся визарде необходимо указать сначала параметры подключения к исходной базе, а затем к конечной базе. В качестве источника данных можно выбрать SQL Native Client или Microsoft OLE DB Provider for SQL Server. На следующей странице необходимо выбрать "Скопировать данные...".
5. В порядке, определенном в п.2, необходимо отметить таблицы для переноса с oSequence равным 1. Для выделенных таблиц с признаком IDENTITY (определить поиском по скрипту) дополнительно необходимо нажать кнопку Изменить и в открывшемся окне установить флаг "Разрешить вставку в столбец идентификаторов". После того, как все таблицы будут отмечены, нажать Готово.
6. Повторить пп.4-5 для oSequence, равный 2, 3 и т.д.