Перенос базы данных на другой SQL-сервер

Материал из Alta-Soft Wikipedia
Версия от 21:12, 17 октября 2017; Sidyakin (обсуждение | вклад) (2. Перенос базы данных Альта-ГТД вместе с дополнительными базами ЭД)
Перейти к навигации Перейти к поиску

Иногда возникает необходимость перенести SQL базу данных с одного SQL-сервера на другой. Обычно процесс переноса данных заключается в создании резервной копии базы данных и восстановлении ее на другом SQL-сервере. Однако, казалось бы, в такой простой операции могут возникать разного рода трудности. В данной статье мы попробуем разобраться с некоторыми из них.

1. Если база данных с таким именем уже существует

Если при переносе базы данных обнаружится, что база данных с таким именем уже существует, или при восстановлении возникает ошибка, что файл базы данных с таким именем уже существует, требуется вручную указать новое имя базы данных и/или папку, в которой будут размещаться физические файлы БД. Это можно сделать в SQL Server Managment Studio, указав при восстановлении новое имя базы данных на закладке Общие

Restore db 1.png

и папку, в которой должны будут размещаться файлы БД (закладка Файлы)

Restore db 2.png


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 и т.д.