Последняя версия SQL Server под кодовым именем «Denali» обладает массой привлекательных функций и наверняка подвигнет многие компании к переходу на SQL Server. Несмотря на высокую производительность и привлекательную совокупную стоимость владения (TCO) SQL Server, многие организации не спешат переходить на SQL Server, опасаясь затрат и рисков, связанных с миграцией баз данных.
К счастью, Microsoft предоставляет специальное средство, SQL Server Migration Assistant (SSMA), для автоматизации процесса миграции. Последняя версия SSMA v.5.1 (выпущена одновременно с выходом SQL Server Denali CTP3) поддерживает миграцию с баз данных Oracle, Sybase, MySQL и Access на SQL Server. Вы можете задействовать SSMA для облегчения реализации проекта по миграции баз данных. В качестве примера посмотрим на процесс миграции с базы данных Oracle — в других СУБД процесс и этапы миграции совпадают.
Доступ к базе данных
SSMA автоматизирует миграцию большинства объектов базы данных, в том числе хранимых процедур, функций, пакетов и триггеров. Текущая версия SSMA поддерживает все типы данных за исключением нескольких специальных объектных и пространственных типов. Кроме того, возможно не удастся автоматически преобразовать некоторые сложные инструкции PL/SQL. SSMA можно использовать для оценки миграции вашей базы данных Oracle и выяснения, содержит ли она такие инструкции.
Сводные отчеты оценки содержат следующую информацию:
- Schema tree view: список объектов исходной схемы базы данных Oracle.
- Conversion rate: процентная доля инструкций, которые SSMA в состоянии преобразовать автоматически. В данном примере (рис. 1) SSMA может преобразовать 99,39 % всех инструкций и исходной схемы Oracle.
- Object count: число объектов базы данных, найденных в схеме Oracle и число объектов «с ошибками» (мы поговорим о них чуть позже).
- Conversion Message summary:описание проблем, обнаруженных при миграции исходной схемы Oracle.
Рис. 1. Оценка возможности преобразования при миграции базы данных Oracle
Существует три типа сообщений, с которыми вы можете столкнуться при миграции средствами SSMA: ошибка, предупреждение и информационное сообщение.
- Сообщение об ошибке появляется, когда SSMA не в состоянии преобразовать объект базы данных или инструкцию в объекте базы данных.
- Предупреждение отображается, когда SSMA удается преобразовать инструкцию Oracle, но полученная в результате преобразования инструкция в некоторых случаях может не возвращать тот же результат, что и исходная. В частности, SSMA преобразует SUBSTR() в Oracle в инструкцию SUBSTRING() в SQL Server. В большинстве случаев SUBSTRING() возвращает такие же результаты. Но в некоторых ситуациях результаты могут отличаться. Например, функция SUBSTR() в Oracle поддерживает отрицательные позиции символов в строке. В Oracle выражение SUBSTR(‘TechNet’,-3,3) вернет «Net», а результатом выполнения SUBSTRING(‘TechNet’,-3,3) в SQL Server будет пустая строка.
- Информационное сообщение служит SSMA для информирования пользователя об особенностях преобразования некоторых объектов.
В каждом сообщении об ошибке содержится ссылка на объект, вызвавший ошибку. Есть также представление, в котором можно непосредственно сравнить исходные инструкции слева и результат преобразования справа (рис. 2). Сообщение об ошибке также содержит оценку, сколько часов ручного преобразования обычно требуется для решения проблемы.
Рис. 2. Примеры сообщений об ошибках миграции
В большинстве организаций часто выполняют оценку нескольких схем баз данных Oracle. Они используют общую скорость преобразования и общую оценку времени ручного преобразования для сравнения и приоритизации схемы БД Oracle для миграции.
Преобразование схемы БД
SSMA предоставляет много вариантов преобразования схемы. Например, можно изменить сопоставление типов данных. SSMA предоставляет сопоставление типов данных между Oracle и SQL Server по умолчанию. Однако вы можете изменить сопоставление типов в одной или всех таблицах, для конкретного объекта (такого как хранимая процедура или функция) или для конкретного применения (например, тип данных в столбце, в переменной или в входном или выходном параметре процедуры).
Преобразование схемы базы данных запускается щелчком кнопки Convert Schema. После этого можно перейти к другому объекту БД и сравнить исходный и преобразованный объект схемы (рис. 3).
Рис. 3. Представление преобразования схемы
Если в объекте есть инструкция, которую SSMA не в состоянии преобразовать автоматически, программа добавит описание ошибки миграции, прокомментирует данную инструкцию или заменит ее общим типом. Подход, основанный на изоляции, позволяет продолжить миграцию базы данных и разобраться с проблемой позже.
Вы также можете разрешить проблему и изменить инструкция непосредственно в SSMA. Например, на рис. 3 приведена пользовательская функция TENURE, которая возвращает данные типа INTERVAL, который SQL Server не поддерживает. Вы можете изменить тип возвращаемого значения на NUMBER (рис. 4) и повторить преобразование функции. Это решает проблему и приводит к преобразованию типа возвращаемого значения к float(53).
Рис. 4. В SSMA можно менять инструкции для разрешения проблем несовместимости
Также можно менять преобразованные инструкции. Например, можно заменить тип возвращаемого значения с float(53) на INT. Заметьте, что все изменения, выполняемые в SSMA, хранятся локально. Изменения, вносимые в исходные инструкции, не применяются к производственной схеме базы данных Oracle. Аналогично любые изменения, вносимые в результирующие инструкции SQL Server, не сразу применяются на сервере. Это позволяет вносить исправления и усовершенствования в преобразованную схему, не влияя на целевой сервер.
Чтобы развернуть преобразованную схему на целевом SQL Server, щелкните правой кнопкой имя схемы в окне SQL Server Metadata Explorer. Можно также сгенерировать сценарий создания всей схемы, который можно выполнить на целевом сервере (рис. 5).
Рис. 5. Развертывание преобразованной схемы на SQL Server
Миграция данных
После создания схемы БД на целевом сервере SQL Server можно использовать SSMA для миграции данных Oracle. Однако SSMA не единственная возможность миграции данных — для этого можно также задействовать службы SQL Server Integration Services (SSIS). Вместе с тем, в SSMA можно при миграции данных использовать то же сопоставление типов, что и для преобразования схемы. SSMA также решает стандартные проблемы миграции данных из Oracle в SQL Server.
Например, Oracle поддерживает более широкий диапазон типов дат, чем SQL Server. По умолчанию при обнаружении такой ситуации SSMA инициирует ошибку миграции данных. Можно настроить SSMA так, чтобы оно автоматически преобразовывало выходящие за пределы диапазона значения дат в NULL или к ближайшей поддерживаемой SQL Server дате. Чтобы изменить этот параметр, последовательно выберите Tools/Project Setting/General/Data Migration (рис. 6).
Рис. 6. Варианты обработки ошибок миграции данных
По завершении миграции данных SSMA отображает отчет с указанием числа перенесенных строк, долю успешно смигрированных записей и время, потраченное на миграцию каждой таблицы (рис. 7).
Рис. 7. SSMA предоставляет полный отчет о миграции данных
Проверка миграции данных
После успешной миграции базы данных надо проверить ее. При миграции с Oracle или Sybase средство SSMA позволяет сравнить исходную и смигрированную базы данных. Вы можете задать набор проверок, после чего SSMA выполнит их в исходной и смигрированной базах данных. Оно сравнит результаты, а также все изменения, которые проверки внесли в таблицы.
Чтобы задать проверку, выберите New Test Cases в меню Tester. Откроется мастер создания проверок (Test Case Wizard), который позволит создать проверочные тесты. Можно также выбрать для проверки отдельные объекты БД. Например, есть процедура, которая называется ADD_EMPLOYEE. Она вставляет новую запись в таблицу сотрудников, основываясь на значении, переданном во входном параметре. Конкретные входные значения, которые должны использоваться в проверке, задаются на вкладке Call Values (рис. 8). Можно задать столько проверочных значений, сколько нужно.
Рис. 8. Определение проверочных значений в мастере создания проверок
Помимо сравнения проверочного выполнения SSMA может также проверять изменения в соответствующей таблице. Например, при выполнении хранимой процедуры ADD_EMPLOYEE сервер SQL Server вставляет дополнительную строку в таблицу EMPLOYEES. SSMA сравнивает измененные строки в таблице между источником и приемником. При необходимости можно также указать уровень детализации сравнения (рис. 9).
Рис. 9. Определение базовых таблиц для сравнения
Последний этап определения проверки — задание дополнительных параметров. Один из важных параметров — указание, надо ли откатывать изменения, внесенные в таблицу в процессе проверки (рис. 10). В нашем примере при выполнении хранимой процедуры ADD_EMPLOYEE в обе базы данных — источника в Oracle и приемника в SQL Server — вносится новая запись. Если выбрать вариант отката изменений в данных, по завершении проверки SSMA удалит вставленную запись.
Рис. 10. Определение параметров проверки
Созданную проверку можно запускать столько раз, сколько нужно. При каждом запуске проверки вы будете получать отчет, содержащий сравнение результатов (рис. 11).
Рис. 11. SSMA предоставляет полный отчет о результатах работы
SSMA предоставляет широкий набор средств автоматизации миграции баз данных. Это средство можно использовать для оценки сложности базы данных, которую планируется мигрировать, преобразования схемы базы данных, решения популярных проблем, возникающих при миграции баз данных, миграции данных из БД-источника и проверки смигрированной базы данных.
SSMA предназначен для миграции в SQL Server, то также поддерживает прямую миграцию на SQL Azure (с баз данных MySQL, Sybase и Access). При миграции в SQL Azure средство SSMA учитывает требования платформы SQL Azure. Например, в SQL Azure требуется, чтобы в таблицах был кластеризованный индекс. Если и исходной таблице нет основного ключа или кластеризованного индекса, SSMA может автоматически добавить столбец ROWID и создать на его основе кластеризованный индекс во время преобразования.
Загрузить SSMA можно с сайта Microsoft SQL Server. Это средство не только бесплатно, но с ним предлагается бесплатная поддержка по электронной почте в Центре обслуживания и поддержки Microsoft. Подробнее об SSMA см. блог команды SSMA, где вы найдете демонстрационный видеоролик и статьи с инструкциями, а также руководства по решению стандартных проблем, возникающих в процессе миграции.