IBM Migration Toolkit (или MTK) - это бесплатная для использования инструментальная программа с бесплатной поддержкой, помогающая перейти с конкурирующих баз данных на серверы данных IBM, как на DB2®, так и на Informix® Dynamic Server. Если вы раньше не работали с MTK, прочтите эти статьи.
До сих пор MTK предлагала только графический способ взаимодействия с программой. Этот интерфейс очень облегчает работу с MTK, особенно новичкам. Однако многие опытные пользователи обнаружили, что тщательно спланированные успешные миграции требуют периодического использования MTK, и выразили желание использовать эту программу способом, отличным от "укажи и нажми". Поэтому в самую последнюю версию MTK 2.0.3.0 кроме прочих новых функциональных возможностей включен интерфейс командной строки.
Работа с MTK из командной строки требует знания следующих вещей:
- Аргументов командной строки.
- Конфигурационного файла MTK.
Эти два элемента позволяют управлять MTK точно так же, как это делается в GUI. Если вы не знакомы с общим процессом миграции или настройками определенных действий, мы рекомендуем на первых порах использовать GUI. Имеется много деталей использования этих аргументов и конфигурационного файла (так же много, как и в GUI), поскольку весь смысл этой программы и состоит в полной замене GUI. В данной статье мы рассмотрим общую информацию по их использованию и приведем полезные примеры. За подробностями обращайтесь к документации по MTK. Итак, начнем!
Предположим, мы хотим мигрировать с определенной базы данных Oracle на DB2 9 и принимаем решение использовать MTK из командной строки. База данных Oracle называется "myOra", размещена на удаленной машине "oradb.domain.com" и доступна через сервис Oracle "oradb_svc". Нужно выполнить миграцию на удаленную базу данных DB2 под названием "myDB2mig", которую мы создали и каталогизировали. На нашем настольном компьютере с Windows установлены MTK, Oracle JDBC-драйвер и DB2-клиент, соответствующим образом настроены переменные CLASSPATH и PATH, а также проверена возможность подключения к обеим базам данных. Мы хотим выполнить прямую SQL-миграцию всей структуры базы данных - без переименования таблиц, без изменений типов данных, без переформатирования дат и т.д. Также мы хотим переместить данные из Oracle в DB2.
Исходя из этих требований, создадим сначала конфигурационный файл MTK. Назовем его "migration1.xml" и сохраним в каталоге установки MTK, которым по умолчанию в Windows является "C:\MTK". Это XML-файл, который следует определенным в MTK правилам и указывает MTK данные для выполнения всех действий по миграции. Поскольку мы хотим выполнить полную миграцию, от извлечения данных до развертывания, необходимо указать информацию обо всех действиях. Наш файл выглядит примерно так:
Конфигурационный файл MTK: migration1.xml
<?xml version="1.0"?>
<!DOCTYPE MTK SYSTEM "mtk.dtd">
<MTK>
<PROJECT
NAME="migration1" DIRECTORY="C:\MTK\Projects"
SRCDBTYPE="oracle" TRGTDBTYPE="viper_2">
<SPECIFY_SOURCE>
<EXTRACT EXTRACTTOFILE="source" SRCUSR="orauser" SRCPWD="orapassword">
<JDBC_CONNECTION
IP="oradb.domain.com" PORT="1521" SERVICE="oradb_svc"
></JDBC_CONNECTION>
<DATABASE NAME="myOra" ENTIREDATABASE="Y"></DATABASE>
</EXTRACT>
</SPECIFY_SOURCE>
<CONVERSIONS>
<CONVERSION>
<CONVERT SRCSQLFILE="source.src"></CONVERT>
<GENERATE_DATA_TRANSFER_SCRIPTS></GENERATE_DATA_TRANSFER_SCRIPTS>
<DEPLOY_TO_TARGET
TRGTDBNAME="myDB2mig" TRGTUSR="db2user"
TRGTPWD="db2password" DBLOCATION="remote"
></DEPLOY_TO_TARGET>
</CONVERSION>
</CONVERSIONS>
</PROJECT>
</MTK>
|
После заполнения конфигурационного файла можно запустить MTK. Вызов MTK выполняется путем ввода названия главного класса MTK в приглашении командной строки, но этого не достаточно. Необходимо дать знать MTK о следующем:
- Какие действия по миграции нужно выполнить.
- С какими данными эти действия выполнять.
Это делается при помощи аргументов. Поскольку нам нужно выполнить полную миграцию, используем флаг -all, означающий выполнение всех действий. Для выполнения второго пункта просто укажите MTK файл, используя флаг -config. Все вместе это выглядит следующим образом:
C:\ MTK> MTKMain.java -all -config migration1.xml |
Эта простая команда предписывает MTK выполнить все пять действий по миграции, помещая выходные файлы в каталог C:\MTK\Projects\migration1. Извлекается вся схема базы данных myOra полностью, преобразуется в DB2 SQL и развертывается в myDB2mig. Затем из Oracle извлекаются данные и вставляются в myDB2mig. Неплохо для одной простой команды!
Как отмечалось выше, использование MTK из командной строки требует знаний двух новых вещей: аргументов командной строки и конфигурационного файла MTK. Рассматривайте аргументы командной строки как кнопки, заставляющие MTK выполнять следующие действия: импорт, извлечение, преобразование, генерирование сценариев переноса данных и развертывание. Рассматривайте конфигурационный файл как настройки для всех этих действий, включая место, откуда получать входные данные. Эти действия и настройки напрямую соответствуют элементам GUI MTK. Однако, поскольку мы больше не используем GUI, ими откуда-то нужно управлять.
В настоящее время MTK принимает новые аргументы, приведенные ниже. Некоторые из этих аргументов (флагов или ключей, если вам так удобнее) требуют указания значений после них, тогда как для других это не нужно.
| Аргумент | Описание | Значение |
|---|---|---|
| -config | Указывает используемый конфигурационный файл. За этим флагом должно следовать название конфигурационного файла, включая полный путь в двойных кавычках. Имя файла и путь не должны содержать символа двойных кавычек. | [конфигурационный файл] |
| -import | Указывает MTK импортировать файл (файлы). | - |
| -extract | Указывает MTK извлечь объект (объекты) из исходной базы данных (баз данных). | - |
| -convert | Указывает MTK выполнить преобразование. | - |
| -genscript | Указывает MTK сгенерировать сценарии переноса данных. | - |
| -deploy | Указывает MTK выполнить развертывание. | - |
| -all | Указывает MTK выполнить все указанные исходные операции, преобразование, генерирование сценариев переноса данных и развертывание. | - |
| -srcusr | Идентификатор пользователя для подключения к исходной базе данных. | [имя пользователя] |
| -srcpwd | Пароль для подключения к исходной базе данных. | [пароль] |
| -trgtusr | Указывает MTK выполнить развертывание. | [имя пользователя] |
| -trgtpwd | Пароль для подключения к целевой базе данных. | [пароль] |
Конфигурационный файл MTK, или "config"-файл, - это структурированный документ, разделы которого позволяют пользователям управлять настройками и указывать входные данные для каждого действия по миграции. MTK использует XML, чтобы гарантировать грамматическую корректность каждого config-файла (если вы новичок в XML, познакомьтесь с дополнительной информацией по данной теме в разделе developerWorks XML). MTK содержит пример корректного config-файл (config.xml), который является отличной отправной точкой для пользователей командной строки. Изменяйте копию этого файла, так чтобы он содержал настройки для вашей миграции, добавляя входную информацию, например, имя проекта, и удаляя все ненужные части. Для любопытных: правила проверки корректности config-файла расположены в файле "mtk.dtd", тоже включенном в продукт.
GUI MTK имеет много параметров для каждого действия по миграции, поэтому конфигурационный файл имеет их тоже. Но пусть вас это не беспокоит и не пугает - большинство разделов и настроек конфигурационного файла не обязательны. Если вы их не укажете, MTK будет действовать по умолчанию, точно так же, как если бы вы оставили значения по умолчанию в GUI.
Давайте рассмотрим структуру конфигурационного файла в общем. config-файл начинается со специфичных для XML строк, а затем следует тег MTK, который содержит тег PROJECT. Тег PROJECT содержит все, что пользователи уже ассоциировали с MTK-проектом.
Пока все идет хорошо. Тег PROJECT может содержать раздел SPECIFY_SOURCE и раздел CONVERSIONS; оба не являются обязательными. Их необязательность обеспечивает гибкость. Например, если нужно импортировать или извлечь без преобразования, можно заполнить соответствующие подразделы SPECIFY_SOURCE и спокойно оставить часть CONVERSIONS. Однако для используемых аргументов командной строки должны существовать разделы в конфигурационном файле. Если запустить MTK с "-import" и не включить SPECIFY_SOURCE с одним тегом IMPORT как минимум, MTK выдаст ошибку и завершит работу.
Раздел CONVERSIONS содержит все данные для преобразования, генерирования сценариев переноса данных и развертывания. Он содержит не обязательный раздел GLOBAL_SETTINGS и один или несколько разделов CONVERSION (обратите внимание, что слово указывается в единственном числе). Как и в GUI, CONVERSION (в единственном числе) представляет единственный исходный SQL-файл и является основным модулем, над которым выполняется преобразование, настройка, генерирование сценариев и развертывание. Каждый раздел CONVERSION позволяет указать все знакомые вам по GUI глобальные параметры отображения, развертывания и др. Если вы обнаруживаете, что используете некоторые параметры постоянно, поместите их в раздел GLOBAL_SETTINGS, откуда они могут быть применены ко всем преобразованиям (CONVERSION).
MTK использует следующую логику определения настроек для использования. Если настройка указана в CONVERSION, MTK использует ее. Если настройки в CONVERSION нет, но есть в GLOBAL_SETTING, MTK использует ее. Если настройки нет в config-файле вообще, MTK использует значение по умолчанию, как в GUI. Значения по умолчанию приведены в документации по продукту.
Независимо от того, используете вы MTK из GUI или из командной строки, миграции всегда происходят внутри проекта. Проект является основой каждой MTK-миграции, а это означает, что вы можете работать с любым проектом, используя оба интерфейса в любой комбинации. Вот пример использования обоих интерфейсов в одном и том же проекте. В данном сценарии пользователь хочет перемещать объекты схемы и данные из исходной базы данных на сервер данных IBM ежедневно.
- Напишите и внесите в расписание работ сценарий, использующий MTK из командной строки для извлечения и преобразования объектов (например, таблиц и представлений), для выполнения в период наименьших рабочих нагрузок. Хорошим временем для этого может быть раннее утро перед началом рабочего дня.
- В течение рабочего дня используйте GUI для настройки схемы и просмотра всех предупреждений или сообщений об ошибках, полученных на шаге 1. Помните, что MTK очень помогает автоматизировать процесс миграции, но из-за различий в базах данных не все миграции поддаются стопроцентной автоматизации.
- Внесите в расписание работ еще один сценарий, использующий командную строку для развертывания объектов из (2) и перемещения данных на целевой сервер данных IBM. Аналогично первому шагу, этот сценарий мог бы выполняться в периоды наименьших рабочих нагрузок исходной базы данных и целевого сервера данных IBM.
Независимо от того, используете вы MTK из GUI или из командной строки, информация о проекте и файлах в каталоге проекта остается такой же, как и при работе только с GUI. Обратите, пожалуйста, внимание на то, что CLI и GUI не должны использоваться с одним и тем же проектом одновременно.
Теперь давайте исследуем использование MTK из командной строки на более сложных примерах. Мы продемонстрируем два совершенно различных сценария, для того чтобы вы увидели, как много ситуаций можно обработать.
Пример A: Миграция из нескольких исходных баз данных на несколько целевых баз данных
Одна база данных - хорошо, а несколько - еще лучше! Как использовать MTK для извлечения схемы и данных из нескольких исходных баз данных и развертывания их на нескольких целевых базах данных? Рассмотрим данный сценарий.
Мы хотели бы, чтобы MTK сделал следующее:
- Создал новый проект миграции под названием "Example2", расположенный в каталоге "C:\MTK\projects".
- Подключился к базе данных Oracle "orcldb1", используя ODBC-соединение "oraODBC1" и полностью извлек исходную схему, содержащуюся в "orcldb1", в проект. Это касается всех доступных таблиц, триггеров, представлений, процедур, последовательностей и пакетов, содержащихся в базе данных. Мы хотим, чтобы все эти извлеченные объекты сохранялись в файле "file1.src".
- Подключился ко второй базе данных Oracle "orcldb2", используя JDBC (IP = 192.168.1.10, порт 1521, имя сервиса "ora2svc"), и извлек все таблицы, ассоциированные со схемой "doe" в нашем проекте, в файл "file2.src".
- Преобразовал "file1.src" и "file2.src" в DB2 Viper 2 SQL в этом порядке. Преобразованная информация будет сохраняться в DB2-файлах "file1.db2" и "file2.db2" соответственно.
- Сгенерировал сценарии, необходимые для переноса данных из всех исходных таблиц, указанных в "file1.db2" и "file2.db2" в целевую базу данных. При развертывании данных используется вспомогательная программа load.
- Подключился к существующей базе данных Viper 2 "IBMatl", используя полномочия зарегистрированного в системе в настоящий момент времени пользователя, и развернул объекты, содержащиеся в "file1.db2", и ассоциированные данные.
- Создал новую базу данных Viper 2 "IBMlax", используя полномочия зарегистрированного в системе в данный момент пользователя, и развернул объекты в "file2.db2" и ассоциированные данные в этой базе данных.
Теперь, когда у нас есть подробный сложный сценарий, как его выполнить? Ответ проще, чем вы, возможно, думаете. Нам нужно передать в CLI правильные аргументы и правильный конфигурационный файл. Вспомните, что аргументы указывают, какие действия по миграции нужно выполнить, а конфигурационный файл содержит данные, необходимые для выполнения указанных действий. Мы создадим конфигурационный файл "exampleA.xml" (приведенный ниже), содержащий соответствующую информацию для выполнения поставленных задач. Затем мы выполним одну команду и вуаля, наша миграция выполнена!
Команда, выполняемая из командной строки:
C:MTK> MTKMain.bat -config exampleA.xml -extract -convert -genscript -deploy
или
C:MTK> MTKMain.bat -config exampleA.xml -all |
Конфигурационный файл MTK: exampleA.xml
<?xml version="1.0"?>
<!DOCTYPE MTK SYSTEM "mtk.dtd">
<MTK>
<PROJECT
NAME="Example2" DIRECTORY="c:\mtk\projects"
SRCDBTYPE="oracle" TRGTDBTYPE="viper_2">
<SPECIFY_SOURCE>
<EXTRACT EXTRACTTOFILE="file1" SRCPWD="usr1" SRCUSR="pwd4usr1" ALLOBJECTS="Y">
<ODBC_CONNECTION DSN="oraODBC1"></ODBC_CONNECTION>
</EXTRACT>
<EXTRACT EXTRACTTOFILE="file2" SRCPWD="usr2" SRCUSR="pwd4usr2">
<JDBC_CONNECTION
IP="192.168.1.10" PORT="1521" SERVICE="ora2svc"
></JDBC_CONNECTION>
<DATABASE NAME="orcldb2">
<SCHEMA NAME="doe" ALLTABLES="y"></SCHEMA>
</DATABASE>
</EXTRACT>
</SPECIFY_SOURCE>
<CONVERSIONS>
<GLOBAL_SETTINGS>
<DEPLOY_TO_TARGET
TRGTDBNAME="IBMTest" USECURRENTSYSLOGIN="y"
EXTRACTDATATOSYS="y" LOADDATATOTRGT="y"
></DEPLOY_TO_TARGET>
</GLOBAL_SETTINGS>
<CONVERSION>
<CONVERT SRCSQLFILE="file1.src"></CONVERT>
<GENERATE_DATA_TRANSFER_SCRIPTS FILEFORMAT="DEL"></GENERATE_DATA_TRANSFER_SCRIPTS>
<DEPLOY_TO_TARGET TRGTDBNAME="IBMatl" RECREATE="y"></DEPLOY_TO_TARGET>
</CONVERSION>
<CONVERSION>
<CONVERT SRCSQLFILE="file2.src"></CONVERT>
<GENERATE_DATA_TRANSFER_SCRIPTS></GENERATE_DATA_TRANSFER_SCRIPTS>
<DEPLOY_TO_TARGET TRGTDBNAME="IBMlax" RECREATE="y"></DEPLOY_TO_TARGET>
</CONVERSION>
</CONVERSIONS>
</PROJECT>
</MTK>
|
Пример B: Использование MTK в смешанном режиме
В разделе "MTK-проект" мы рассмотрели сценарий, использующий преимущества работы MTK как из командной строки, так и из GUI. Теперь давайте закатаем рукава и реализуем этот план миграции!
Мы хотим использовать преимущества CLI и GUI для миграции базы данных Microsoft SQL Server на новый сервер данных IBM Viper 2. Предположим следующее:
- Мы будем переносить базу данных транзакций "Projects" в экземпляр IBM Viper 2.
- Наш исходный сервер базы данных работает с пониженной нагрузкой в период времени с 23:00 до 1:00 и с 3:00 до 5:00 ежедневно.
- Ресурсы администратора базы данных ограничены, и мы в целом хотим максимизировать все ресурсы базы данных.
Для выполнения этих трех шагов нужно:
- Внести в расписание работ выполнение CLI в 23:05 для:
- Извлечения всей базы данных "Projects" из MSSQL Server.
- Преобразования всех извлеченных выражений DDL и DML в их эквивалент на синтаксисе DB2.
- В рабочее время использовать MTK GUI для анализа и оценки результата преобразования. При необходимости мы можем также использовать GUI для уточнения преобразований.
- Внести в расписание работ выполнение MTK CLI в 3:05 для:
- Развертывания преобразованных объектов в базе данных Viper 2 "DB2Proj".
- Миграции данных из "Projects" в целевую базу данных - экземпляр IBM Viper 2.
А вот вопрос, ответ на который вы должны знать наизусть: какие две вещи нам нужны? Конечно же, аргументы и конфигурационный файл! Давайте пристальнее посмотрим, как выглядят наши сценарии, запланированные на 23:05 и 3:05.
Сценарий, запланированный на 23:05:
cd c:\mtk
MTKMain.bat -config exampleB.xml -extract -convert |
Сценарий, запланированный на 3:05:
cd c:\mtk
MTKMain.bat -config exampleB.xml -genscript -deploy -trgtusr "db2admin" -trgtpwd "pwd" |
Конфигурационный файл MTK: exampleB.xml
<?xml version="1.0"?>
<!DOCTYPE MTK SYSTEM "mtk.dtd">
<MTK>
<PROJECT
NAME="Example3" DIRECTORY="c:\mtk\projects"
SRCDBTYPE="sql_server" TRGTDBTYPE="viper_2">
<SPECIFY_SOURCE>
<EXTRACT EXTRACTTOFILE="file3" SRCPWD="sa" SRCUSR="pwd4sa">
<JDBC_CONNECTION IP="192.168.1.10" PORT="1234"></JDBC_CONNECTION>
<DATABASE NAME="Projects" ENTIREDATABASE="y"></DATABASE>
</EXTRACT>
</SPECIFY_SOURCE>
<CONVERSIONS>
<CONVERSION>
<CONVERT SRCSQLFILE="file3.src">
<TYPEMAPPING
SRCSQLTYPE="TEXT" TRGTSQLTYPE="VARCHAR" TRGTSQLLENGTH="200"
></TYPEMAPPING>
</CONVERT>
<GENERATE_DATA_TRANSFER_SCRIPTS></GENERATE_DATA_TRANSFER_SCRIPTS>
<DEPLOY_TO_TARGET
TRGTDBNAME="DB2Proj" RECREATE="y"
EXTRACTDATATOSYS="y" LOADDATATOTRGT="y"
></DEPLOY_TO_TARGET>
</CONVERSION>
</CONVERSIONS>
</PROJECT>
</MTK>
|
MTK облегчает миграцию базы данных, а новый интерфейс командной строки позволяет управлять MTK гибким и действенный способом. Используйте флаги или аргументы для указания действий, которые необходимо выполнить, а конфигурационный файл для указания данных, с которыми нужно работать. Вот и все! Вперед, к миграции!
| Описание | Имя | Размер | Метод загрузки |
|---|---|---|---|
| Конфигурационные файлы MTK из примеров | Examples.zip | 2KB | HTTP |
Научиться
- Оригинал статьи "Using the IBM Migration Toolkit from a command line" (EN).
-
"Новые возможности миграции на DB2 и Informix в IBM Migration Toolkit 1.4.9"
(developerWorks, январь 2007): информация о многочисленных улучшениях в MKT, включая поддержку миграции на IDS.
-
"Миграция на серверы баз данных IBM становится проще с выходом новой версии MTK" (EN)
(developerWorks, март 2006): не знакомы с Migration Toolkit? В данной статье приведена информация по использованию этой программы.
-
"Автоматизация перехода на DB2 с использованием IBM DB2 UDB Migration Toolkit" (EN)
(developerWorks, сентябрь 2002): подробная информация по использованию мастера и GUI-интерфейса для MKT.
-
IBM Informix Dynamic Server 11 InfoCenter: документацию по Migration Toolkit можно найти по ссылке Migrating.(EN)
-
MTK FAQ: этот документ отвечает на многие вопросы по IBM Migration Toolkit.(EN)
-
developerWorks Migration Station: ссылка на ресурсы по миграции.(EN)
- Раздел
XML сайта developerWorks: статьи и учебные руководства по XML.
-
DB2 z/OS 9: информация о новейшей версии DB2 for z/OS.(EN)
Получить продукты и технологии
-
MTK: загрузите этот набор инструментальных программ.(EN)
-
Загрузите бесплатную пробную версию DB2 Enterprise 9(EN).
- Теперь можно работать с DB2 бесплатно. Загрузите DB2 Express-C, бесплатную версию DB2 Express Edition for Community, предлагающую те же базовые функциональные возможности, что и DB2 Express Edtion, обеспечивая прочную основу для создания и развертывания приложений.(EN)
-
Загрузите бесплатную пробную версию Informix Dynamic Server.(EN)
Обсудить
- Примите участие в обсуждении материала на форуме.
-
Присылайте вопросы по адресу mtk@us.ibm.com.