DB2 9.7: Инструмент для переноса данных IBM Data Movement Tool

Простой способ переносить приложения с Oracle на DB2

В этой статье описывается чрезвычайно простой и мощный инструмент, который позволяет исполнять приложения для Oracle на СУБД IBM® DB2® Version 9.7 для Linux®, UNIX® и Windows®. Его можно использовать также для переноса данных из других систем управления базами данных на DB2 для Linux, UNIX и Windows и DB2 for z/OS®.

Викрам Хатри, сертифицированный специалист-консультант по информационным технологиям, IBM

Викрам Хатри (Vikram Khatri) работает в отделе продаж и распространения компании IBM в составе группы DB2 Migration, его опыт работы в сфере информационных технологий составляет 18 лет. Викрам занимается администрированием баз данных DB2. В своей работе по технической поддержке продаж DB2 он занимается проектами миграции, а также тестированием систем высокой производительности.



10.08.2009

Введение

Начиная с DB2 V9.7 для Linux, UNIX и Windows для использования приложений Oracle с продуктами DB2 больше не нужен Migration Toolkit (MTK). Предлагаемый инструмент заменяет функциональность MTK при значительном упрощении рабочего процесса.

При всех прочих сценариях, например, при переносе данных из базы данных на DB2 для z/OS, этот инструмент дополняет MTK, в частности, в части высокоскоростного переноса данных. С его помощью 4 ТБ данных удалось перенести всего за три дня.

Графический интерфейс пользователя помогает освоить инструмент начинающим, тогда как опытные пользователи часто предпочитают API на основе командной строки.

Подготовка

Загрузка

Прежде всего, загрузите инструмент из раздела загрузок на свой целевой сервер DB2. Для переноса данных на DB2 для z/OS требуются дополнительные шаги.

Установка

Загрузив файл IBMDataMovementTool.zip и извлеките файлы в каталог с именем IBMDataMovementTool на целевом сервере DB2. Для достижения наилучшей производительности при переносе данных настоятельно рекомендуется установка со стороны сервера (на DB2).

Предварительные требования

  • Если нужно, чтобы приложение Oracle работало на DB2 для Linux, UNIX и Windows, на целевом сервере должна быть установлена DB2 V9.7.
  • На том же сервере должна присутствовать версия 1.5 или более поздняя версия Java™. Чтобы проверить текущую версию Java, выполните команду java -version. По умолчанию Java устанавливается в составе DB2 для Linux, UNIX и Windows в каталоге <install_dir>\SQLLIB\java\jdk (Windows) или /opt/ibm/db2/V9.7/java/jdk (Linux).
  • Местонахождение драйверов JDBC для исходной базы данных и DB2.
    База данныхДрайверы JDBC
    Oracleojdbc14.jar, xdb.jar, xmlparserv2.jar, или classes12.jar, или classes111.jar для Oracle 7 или 8i.
    SQL Serversqljdbc.jar
    Sybasejconn3.jar
    MySQLmysql-connector-java-5.0.8-bin.jar
    PostgreSQLpostgresql-8.1-405.jdbc3.jar
    Ingresiijdbc.jar
    DB2 для Linux, UNIX и Windowsdb2jcc.jar, db2jcc_license_cu.jar
    DB2 для zdb2jcc.jar, db2jcc_license_cisuz.jar
    MS AccessОпционально Access_JDBC30.jar

Настройка среды

  • UNIX: Зарегистрируйтесь на сервере как владелец экземпляра DB2.
  • Windows: Запустите командное окно DB2.
  • Перейдите в каталог IBMDataMovementTool. Инструмент представляет собой файл JAR с двумя сценариями драйверов для исполнения инструмента.
    IBMDataMovementTool.cmd - Сценарий команды 
      для исполнения инструмента на Windows.
    IBMDataMovementTool.sh - Сценарий команды для
     исполнения инструмента на UNIX.
    IBMDataMovementTool.jar - Файл JAR инструмента.

Создание целевой базы данных DB2

Так как для работы инструмента требуется соединение базы данных с целевым сервером, сначала нужно создать базу данных DB2. Для DB2 V9.7 мы рекомендуем использовать автоматический накопитель по умолчанию и выбрать размер страницы 32 КБ. При переносе приложений на DB2 V9.7 экземпляр приложения и база данных должны работать в режиме совместимости. Рекомендуется также настроить способ округления в соответствии с правилами Oracle. Объекты можно развертывать не в порядке зависимости, установив параметр повторной проверки действительности объекта в deferred_force.

На UNIX-системах

$ db2set DB2_COMPATIBILITY_VECTOR=4095
$ db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
$ db2stop force
$ db2start
$ db2 "create db testdb automatic storage yes on /db2data1,
/db2data2,/db2data3 DBPATH ON /db2system PAGESIZE 32 K"
$ db2 update db cfg for testdb using auto_reval deferred_force
$ db2 update db cfg for testdb using decflt_rounding round_half_up

На Windows-системах

C:\> db2set DB2_COMPATIBILITY_VECTOR=4095
C:\> db2set DB2_DEFERRED_PREPARE_SEMANTICS=YES
C:\> db2stop force
C:\> db2start
C:\> db2 "create db testdb automatic storage yes on D: DBPATH ON D: PAGESIZE 32 K"
C:\> db2 update db cfg for testdb using auto_reval deferred_force
C:\> db2 update db cfg for testdb using decflt_rounding round_half_up

Извлечение объектов и данных

Прежде чем запустить инструмент, подготовьте следующую информацию по своему исходному серверу и серверу DB2:

  • IP-адрес или имя хоста исходного сервера и сервера DB2
  • Номера портов для соединений
  • Имя базы данных, SID, имя подсистемы и т.п.
  • ID пользователя с привилегиями DBA на исходную БД
  • Пароль этого пользователя
  • Местонахождение исходной БД и драйверов JDBC DB2
  • Достаточное дисковое пространство или информация о томе/монтажной точке для хранения данных

Выполните команду IBMDataMovementTool.cmd на Windows или ./IBMDataMovementTool.sh на UNIX. Инструмент запустит графический интерфейс пользователя, если сервер способен отображать графику. В противном случае он перейдет в интерактивный режим командной строки для ввода входных данных.

On Windows:IBMDataMovementTool.cmd
On UNIX:./IBMDataMovementTool.sh

Что такое DB2_COMPATIBILITY_VECTOR?

DB2_COMPATIBILITY_VECTOR используется для перевода как экземпляра DB2 V9.7, так и базы данных в режим совместимости с Oracle. Более подробные сведения можно получить в Информационном центре DB2 V9.7.

Теперь вы видите окно графического интерфейса. Некоторые сообщения должны появляться также в окне оболочки. Просмотрите эти сообщения, чтобы убедиться, что перед началом использования графического интерфейса не было никаких ошибок.

Если не установить DB2_COMPATIBILITY_VECTOR, инструмент выдаст предупреждение. Следуйте инструкциям по установке вектора совместимости, если это еще не сделано.

[2009-05-15 12.48.59.218] INPUT Directory = .
[2009-05-15 12.48.59.218] Configuration file loaded: 'jdbcdriver.properties'
[2009-05-15 12.48.59.218] Configuration file loaded: 'IBMExtract.properties'
[2009-05-15 12.48.59.218] appJar  : 'C:\Vikram\Prospects\DB2Cobra\IBMDataMovementTool.jar'
[2009-05-15 12.49.01.000] * WARNING *. I did not detect DB2_COMPATIBILITY_VECTOR set for 
                          compatibility mode.
[2009-05-15 12.49.01.000] To set compatibility mode, discontinue this program and 
                          run the following commands
[2009-05-15 12.49.01.000] db2set DB2_COMPATIBILITY_VECTOR=4095
[2009-05-15 12.49.01.000] db2stop force
[2009-05-15 12.49.01.000] db2start

Работа с графическим интерфейсом пользователя

Экран графического интерфейса, показанный на рисунке 1, содержит поля для ввода информации об исходном сервере и подключении БД DB2. Последовательность действий на этом экране такова:

  1. Укажите информацию об источнике и подключении DB2.
  2. Нажмите кнопку Connect to Oracle для тестирования соединения.
  3. Нажмите кнопку Connect to DB2 для тестирования соединения.
  4. Укажите рабочий каталог, куда должны извлекаться DDL и данные.
  5. Выберите DDL и/или DATA. Если выбран только DDL, будет сгенерирован дополнительный сценарий genddl.
  6. Нажмите кнопку Extract Data. За ходом процесса можно следить в окне консоли.
  7. После успешного извлечения данных просмотрите результирующие выходные файлы на предмет статуса переноса данных, предупреждений, сообщений об ошибках и других потенциальных проблем.
  8. Можно нажать на кнопку View Script/Output для проверки сгенерированных сценариев, DDL, данных или файла журнала регистрации событий.
  9. Нажмите кнопку Deploy Data, чтобы создать таблицы, индексы в DB2 и загрузить данные, извлеченные из исходной БД.
  10. Для выполнения сгенерированных сценариев DB2 вместо командной строки можно использовать Execute DB2 Script. Перенос данных – это интерактивная процедура. Если нужно отказаться от всех таблиц и начать заново, можно выбрать и исполнить сценарий drop table. Эту кнопку можно использовать и для исполнения сценариев в желаемом порядке.
Рисунок 1. Входные параметры исходной БД и DB2
Извлечение и развертывание данных

Нажав кнопку Extract DDL/Data, вы увидите предупредительные сообщения инструмента на вкладке View File, как показано на рисунке 2.

Рисунок 2. Извлечение DDL и данных
Извлечение DDL и данных

По завершении извлечения DDL и данных вы заметите, что в рабочем каталоге появилось несколько новых файлов. Эти файлы можно использовать для API командной строки.

Файлы конфигурации

Следующие командные сценарии регенерируются каждый раз при исполнении инструмента в режиме графического интерфейса. Однако эти сценарии можно использовать и для выполнения всех шагов по переносу данных без графического интерфейса. Это полезно, когда инструмент надо встроить в процесс пакетной обработки для автоматического переноса данных.

Имя файлаОписание
IBMExtract.propertiesЭтот файл содержит все входные параметры, которые вы задали посредством графического интерфейса пользователя или из командной строки. Этот файл можно редактировать вручную, чтобы исправить или изменить параметры. Помните, что всякий раз при исполнении графического интерфейса файл перезаписывается.
geninputЭто первый шаг по переносу данных, на котором создается входной файл с именами перемещаемых таблиц. Этот файл можно редактировать вручную, чтобы исключить таблицы, которые не надо переносить.
genddlЭтот необязательный сценарий генерируется только в том случае, если вы выбрали генерацию DDL отдельно от данных. Это второй шаг по переносу данных для генерации всех DDL из исходной БД в DB2.
unload Это последний шаг переноса данных. На этом шаге данные переносятся из исходного сервера базы данных в неформатированные файлы. После исполнения этого сценария генерируются сценарии DB2 LOAD.
Примечание: Если вы не выбрали DDL отдельно от данных, содержание genddl будет включено в сценарий unload.
rowcountЭтот файл используется после переноса данных для проверки числа строк таблиц на серверах исходной и целевой баз данных.
Рисунок 3. Файлы, созданные после извлечения данных.
Шаг 2. Созданные файлы

Использование режима командной строки

Инструмент можно запустить с помощью режима командной строки, в частности, если сервер не поддерживает графический интерфейс или если вы подключены через сеанс telnet / ssh. Если графический интерфейс не запускается, инструмент переключает режим автоматически. Если нужно, чтобы инструмент работал в интерактивном режиме командной строки, можно указать опцию -console в команде IBMDataMovementTool.

On Windows:
IBMDataMovementTool -console
On UNIX:
./IBMDataMovementTool.sh	-console


В ходе пошагового процесса вы сможете в интерактивном режиме указать параметры соединения исходной базы данных и DB2. Ниже приведен пример окна консоли:

[2009-05-16 23.38.54.703] INPUT Directory = .
[2009-05-16 23.38.54.703] Configuration file loaded: 'jdbcdriver.properties'
[2009-05-16 23.38.54.703] Configuration file loaded: 'IBMExtract.properties'
[2009-05-16 23.38.54.703] appJar  : 'C:\Vikram\Prospects\DB2Cobra\IBMDataMovementTool.jar'
Extract DDL (Yes)        : 1
Extract DDL (No)         : 2
Enter a number (Default=1) : 1
Extract Data (Yes)        : 1
Extract Data (No)         : 2
Enter a number (Default=1) : 2
******* Source database information: *****
Oracle                  : 1
MS SQL Server           : 2
Sybase                  : 3
MS Access Database      : 4
MySQL                   : 5
PostgreSQL              : 6
DB2 z/OS                : 7
DB2 LUW                 : 8
Enter a number (Default 1) : 1

Развертывание объектов и загрузка данных

Создание объектов целевой базы данных

После извлечения DDL и данных у вас есть три разных способа развернуть извлеченные объекты в DB2.

  • Нажать кнопку Deploy DDL/DATA на экране GUI
  • Перейти на вкладку Interactive Deploy и установить объекты с помощью пошагового процесса
  • Развернуть DDL/DATA с помощью сценария командной строки unload

Выбор варианта развертывания данных зависит от требований по переносу данных и объектов. Если вы переносите только не-PL/SQL объекты DDL и данные, используйте сценарий unload или нажмите кнопку Deploy DDL/DATA из графического интерфейса.

При развертывании объектов PL/SQL, таких как триггеры, функции, процедуры и пакеты PL/SQL, предпочтительнее интерактивный режим.

Экран графического интерфейса, показанный на рисунке 4, используется для интерактивного развертывания DDL и других объектов базы данных. Последовательность событий на этом экране такова:

  1. Установите соединение с DB2 с помощью вкладки Extract/Deploy.
  2. Выберите вкладку Interactive Deploy.
  3. Используйте кнопку Open Directory, чтобы выбрать рабочий каталог, содержащий предварительно извлеченные объекты. Объекты считаны и перечислены в окне дерева.
  4. Можно развернуть все объекты, нажав кнопку Deploy All Objects на панели инструментов. Большинство объектов будет развернуто успешно, но некоторые могут не установиться.
  5. Нажав в окне дерева на объект, который не установился, в окне редактора можно увидеть источник этого объекта. Причина отказа указана в журнале регистрации событий снизу.
  6. В общем случае режим совместимости Oracle позволяет устанавливать объекты как есть. Однако могут оставаться неподдерживаемые функции, препятствующие успешной установке некоторых готовых объектов. При помощи редактора можно отредактировать исходный код этих объектов, чтобы решить возможные проблемы. При установке измененного объекта новый исходный код сохранится вместе с резервной копией старого.
  7. 7. Чтобы установить объекты после редактирования, можно выбрать один или несколько объектов, удерживая клавишу CTRL, и нажать кнопку Deploy Selected Objects на панели инструментов. Часто неудачные установки происходят каскадом, поэтому когда один объект успешно установится, установятся и другие, зависящие от него.
  8. Повторяйте шаги 5-7, пока все объекты не будут успешно установлены.
Рисунок 4. Интерактивное развертывание объектов
Шаг 3. Интерактивное развертывание

Сравнение количества строк

  • Перейдите в корневой каталог перемещения данных и выполните сценарий rowcount.
  • Вы увидите отчет, сгенерированный в файле "<имя исходной базы данных>.tables.rowcount". Отчет содержит число строк как исходной, так и целевой баз данных.
oracle                      :       db2
"TESTCASE"."CALL_STACKS"    : 123   "TESTCASE"."CALL_STACKS"      : 123
"TESTCASE"."CLASSES"        : 401   "TESTCASE"."CLASSES"          : 401
"TESTCASE"."DESTINATION"    : 513   "TESTCASE"."DESTINATION"      : 513

Дополнительные шаги для DB2 на z/OS

Процесс UNLOAD на z/OS

  • Для этого инструмента требуется выполнение USS, но DB2 LOAD на z/OS не может использовать для загрузки данных файлы HFS. Поэтому, чтобы создать на z/OS наборы данных PS, нужно воспользоваться инструментарием JZOS из Unix System Services. Однако DB2 LOAD может использовать файлы USS (или HFS) для выполнения оператора LOAD CLOBS/BLOBS в DB2. Поэтому мы создаем наборы данных PS на z/OS для переноса данных из исходной БД на z/OS и файлы System Services HFS для сохранения всех объектов BLOBS/CLOBS.
  • Оператор LOAD не может исполняться из USS. Для выполнения операторов LOAD, CHECK DATA и RUN STATS используйте хранимую процедуру SYSPROC.DSNUTILS.
  • Создание наборов данных PS – это проблема, так как для каждой таблицы нужно выделить место. Заранее выделить место фиксированного размера нельзя, так как неизвестен размер таблицы. Можно потратить впустую много пространства памяти z/OS. Чтобы избежать проблемы пространства, используйте алгоритм для выделения места.

Рассматриваемый инструмент можно использовать из z/OS для переноса данных из исходной БД на DB2 для z/OS. Однако потребуются следующие дополнительные шаги.

  1. Загрузите и установите JZOS по этой ссылке на сайт IBM.
  2. Этот zip содержит файл с именем jzos.pax. Отправьте этот файл по FTP с помощью Unix System Services в двоичном режиме в каталог, куда надо установить JZOS.
  3. Перейдите в каталог, в котором сохранен файл .pax.
  4. Выполните команду: pax -rvf. Она создаст в текущем рабочем каталоге подкаталог jzos. Будем называть его <JZOS_HOME>.
  5. В домашнем каталоге пользователя создайте файл с именем .profile с помощью приведенного ниже шаблона, отредактировав его в соответствии с вашей установкой z/OS DB2.
    export JZOS_HOME=$HOME/jzos
    export JAVA_PATH=/usr/lpp/java/J1.5
    export PATH=$JAVA_HOME/bin:$PATH		        
    export CLPHOME=/usr/lpp/db2/db2910/db2910_base/lib/IBM                  
    export CLASSPATH=$CLASSPATH:/usr/lpp/db2/db2910/db2910_base/lib/clp.jar 
    export CLPPROPERTIESFILE=$HOME/clp.properties                           
    export LIBPATH=$LIBPATH:<JZOS_HOME<                               
    alias db2="java com.ibm.db2.clp.db2"
  6. В зависимости от вашей среды, возможно, придется модифицировать CLPHOME и CLASSPATH. Замените <JZOS_HOME> соответствующим каталогом.
  7. В домашнем каталоге пользователя создайте файл с именем clp.properties с помощью следующего шаблона:
    #Specify the value as ON/OFF or leave them blank              
    DisplaySQLCA=ON                                               
    AutoCommit=ON                                                 
    InputFilename=                                                
    OutputFilename=                                               
    DisplayOutput=                                                
    StopOnError=                                                  
    TerminationChar=                                              
    Echo=                                                         
    StripHeaders=                                                 
    MaxLinesFromSelect=                                           
    MaxColumnWidth=20                                             
    IsolationLevel=                                               
    <SUBSYSTEM_NAME>=<IP address>:<port number>/<location name>,USER,PASSWD
    
    Replace items on the last line as appropriate.
  8. Выполните команду chmod 777 <JZOS_HOME>/*.so
  9. Выполните команду консоли IBMDataMovementTool.sh и укажите значения параметров посредством интерактивного интерфейса пользователя.
  10. Будут созданы сценарии IBMExtract.properties, geninput и unload.
  11. Параметр zdb2tableseries в IBMExtract.properties нужен для указания имени последовательности наборов данных PS. Например, если ваш ID TSO DNET770 и этот параметр установлен в значение R, имя набора данных PS, созданного для первой таблицы, будет DNET777.TBLDATA.R0000001.
  12. Параметр znocopypend используется для добавления параметра NOCOPYPEND в оператор LOAD. С этим параметром z/OS DB2 DBA может выполнять резервное копирование, так как таблица не будет переведена в режим ожидания COPY.
  13. Параметр zoveralloc указывает, с каким запасом нужно указать размер запрашиваемого места для файла. Значение 1 означает полное отсутствие такого запаса. В среде с достаточным свободным пространством это может работать. В реальной же среде хорошей оценкой будет 15/11 (1.3636). Рекомендуется начать с 1.3636 (15/11) и постепенно уменьшать значение, пока не появятся ошибки записи файла, а затем немного увеличить его. Если вам известно значение параметра SMS REDUCE SPACE UP TO, вы сможете рассчитать идеальное значение для overAlloc, установив его в 1 / (1 - (X/100)), где Х – это значение REDUCE SPACE UP TO, представленное как целое в интервале от 0 до 100. Заметим, что REDUCE SPACE UP TO соответствует процентам.
  14. Параметр zsecondary используется для выделения фиксированного вторичного пространства. Начните со значения 0 и плавно увеличивайте его, пока не появятся ошибки записи файла, а затем уменьшите.
  15. Выполните сценарий geninput, чтобы создать входной файл для процесса unload.
  16. Выполните сценарий unload, чтобы сгенерировать DDL и DATA.
  17. Выполните сгенерированный сценарий для создания DDL и загрузите данные в z/OS DB2.
  18. Если не удалить эти наборы данных, DSNUTILS не сработает. Следующая Java-программа может удалить эти промежуточные наборы.
    java -cp /u/dnet770/migr/IBMDataMovementTool.jar:$JZOS_HOME/ibmjzos.jar \
    -Djava.ext.dirs=${JZOS_HOME}:${JAVA_HOME}/lib/ext ibm.Cleanup
  19. По завершении загрузки в таблицы DB2 на z/OS можно найти наборы данных, которые нужно удалить. Используйте следующую Java-программу для удаления этих наборов данных в рамках очистки.

Создайте сценарий jd, как показано ниже:

JZOS_HOME=$HOME/jzos
JAVA_HOME=/usr/lpp/java/J1.5
CLASSPATH=$HOME/migr/IBMDataMovementTool.jar:$JZOS_HOME/ibmjzos.jar
LIBPATH=$LIBPATH:$JZOS_HOME

$JAVA_HOME/bin/java -cp $CLASSPATH \
-Djava.ext.dirs=${JZOS_HOME}:${JAVA_HOME}/lib/ext ibm.Jd $1

Измените права доступа к файлу на 755 и выполните его; вы получите приведенный ниже результат:

DNET770:/u/dnet770/migr: >./jd
USAGE: ibm.Jd <filter_key>
USAGE: ibm.Jd "DNET770.TBLDATA.**"
USAGE: ibm.Jd "DNET770.TBLDATA.**.CERR"
USAGE: ibm.Jd "DNET770.TBLDATA.**.LERR"
USAGE: ibm.Jd "DNET770.TBLDATA.**.DISC"

Итак, если вы хотите удалить все наборы данных из "DNET770.TBLDATA", воспользуйтесь следующей командой.

DNET770:/u/dnet770/migr: >./jd "DNET770.TBLDATA.**"

Планирование крупномасштабного переноса данных

Вся сила рассматриваемого инструмента проявляется при крупномасштабном переносе данных. При хорошем планировании и правильных процедурах с его помощью удалось перенести 4 ТБ данных Oracle всего за три дня. В этом разделе приводятся методы и советы, которые помогут вам выполнить крупномасштабный перенос данных в сжатые сроки.

Требования к оборудованию и планирование емкости

Обсуждение требований к оборудованию и планирования емкости базы данных выходит за рамки этой статьи, но для оценки времени крупномасштабного переноса данных важно иметь в виду следующие ограничения.

  • Вам понадобится хорошее сетевое соединение между источником и сервером DB2, предпочтительно 1 ГБ/с или выше. Пропускная способность сети будет ограничивать время полного переноса данных.
  • Наличие нескольких процессоров на исходном сервере позволит переносить несколько таблиц одновременно. Если размер базы данных превышает 1 ТБ, на исходном сервере нужно иметь минимум 4 центральных процессора.
  • Число процессоров на сервере DB2 будет определять скорость процесса LOAD. Как правило, от четверти до трети времени уйдет на загрузку данных в БД (load) , а остальное – на процесс выгрузки (unload).
  • Планируйте формат базы данных DB2 заранее. Сверьтесь с практическими рекомендациями IBM по DB2.

Советы и методы

  • Подробно ознакомьтесь с работой инструмента и режимом командной строки. Используйте графический интерфейс для генерации сценариев переноса данных (geninput и unload), а выгрузку данных выполняйте с помощью сценария unload из командной строки.
  • Извлекайте DDL из исходного сервера только путем включения GENDDL=true и UNLOAD=false в сценарий unload . Сгенерированный DDL используйте для планирования пространства и преобразования таблицы. Используйте отдельный выходной каталог для хранения сгенерированного DDL и данных, указав целевой каталог с помощью параметра -DOUTPUT_DIR в сценарии unload . Генерация DDL должна выполняться до окончательного переноса данных.
  • Используйте сценарий geninput для генерации списка таблиц, перемещаемых из источника в DB2. Используйте параметры SRCSCHEMA=ALL и DSTSCHEMA=ALL сценария geninput для генерации списка всех таблиц. Отредактируйте файл, удалив нежелательные таблицы и разделив его на несколько входных файлов, чтобы поэтапно выгружать данные из источника и параллельно загружать их в целевую БД.
  • После разбиения входного файла таблицы (сгенерированного сценарием geninput ) на несколько файлов скопируйте сценарий unload в эквивалентные файлы, переименуйте входной файл и укажите другой каталог для каждого процесса выгрузки. Например, можно создать 10 сценариев выгрузки для выгрузки 500 таблиц каждым сценарием, что в итоге даст 5000 таблиц.
  • Обязательно выполняйте DDL и DATA на разных шагах. Не соединяйте их в один шаг при крупном переносе данных.
  • Инструмент выгружает данные из исходных таблиц в параллельном режиме, определяемом параметром NUM_THREADS сценария unload. Значение по умолчанию равно 5, и его можно увеличить до уровня, когда загрузка ресурсов процессоров вашего исходного сервера приближается к 90%.
  • Следите за таблицами, перечисленными в файле входных таблиц. Сценарий geninput недостаточно интеллектуален, чтобы размещать таблицы в определенном порядке, но вам нужно упорядочить их таким образом, чтобы минимизировать время выгрузки. Таблицы, перечисленные во входных файлах, подаются в пул потоков по циклическому принципу. Может случиться так, что все потоки завершили процесс выгрузки, а один еще работает. Чтобы занять все потоки, организуйте входной файл для таблиц в порядке увеличения количества строк.
  • Все равно может случиться, чтоб все таблицы выгружены, а несколько потоков все еще продолжают выгрузку очень больших таблиц. Можно выгружать одну и ту же таблицу несколькими потоками, если удастся правильно составить оператор WHERE во входном файле. Например:
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 1 and 1000000
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 1000001 and 2000000
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 2000001 and 3000000
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE id between 3000001 and 4000000

    Используйте нужные ключи оператора WHERE, который предпочтительно должен быть либо первичным ключом, либо уникальным индексом. Инструмент позаботится о том, чтобы создать правильные сценарии DB2 LOAD для загрузки данных из нескольких сгенерированных файлов. Для загрузки одной и той же таблицы в нескольких потоках никакой дополнительной настройки не требуется, за исключением добавления другого оператора WHERE, как описано выше.
  • Разбив процесс выгрузки на несколько шагов, можно начать одновременное помещение данных в DB2 по окончании пакетного процесса выгрузки данных. Главное здесь – разделить выходные каталоги для каждого пакета выгрузки. В выходном каталоге генерируются все необходимые файлы для помещения данных в DB2. Для DDL нужно использовать сгенерированный сценарий db2ddl для создания определений таблиц. Для данных используйте сценарий db2load загрузки таблиц в DB2. При объединении DDL и данных в один шаг имя сценария будет db2gen.
  • Автоматизируйте весь процесс в сценариях оболочки, чтобы процессы выгрузки и загрузки были синхронизированы. Каждый крупный перенос данных из Oracle или другой базы данных в DB2 уникален. Придумывая, как автоматизировать все эти задачи, вы наберетесь опыта. Сохраняйте выход заданий в файле с помощью команды tee, чтобы можно было следить за процессом, и его результат сохранялся в файле регистрации событий.

Выполнение имитационных тестов

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

  1. Скопируйте в имитационный каталог сценарии переноса данных и сценарии оболочки для автоматизации.
  2. Оцените время, выгрузив несколько крупных таблиц в нескольких потоках, и в соответствии с этим разделите процесс переноса данных на этапы.
  3. Добавьте оператор WHERE, чтобы ограничить число строк для тестирования переноса данных. Например, можно добавить оператор ROWNUM, чтобы ограничить число строк в БД Oracle, или воспользоваться оператором TOP для SQL Server.
    "ACCOUNT"."T1":SELECT * FROM "ACCOUNT"."T1" WHERE rownum < 100
    "ACCOUNT"."T2":SELECT * FROM "ACCOUNT"."T2" WHERE rownum < 100
    "ACCOUNT"."T3":SELECT * FROM "ACCOUNT"."T3" WHERE rownum < 100
    "ACCOUNT"."T4":SELECT * FROM "ACCOUNT"."T4" WHERE rownum < 100
  4. Испытайте свои сценарии и внесите необходимые изменения, затем подготовьтесь к финальному прогону.

Окончательный запуск

  1. Вы уже выгрузили DDL и внесли требуемые ручные изменения для преобразования между таблицами и пространствами таблиц.
  2. Организуйте временное окно для переноса данных.
  3. Если источником служит БД Oracle, нужно, чтобы было открыто порядка 10000 курсоров.
  4. Следите за результатом по файлу регистрации событий.

При крупном переносе данных важны планирование, дисциплина и умение автоматизировать задачи. Инструмент обеспечивает все возможности, необходимые для такого переноса. Несмотря на компактность, с его помощью были выполнены переносы в DB2 нескольких очень крупных баз данных из разных источников.

Поддержка инструмента

Рассматриваемый инструмент не поддерживается организацией технической поддержки IBM. Однако вы можете сообщать об ошибках, проблемах, своих соображениях и усовершенствованиях в форум поддержки.

Часто задаваемые вопросы

Часто задаваемые вопросы
Вопрос:Нужно ли устанавливать что-либо на сервер исходной базы данных для работы с этим инструментом?
Ответ:Для работы с этим инструментом на сервер исходной БД ничего устанавливать не нужно.
Вопрос:Какие платформы поддерживаются этим инструментом?
Ответ:Windows, z/OS, AIX, Linux, UNIX, HP-UX, Solaris, Mac и любые другие платформы, на которых есть JVM.
Вопрос: Я выполняю этот инструмент из окна защищенной оболочки на платформе Linux/Unix и получаю сообщения в командной строке, но не вижу графического интерфейса, и похоже, что инструмент завис.
Ответ: Окно графического интерфейса открывается на сервере, поддерживающем дисплей, в зависимости от настройки параметров DISPLAY. Нужно правильно экспортировать свои настройки DISPLAY. Проконсультируйтесь с администратором системы Unix.
Вопрос: Я пытаюсь перенести данные из PostgreSQL и не вижу присоединенного к инструменту драйвера PostgreSQL JDBC.
Ответ: Драйвер JDBC не прилагается к инструменту из соображений лицензирования. Драйвер базы данных JDBC нужно взять из своего лицензионного ПО.
Вопрос: Я использую этот инструмент для переноса данных из баз данных Oracle 7 и 8i. Можно ли применять при этом драйвер JDBC из Oracle 9g, 10g или 11g?
Ответ: Теоретически – ДА. Если что-то не так, попробуйте перейти на более ранние драйверы JDBC, такие как classes12.jar или classes111.jar.
Вопрос:С какими базами данных работает этот инструмент?
Ответ:С любыми, у которых есть драйвер JDBC типа IV. Так что можно работать с MySQL, PostgreSQL, Ingres, SQL Server, Sybase, Oracle, DB2 и другими БД. Можно также установить связь с базой данных, содержащей коннектор ODBC-JDBC, так что можно переносить данные и из Access.
Вопрос:С какой версией Java нужно использовать этот инструмент?
Ответ:Как минимум нужна версия Java 1.5. В основном Java 1.5 требуется для той части инструмента, которая связана с графическим интерфейсом. Если нужна поддержка Java 1.4.2, напишите мне, и я скомпилирую инструмент для Java 1.4.2, но графический интерфейс для создания сценариев переноса драйверов работать не будет.

Версию Java можно определить, выполнив следующую команду.


$ java -version
C:\>java -version
Вопрос:Как определить версию инструмента?
Ответ:Выполните IBMDataMovementTool -version в Windows или ./IBMDataMovementTool.sh -version в Linux/UNIX.
Вопрос:При попытке запустить инструмент я получаю сообщение об ошибке "Unsupported major.minor version 49.0" или "(.:15077): Gtk-WARNING **: cannot open display: ".
Ответ:Вы используете более раннюю версию Java , чем 1.5. Установите более позднюю версию, чем 1.4.2, и эта проблема будет решена. Мы рекомендуем установить IBM Java.
Вопрос:Какая информация требуется серверам исходной БД и DB2 для работы с этим инструментом?
Ответ:Нужно знать IP-адрес, номер порта, имя базы данных, идентификатор и пароль пользователя для исходной БД и DB2. Идентификатор пользователя исходной БД должен иметь привилегии DBA, а пользователь DB2 — привилегию SYSADM.
Вопрос:Я выполняю этот инструмент на рабочей станции Windows, и он работает очень медленно.
Ответ:По умолчанию память, выделяемая этому инструменту командным сценарием IBMDataMovementTool.cmd или IBMDataMovementTool.sh с использованием ключа –Xmx для JVM, составляет 990 МБ. Попробуйте уменьшить ее, так как, возможно, память вашей рабочей станции меньше.
Вопрос:Я выполняю перенос данных из SQL Server в DB2 и хочу, чтобы поле TEXT преобразовалось в VARCHAR в DB2.
Ответ:Укажите mssqltexttoclob=true в файле IBMExtract.properties.
Вопрос:Я выполняю перенос данных из Sybase в DB2, и инструмент не перенес в DB2 мои процедуры T-SQL.
Ответ:Задача этого инструмента – только перемещение DDL и данных. Для переноса процедур и триггеров нужно использовать MTK.
Вопрос:Я выполняю перенос DDL из Sybase в DB2, и мои объекты Sybase находятся в файле. Я не знаю, как указать файл DDL в качестве источника данных.
Ответ:Цель этого инструмента – высокоскоростной перенос данных, поэтому в нем не предусмотрена возможность преобразования файла DDL из исходной базы данных в DB2. Однако для преобразования DDL из исходной БД в целевую можно использовать IBM InfoSphere Data Architect.
Вопрос:Я выполняю перенос данных из MS Access в DB2 и не вижу в сгенерированном DDL всех индексов и т.п.
Ответ:Для связи с базой данных MS Access мы используем коннектор ODBC-JDBC. Для получения полного набора DDL вам понадобится другой коммерческий драйвер JDBC. Для MS Access можно попробовать драйвер JDBC HXTT. При использовании драйвера HXTT в сгенерированном сценарии выгрузки вместо access нужно указать DBVENDOR=hxtt.
Вопрос:Я выполняю перенос данных из Sybase в DB2 и получаю множество сообщений об ошибках.
Ответ:Возможно, что в вашей базе данных Sybase не включена необходимая поддержка JDBC. Проконсультируйтесь с администратором БД Sybase, чтобы установить на свою базу данных нужные хранимые процедуры.
Вопрос:Я переношу данные из MySQL в DB2, и мне не хватает памяти.
Ответ:Поэкспериментируйте со значениями FETCHSIZE=nnn в сгенерированном сценарии выгрузки и выполните перенос данных из командной строки. При использовании графического интерфейса инструмента он перепишет сценарий выгрузки.
Вопрос:Я выполняю перенос данных из Oracle в DB2 и заметил, что для этого требуется три файла jar. Насколько я понимаю, для переноса данных нужен только один драйвер JDBC. Что делают другие файлы jar?
Ответ:Остальные файлы JAR требуются главным образом для типов данных Oracle XML. Эти файлы берутся из каталога установки Oracle.
Вопрос:Я хочу, чтобы данные типа CLOB перешли в DB2 как DBCLOB.
Ответ:Войдите в файл IBMExtract.properties и установите DBCLOB=true.
Вопрос:Я использую этот инструмент для переноса данных из Oracle в DB2 и получаю множество сообщений об ошибках Oracle SQL о том, что таблица не найдена.
Ответ:Идентификатор пользователя, соединенный с Oracle, должен иметь привилегии DBA и SELECT_CATALOG_ROLE.
Вопрос:Я не хочу, чтобы NCHAR и NVARCHAR2 переходили в DB2 как GRAPHIC или VARGRAPHIC. Пусть они переходят как CHAR и VARCHAR2, так как я создал DB2 в формате UTF-8.
Ответ:Войдите в файл IBMExtract.properties и установите GRAPHIC=false.
Вопрос:Можно ли переносить данные из БД Oracle в версию DB2 до версии V9.7/V9.5?
Ответ:Да, войдите в IBMExtract.properties и установите db2_compatibility=false.
Вопрос:Я заметил, что ваш инструмент перенес NUMBER(38) из Oracle в NUMBER(31), и понял, что DB2 поддерживает номера только до 31. Мне не нужно округления, и я хочу преобразовать это в DOUBLE.
Ответ:Войдите в IBMExtract.properties и установите roundDown_31=false.
Вопрос:Я получаю множество отвергнутых данных. Как собрать эти данные в файл, чтобы можно было проанализировать причину их отклонения?
Ответ:Войдите в IBMExtract.properties и установите dumpfile=true.
Вопрос:Я пытаюсь загрузить данные из рабочей станции на сервер DB2 и получаю сообщения об ошибках. Разве этот инструмент можно выполнять только на сервере?
Ответ:Чтобы извлечь данные из исходной БД без промежуточного сервера, этот инструмент предпочтительно выполнять на сервере DB2. Однако если нужно работать с ним из промежуточного сервера, можно указать REMOTELOAD=TRUE в сгенерированном сценарии unload. Помните, что утилита DB2 LOAD требует, чтобы данные BLOBS/CLOBS/XML были доступны на сервере. Вам придется смонтировать эти каталоги с тем же соглашением об именах на целевом сервере DB2.
Вопрос:Я могу регистрироваться на своем сервере DB2 только через оболочку SSH, и нам не разрешается исполнять на сервере DB2 X-Windows. Как запустить этот инструмент графического интерфейса для переноса DDL и DATA?
Ответ:Выполните IBMDataMovementTool.sh из своего SSH, и если там нет поддержки графики, инструмент автоматически перейдет в режим командной строки. Если по какой-то причине это не решило проблему, укажите опцию –console в команде IBMDataMovementTool.sh, и она заставит инструмент работать в режиме интерактивной командной строки. Режим командной строки позволяет вводить данные и генерировать необходимые сценарии для переноса данных. Использование графического интерфейса – это просто способ генерации сценариев, а фактическая работа выполняется только сценариями.
Вопрос:Почему вы не создаете в своем сценарии базу данных DB2, раз спрашиваете имя базы данных?
Ответ:Aдминистраторы обычно предпочитают создавать свою базу данных в соответствии с собственной информацией о местонахождении накопителей. Однако мы создаем необходимые пространства таблиц, так что DB2 автоматически помещает таблицы в нужное пространство. Чтобы тщательно спланировать свою базу данных, прочтите рекомендации IBM. Рекомендуется создать базу данных DB2 с размером страниц по умолчанию 32К.

Загрузка

ОписаниеИмяРазмер
Инструмент IBM для переноса данных1IBMDataMovementTool.zip900 КБ

Заметка

  1. Для графического интерфейса пользователя этот инструмент использует пакеты JGoodies Forms 1.2.1, JGoodies Look 2.2.2 и JSyntaxPane 0.9.4.

Ресурсы

Научиться

Получить продукты и технологии

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Information Management
ArticleID=507600
ArticleTitle=DB2 9.7: Инструмент для переноса данных IBM Data Movement Tool
publish-date=08102009