none
Microsoft Sql Server Migration Assistant for MySQL - средство для легкого переезда с MySQL на Sql Server RRS feed

  • Общие обсуждения

  • Microsoft Sql Server Migration Assistant for MySQL - средство для легкого переезда с MySQL на Sql Server

    Иногда возникают такие ситуации, когда проект, работающий на MySQL, разрастается настолько, что возникает необходимость перехода на более серьезные сервера баз данных. Ранее разработчики в таких ситуациях писали утилиты по переносу данных самостоятельно. При этом возникали различные проблемы - нужно было находить ближайшие соответствия типов данных, ключей, индексов и т.п.
    Microsoft выпустила утилиту, которая позволяет практически полностью автоматизировать перенос данных с MySQL на SQL Server. Поддерживаются SQL Server 2005, 2008 и SQL Azure.
    Программа автоматически конвертирует типы данных в ближайшие совместимые, а также переносит ключи и индексы.
    Рассмотрим ее работу на примере реального веб-приложения - форума PhpBB 3.

    Исходные данные

    Имеется форум PhpBB 3, который настроен на IIS7 и работает с MySql 5.1:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    В конфигурационном файле видно, что работа осуществляется с базой данных forum2 (параметр $dbname ):

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Зайдя через MySql Query Brower в структуру базы данных forum2 , можно увидеть список таблиц:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Подготовка к переносу

    Предположим, что мы хотим перенести базу данных форума на SQL Server 2008 Express. Создадим логическую базу данных forum , а так же учетную запись forum , под которой движок форума будет подключаться к БД:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Перенос структуры базы данных

    Загружаем с сайта Microsoft саму утилиту (версия для SQL Server 2008 , версия для SQL Server 2005 ). Утилита бесплатна, но для ее активации нужно получить лицензионный код - сделать это можно через учетную запись Live ID.
    Запускаем программу:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Слева от основной рабочей области видно два окна: просмотр метаданных у MySQL-сервера и у SQL Server. С ними мы будем активно работать.
    Сверху над ними находятся кнопки подключения к серверам баз данных. 
    Для начала создаем новый проект:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Затем подключаемся к MySQL:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Далее подключаемся к SQL Server:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    После подключения заполняются окна с метаданными обоих серверов:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Можно видеть базу данных forum2 в MySQL, которую мы будем переносить, и базу данных forum в SQL Server, в которую будут записаны данные.
    Отмечаем галочкой базу данных, которую хотим перенести:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    В основной рабочей области показывается главная вкладка: Schema Mapping. В ней показан план переноса - откуда и куда он будет выполнен.
    Стоит отметить одну особенность: при работе с программой считается, что в понятие "схема" применительно к MySql входит название базы данных, а применительно к SQL Server - название базы данных и конкретная схема в ней (по умолчанию используется схема dbo).
    Изначально утилита предлагает перенос в базу данных с таким же именем, как и исходная (forum2). Но, поскольку перенос будет осуществляться в базу данных с именем forum, а не forum2, нажимаем кнопку Modify и корректируем схему назначения:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Кроме того, перейдя на вкладку Type Mapping можно посмотреть (и скорректировать) соответствие типов данных при переносе:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    После этого можно приступать к конвертации. Кликнув правой кнопкой на объекте переноса (базе данных forum2), выбираем Convert Schema:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Программа приступает к конвертации:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    После завершения операции выводится отчет в стандартном стиле сред разработки:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    На данный момент сами таблицы физически еще не созданы - подготовлен лишь скрипт, который их создаст. Кликнув правой кнопкой по объекту переноса и выбрав Create Report, можно получить небольшой отчет:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Кроме того, можно сохранить и SQL-скрипт создания таблиц, выбрав пункт Save as Script все по тому же правому клику на переносимом объекте. Результат сохраняется в виде SQL-файла:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Как было сказано ранее, Convert Schema физически не проводит операцию создания таблиц в базе назначения. Чтобы выполнить физическое создание, кликнем по конечной базе данных правой кнопкой мыши и выберем Synchronize with Database. Эта операция выполнит сравнение структуры таблиц, находящихся в базе данных со структурой, созданной нами при конвертации, и создаст недостающие объекты. 

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Кликнув на указанный пункт меню, получаем следующее диалоговое окно:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Синяя стрелка здесь обозначает, что будет выполнена операция отображения локальной структуры (то, что мы получили в результате конвертации) на базу данных назначения. Возможны и другие варианты - например, в случае, если часть таблиц уже существует. Расшифровку всех операций синхронизации можно получить, кликнув на кнопку с красно-зелено-синей полоской. 
    Нажав ОК, запускаем процесс создания таблиц:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Открыв базу данных forum в SQL Management Studio, убедимся, что таблицы появились:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Перенос данных

    После того, как структура таблиц была перенесена, можно выполнить и перенос данных в таблицах.
    Для этого выбираем исходный объект (в нашем случае - базу данных), кликаем по нему правой кнопкой и используем пункт Migrate Data:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Для выполнения этой операции утилита должна заново выполнить подключение к базам данных. Соответствующие диалоги выводятся автоматически. Подключаемся к MySQL:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Подключаемся к SQL Server:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    После этого утилита выполнит процедуру переноса данных автоматически. По завершению выводится отчет:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Используя SQL Management Studio, убедимся в том, что данные перенеслись:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Перевод форума на использование SQL Server Express

    После того, как мы перенесли все таблицы и данные, осталось только внести правки в форум. Поскольку в нашем случае используется PhpBB 3, умеющий работать с SQL Server-ом, достаточно лишь поменять соответствующие строчки в конфигурационном файле:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    К сожалению, во многих других случаях придется вносить изменения в программный код. Так, например, для ограничения числа возвращенных записей в MySQL используется оператор LIMIT, а в SQL Server - TOP. Попытка выполнения запроса вида SELECT * FROM MyTable LIMIT 10, 40 в SQL Server вызовет ошибку.

    После изменения конфигурационного файла проверим работоспособность форума:

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Перенос базы данных с помощью Microsoft Sql Server Migration Assistant for MySQL

    Как видно, все данные полностью сохранились и корректно отображаются. На этом процесс переноса данных завершен.
    18 марта 2010 г. 21:39
    Модератор