Перемещение данных: DB2 - MySQL

Перенос навыков работы в DB2 для Windows

Если вы работаете администратором баз данных и отвечаете и за MySQL, и за IBM® DB2® Express-C, вам придется понять, как средства этих двух серверов баз данных коррелируют между собой. В этой статье вы познакомитесь со сравнимыми методами перемещения данных этих двух программ. Рассматриваются такие методы, как Import, Export, Load и другие специальные утилиты для перемещения данных.

Allan Tham, DB2 Presales Technical Support, IBM

Allan Tham works as a DB2 Content Manager Technical Presales Support for Business Partners in IBM Malaysia. Allan helps business partners solve a wide range of technical issues. Allan has DB2 Content Management certification for administration. Prior to joining IBM, Allan worked in an end user environment, where he was an Oracle DBA for 3 years.



22.03.2007

Введение и предыстория

28 июля 2006 г IBM объявила о выходе следующей версии DB2 для Linux®, UNIX® и Windows® сервера данных с гибридной технологией, который был разработан для того, чтобы отвечать жестким требованиям современного бизнеса. С этой версией пользователи получили первый промышленный сервер данных, который поддерживает собственный механизм хранения XML. Были также улучшены и другие функции, такие как сжатие, безопасность и средства автономной работы.

Обзоры и обсуждения в подробностях функций, поддерживаемых DB2 Express-C 9, можно найти на странице Управление информацией для DB2 for Linux, UNIX, and Windows на сайте developerWorks. Среди этих функций - PureXML™, которая обеспечивает предприятиям возможность использовать формат XML собственными средствами программы. Благодаря функции PureXML DB2 Express-C 9 больше не придется хранить документы в виде объектов LOB или делить их на объекты. Хотя эти возможности было бы желательно иметь малым и средним предприятиям, IBM DB2 Express-C поставляется не со всеми функциями, доступными в более сложных вариантах. В DB2 Express-C не входят следующие функции, которые имеются в других вариантах пакетов DB2 9:

  • Репликация (хотя поддерживается гомогенная репликация);
  • Функция разбиения базы данных;
  • Концентратор соединений Connection Concentrator;
  • DB2 Geodetic Extender;
  • Query Patroller;
  • Net Search Extender;
  • Compression (функция сжатия);
  • Label Base Access Control - LBAC (Базовое управление доступом по метке).

Конечно же, следует учитывать, что IBM DB2 Express-C 9 предполагает "бесплатное использование для разработки", "бесплатное использование для размещения", а также "бесплатное распространение".

Если сравнить DB2 Express-C 8 с DB2 Express-C 9, то можно обнаружить множество усовершенствований, которые в данной статье не рассматриваются. Однако перемещение данных остается практически неизменным по доступным функциям и функциональности. В этой статье приводятся обзор и практические рекомендации по перемещению данных в IBM DB2 Express-C 9.1. Речь пойдет, в основном, о функциях этой программы, но будут упомянуты и средства перемещения данных MySQL. Если вы уже знакомы с перемещением данных в MySQL, то можете сразу приступить к чтению материалов о перемещении данных в IBM DB2 Express-C 9.1в статье "MySQL data movement" (Перемещение данных в MySQL).


Рассматриваемые темы - Обзор

В этой статье сначала приводятся сведения о перемещении данных в MySQL. Затем рассматривается перемещение данных в IBM DB2 Express-C, которое делится на две темы.

  • Импорт - утилита Import и DB2 Load;
  • Экспорт - утилита Export;
  • Другие доступные инструменты.

MySQL: перемещение данных

Для перемещения данных в MySQL есть две основных утилиты: mysqldump и mysqlhotcopy. Хотя эти утилиты намного чаще используются для резервного копирования и восстановления базы данных, их можно использовать и для создания копий существующих таблиц или всей базы данных, тем самым, становится возможным перемещение данных (обычно баз данных малого и среднего размера) из одной базы данных в другую в пределах одного сервера или даже разных серверов. Выбор между mysqldump и mysqlhotcopy определяется размером копируемой базы данных, затратами ресурсов на настройку, механизмом блокировки, вариантами восстановления, типом таблиц и так далее. В таблице 1 сравниваются две утилиты, предоставляемые MySQL.

Хотя существует много способов создать копию базы данных или части базы данных, при помощи таких методов, как копирование на уровне операционной системы (O/S level copying_, выбор ... в файл вывода, mysqlsnapshot и горячее резервное копирование для InnoDB, в этой статье рассматриваются только утилиты mysqldump и mysqlhotcopy. Сравнение различных ранее упомянутых методов с рассмотрением всех "за" и "против", в данной статье не производится.

В mysqldump, чтобы скопировать, например, всю базу данных полностью, вероятно самый распространенный способ - это выполнить следующую команду:

Листинг 1. Создание полной копии базы данных при помощи mysqldump
mysqldump --opt db_name > backup-file.sql

Для обратного импорта базы данных выполните следующую команду:

Листинг 2. Импортирование всей базы данных при помощи mysqldump
mysql db_name < backup-file.sql

Некоторые важные флаги, поддерживаемые mysqldump, перечислены ниже в листинге 3. Чтобы получить полный список, выполните команду mysqldump -?.

Листинг 3. Параметры mysqldump
  -A, --all-databases Создает дамп всех баз данных. 
  Результат соответствует команде --databases, если выбраны все базы данных.
  --add-drop-database Добавляет 'DROP DATABASE' перед каждым созданием.
  --add-drop-table    Добавляет команду 'drop table' перед каждым созданием.
  --add-locks            Добавляет блокировки по вставленным предложениям.
  --allow-keywords  Разрешает использование в имени столбца ключевых слов.
  --character-sets-dir=name.  Каталог, где находятся файлы кодировок.
  -c, --complete-insert Разрешает использовать вставку полных предложений.
  -C, --compress      Использует сжатие для протокола сервер/клиент.
  --create-options    Включает все специфические опции создания MySQL.
  -B, --databases     Для создания дампа отдельных баз данных. 
  Обратите внимание на различие в применении;
  В этом случае ни одна из таблиц не является данной. Все аргументы имени
считаются именами баз данных. 'USE db_name;' будет включено в вывод.
 Задает кодировку по умолчанию.
  --delayed-insert    Вставляет строки с INSERT DELAYED;
  --delete-master-logs Удаляет журналы на master после резервного копирования. 
  При этом автоматически включаются
 --master-данные
  -e, --extended-insert   Разрешает использование нового, 
  более быстрого синтаксиса INSERT.
  --fields-terminated-by=name  Поля в текстовом файле заканчиваются на ...
  --fields-enclosed-by=name Поля в файле импорта (importfile) заключаются в ...
  --fields-optionally-enclosed-by=name Поля в файле i.file могут заключаться в ...
  --fields-escaped-by=name  Поля в файле i.file заключены в escape-символы ...
  --order-by-primary  Сортирует все записи таблицы по первичному ключу, 
  или сначала по уникальному
 ключу, если таковой существует.  Это полезно при создании дампа таблиц MyISAM
для загрузки в таблицу InnoDB, но при этом создание
дампа займет намного больше времени.
  --single-transaction При создании дампа всех таблиц генерирует последовательные снимки в
пределах одной транзакции. Работает ТОЛЬКО для таблиц, сохраненных по
механизму хранения, который поддерживает работу с несколькими версиями (сейчас
это только InnoDB); целостность дампа НЕ гарантируется
при использовании других механизмов хранения. Опция
автоматически выключает --блокировку таблиц.
   -T, --tab=name  Создает текстовый файл с разделителем "табуляция" 
   для каждой таблицы, расположенной по данному
пути (создает файлы .sql и .txt). ПРИМЕЧАНИЕ: Это справедливо только в том случае,
если  утилита mysqldump запущена на том же компьютере, что и
демон mysqld.
   --tables            Отменяет параметр --databases (-B).
   --triggers          Создает дамп триггера для каждой таблицы, для которой создан дамп
   -X, --xml           Создает дамп базы данных в виде правильно сформированного XML.

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

Таблица 1. Сравнение mysqldump и mysqlhotcopy
Свойства/функцииmysqldumpmysqlhotcopyПримечание
Копирование подмножества базы данныхДаДаОбе утилиты допускают копирование подмножества базы данных
Копирование базы данных полностьюДаДаОбе утилиты допускают копирование базы данных полностью
Копирование нескольких баз данных ДаДаmysqldump использует параметр --all-databases для создания дампа нескольких баз данных за один проход
mysqlhotcopy использует флаг --regexp для сопоставления базы данных с копией
Поддержка удаленной работыДаДаОбе утилиты поддерживают создание дампа данных из удаленного расположения
Текстовые форматы файловДаНетMysqldump поддерживает текстовый формат
Поддержка сжатияДаНетMysqldump поддерживает сжатие
Поддержка регулярных выраженийНетДаФлаг mysqlhotcopy--regexp позволяет использовать регулярные выражения для копирования всех баз данных с именами, которые выполняют требования данных регулярных выражений
Включены в пакетДаДаОбе утилиты бесплатны
Включение DDLДаДаMysqldump допускает использование флага
Пробный прогон создания дампаНетДаmysqlhotcopy допускает пробный прогон без реального создания дампа данных, для этого используется флаг --dryrun
Возможность включения в дамп индексовДаДаОбе утилиты позволяют включать в дамп индексы. Mysqldump использует флаг --disable-keys, чтобы не создавать индекс, только для таблиц MyISAM. Mysqlhotcopy использует флаг --noindices.
Блокировка для создания дампа.НетДаMysqldump использует флаг --add-locks, который окружает каждый дамп таблицы операторами lock tables и unlock tables. Mysqlhotcopy использует lock tables и flush tables.
Поддержка всех механизмов хранения данныхДаНетMysqldump поддерживает все механизмы, тогда как mysqlhotcopy поддерживает только MyISAM и ARCHIVE

Остальная часть статьи посвящена тому, как осуществляется перемещение данных в IBM DB2 Express-C.


DB2 Import

Что такое DB2 Import? В отличие от утилит MySQL mysqldump и mysqlhotcopy, которые имеют двойное применение - для резервного копирования и восстановления и перемещения данных, DB2 Import (db2import) - это утилита, предоставляемая IBM DB2 Express-C 9.1 (и другими серверами данных DB2) для импортирования данных из файлов различных форматов либо в таблицу, либо в обновляемое представление. В отличие от MySQL, для резервного копирования и восстановления данных DB2 поставляется с механизмом резервного копирования и восстановления при помощи утилит db2backup и db2recover. В статье "DB2 versus MySQL backup and recovery" (Резервное копирование и восстановление данных: DB2 и MySQL) (сайт developerworks, июнь 2006 года) дается сравнительный обзор функций резервного копирования и восстановления данных MySQL и IBM DB2 Express-C 9.1.

В DB2 Import существует несколько ключевых свойств. Чтобы использовать утилиту DB2 Import, необходимо получить соответствующие привилегии и системные полномочия, без которых вы не сможете выполнить импорт, не получив сообщений об ошибке. Привилегии и системные полномочия, необходимые для импорта файлов в базу данных, перечислены в следующей таблице:

Таблица 2. Системные полномочия и привилегии для DB2 Import
ДействияСистемные полномочияПривилегииПримечание
На создание новой таблицыSYDADM/DBADMCREATETABDB2 Import позволяет создавать новые таблицы "на лету" в процессе импортирования. Применяется только к таблице.
На вставку данных в существующую таблицуSYDADM/DBADMCONTROL, INSERT и SELECTПрименяется к таблицам и представлениям
На замену данных в существующей таблицеSYDADM/DBADMCONTROL/(INSERT, SELECT, UPDATE и DELETE)Те же привилегии применяются к существующей таблице
На добавление данных к существующей таблицеSYDADM/DBADMПривилегии SELECT и INSERTТе же привилегии применяются к существующей таблице

Как и другие задачи администрирования, DB2 Import может выполняться через обработчик командной строки CLP и интерфейс DB2 Control Center. Давайте рассмотрим возможности импорта и их применение чуть более подробно.

DB2 Import предоставляет гибкие способы для импорта файлов из внешних приложений, тех же сторонних источников, что и другие базы данных, доступные на рынке. Новое в IBM DB2 Express-C - это встроенные средства хранения данных XML (вместо поддержки внешних средств XML) и поддержка импорта. В IBM DB2 Express-C вы можете импортировать в базу данных документы XML. DB2 также хранит XML в собственном разобранном иерархическом формате в модели данных XQuery Data Model (XDM). В процессе импорта вы можете выбрать проверку корректности импортируемых документов XML. Ошибка выдается для неправильных данных при заданной проверке корректности в процессе импорта XML.

Справку по синтаксису для DB2 Import можно получить через команду db2 ? import:

Листинг 4. Синтаксис DB2 Import
 IMPORT FROM filename OF {IXF | ASC | DEL | WSF}
[LOBS FROM lob-path [ {,lob-path} ... ] ]
[XML FROM xml-path [ {,xml-path} ... ] ][MODIFIED BY filetype-mod ...]
[METHOD {L ( col-start col-end [ {,col-start col-end} ... ] )
[NULL INDICATORS (col-position [ {,col-position} ... ] )] |
N ( col-name [ {,col-name} ... ] ) |
P ( col-position  [ {,col-position} ... ] )}]
[XMLPARSE {STRIP | PRESERVE} WHITESPACE]
[XMLVALIDATE USING {XDS [DEFAULT schema-sqlid]
[IGNORE (schema-sqlid [ {,schema-sqlid} ... ])]
[MAP ((schema-sqlid,schema-sqlid) [ {(schema-sqlid,schema-sqlid)} ... ])] |
SCHEMA schema-sqlid | SCHEMALOCATION HINTS }]
[ALLOW {NO | WRITE} ACCESS]
[COMMITCOUNT {n | AUTOMATIC}] [{RESTARTCOUNT | SKIPCOUNT} n]
[ROWCOUNT n] [WARNINGCOUNT n] [NOTIMEOUT] [MESSAGES message-file]
{{INSERT | INSERT_UPDATE | REPLACE | REPLACE_CREATE}
INTO {table-name [( insert-column , ... )] | hierarchy-description}
| CREATE INTO {table-name [( insert-column , ... )] |
hierarchy-description {AS ROOT TABLE | UNDER sub-table-name}
[IN tablespace-name [INDEX IN tablespace-name] [LONG IN tablespace-name]]}
  filetype-mod:
    COMPOUND=x, INDEXSCHEMA=schema, FORCEIN, INDEXIXF, IMPLIEDDECIMAL,
    NOCHECKLENGTHS, NOEOFCHAR, NULLINDCHAR, RECLEN=x, STRIPTBLANKS,
    STRIPTNULLS, NO_TYPE_ID, NODOUBLEDEL, LOBSINFILE, USEDEFAULTS,
    CHARDELx, COLDELx, DLDELx, DECPLUSBLANK, DECPTx, DATESISO,
    DELPRIORITYCHAR, IDENTITYMISSING, IDENTITYIGNORE,
    GENERATEDMISSING, GENERATEDIGNORE, DATEFORMAT=x, TIMEFORMAT=x,
    TIMESTAMPFORMAT=x, KEEPBLANKS, CODEPAGE=x, NOROWWARNINGS,
    NOCHARDEL, USEGRAPHICCODEPAGE
  hierarchy-description:
    {ALL TABLES | (sub-table-name [(insert-column, ...)], ...)} [IN]
    HIERARCHY {STARTING sub-table-name | (sub-table-name, ...)}

Наряду с другими доступными опциями, отметим, что DB2 Import поддерживает четыре формата файлов:

  • DEL: Формат ASCII с разделителями для обмена данными с различными менеджерами баз данных и файловыми менеджерами. Этот распространенный формат хранения данных использует специальные символы разделителей, чтобы разделить значения столбцов. Разделителем по умолчанию является запятая;
  • ASC: Формат ASCII без разделителей для импорта и загрузки данных из других приложений, создающих файлы в формате простого текста с выровненными столбцами данных;
  • PC/IXF: PC-версия интегрированного формата обмена данными (Integrated Exchange Format, IXF), способ обмена данными, часто используемый файловыми менеджерами. PC/IXF - это структурированное описание таблицы базы данных, которое содержит внешнее представление внутренней таблицы;
  • WSF: Work-sheet format (формат рабочего листа) для обмена данными с такими продуктами, как Lotus 1-2-3 и Symphony.

А сейчас давайте рассмотрим несколько примеров использования утилиты DB2 Import при помощи команд через обработчик командной строки CLP. Далее вы сможете увидеть, как подобные задачи импорта можно выполнять через интерфейс DB2 Control Center. Чтобы выполнить пробный пример импорта, можно загрузить IBM DB2 Express-C 9. Установив программу, выполните команду db2 db2sampl -sql -xml -schema 'db2admin'. (Убедитесь, что включили кодировку UTF-8 для базы данных, в противном случае вы получите ошибку SQL 1239N).

Несколько примеров импорта, которые включены в данную статью:

  • Импорт XML-данных (с проверкой корректности или без нее);
  • Импорт файла с разделителем в виде символа перенаправления (|) в режиме вставки.

Чтобы импортировать XML-документы, часто необходимо убедиться, что данный XML-документ является правильным. Неправильно отформатированные XML-документы могут вызвать проблемы в процессе импортирования. Хороший способ - всегда регистрировать схемы, а в процессе импорта выбрать правильную схему и провести проверку корректности. Примеры в данной статье показывают импортирование как с проверкой корректности, так и без нее. Импортировать XML-документы несложно. Выполните перечисленные ниже шаги:

  1. Убедитесь, что у вас есть уже созданная таблица со столбцом XML;
  2. Используйте команду, представленную в листинге 5 для импорта документов XML без проверки корректности. Обратите внимание, что в любой импорт включается сообщение. Если произойдет ошибка, то можно провести отладку из файла сообщения. Это более простой способ позволяет быстрее исправить ошибку .
    Листинг 5. Импорт XML-документов в DB2 Import при помощи команд через обработчик командной строки
    IMPORT FROM "D:\XMLPoT\labdoc\scripts\data\import.del" 
    OF DEL XML FROM "D:\XMLPoT\labdoc\scripts\data" METHOD P (1) 
          MESSAGES "D:\db2in\xmlemp1.log" 
             INSERT INTO DB2ADMIN.XMLEMP (EMP);

    где D:\XMLPoT\labdoc\scripts\data\import.del содержит запись ссылок на реальные документы.

    Примерное содержания файла import.del:
    Листинг 6. Примерное содержание файла import.del
          "<XDS FIL='emp.001.xml' />"
          "<XDS FIL='emp.002.xml' />"
          "<XDS FIL='emp.003.xml' />"
          "<XDS FIL='emp.004.xml' />"
          "<XDS FIL='emp.005.xml' />"
          "<XDS FIL='emp.006.xml' />"
          "<XDS FIL='emp.007.xml' />"

    В случае успешной загрузки вы должны увидеть примерно следующее сообщение в файле сообщения:
    Листинг 7. Успешный импорт
    SQL3109N  The utility is beginning to load data from file 
    "D:\XMLPoT\labdoc\scripts\data\import.del".
    
    SQL3110N  The utility has completed processing.  
    "42" rows were read from the input file.
    
    SQL3221W  ...Begin COMMIT WORK. Input Record Count = "42".
    
    SQL3222W  ...COMMIT of any database changes was successful.
    
    SQL3149N  "42" rows were processed from the input file.  
    "42" rows were successfully inserted into the table. 
    "0" rows were rejected.
  3. В большинстве случаев, если данные получены с внешних систем, лучше провести проверку корректности XML Import Чтобы выполнить проверку корректности, зарегистрируйте XML-схему при помощи команды db2 register xmlschema для регистрации схемы в репозитории схем XML (XSR), и завершите этот процесс, выполнив команду db2 complete xmlschema. Вы можете просмотреть список зарегистрированных схем через системный каталог, SYSCAT.XSROBJECTS. После регистрации схемы команда для импорта XML-документа содержит ключевое слово XMLVALIDATE;
    Листинг 8. Импортирование документов утилитой DB2 Import через обработчик командной строки -- с проверкой корректности
    IMPORT FROM "D:\XMLPoT\labdoc\scripts\data\import.del" 
    OF DEL XML FROM "D:\XMLPoT\labdoc\scripts\data" 
          METHOD P (1) XMLVALIDATE USING SCHEMA DB2ADMIN.XMLEMP 
             MESSAGES "D:\db2in\xmlemp2.log" 
             INSERT INTO DB2ADMIN.XMLEMP (EMP);
  4. С проверкой корректности в качестве защитной меры и в целях поддержания чистоты данных, любое несоответствие будет возвращено в файл сообщения в виде ошибки;
    Листинг 9. DB2 Import с ошибкой проверки корректности XML
    SQL3109N  The utility is beginning to load data from file 
    "D:\XMLPoT\labdoc\scripts\data\import.del".
    
    SQL3148W  A row from the input file was not inserted into the table.  
    SQLCODE "-16196" was returned.
    
    SQL16196N  XML document contains an element "deptno" that is 
    not correctly specified. Reason code = "37"  SQLSTATE=2200M
    
    SQL3185W  The previous error occurred while processing data 
    from row "42" of the input file.
    
    SQL3110N  The utility has completed processing.  
    "42" rows were read from the input file.
    
    SQL3221W  ...Begin COMMIT WORK. Input Record Count = "42".
    
    SQL3222W  ...COMMIT of any database changes was successful.
    
    SQL3149N  "42" rows were processed from the input file. 
     "41" rows were successfully inserted into the table.  
          "1" rows were rejected.
  5. Чтобы выполнить аналогичную задачу, то есть, импортирование XML-документов с проверкой корректности, через интерфейс DB2 Control Center, следует пройти всего несколько шагов, большинство из которых интуитивно понятны и просты для выполнения благодаря интернет-справке, которой можно воспользоваться, если вы зашли в тупик. Для вызова утилиты DB2 Import запустите DB2 Control Center, перейдите к нужной таблице и нажмите на ней правой кнопкой мыши, чтобы выбрать import, как показано на рисунке 1;
    Рисунок 1. Вызов утилиты DB2 Import из DB2 Control Center
    Вызов утилиты DB2 Import из DB2 Control Center
  6. Задайте импортируемый файл, режим импортирования (INSERT, INSERT_UPDATE, REPLACE), и файл сообщений. Сообщение подскажет вам, какие ошибки произошли при импорте;
    Рисунок 2. DB2 Import - Задание импортируемого файла, режима импортирования и файла сообщений.
    Вызов утилиты DB2 Import из DB2 Control Center
  7. Нажмите кнопку DEL OPTIONS, чтобы отобразить окно, в котором можно выбрать опцию проверки корректности XML-схемы. Выберите эту опцию. Перейдите на вкладку OPTIONS для выбора правильной XML-схемы, по которой будет проверяться корректность. Здесь следует выбрать второй вариант, Validate all documents using a specific XML schema, этот вариант - наиболее часто используется для проверки корректности XML. В этом окне выделите XMLEMP и нажмите кнопку OK;
    Рисунок 3. DB2 Import - задание проверки корректности XML
    Задание проверки корректности XML
  8. Теперь выберите место расположения импортируемых XML-документов. Обратите внимание на то, что утилита DB2 Import поддерживает также импорт объектов LOB. Можно также контролировать характер идентичности и генерируемых столбцов, если выбрать из списка default, ignore или missing;
    Рисунок 4. DB2 Import - выбор места размещения документов XML
    Выбор места размещения документов XML
  9. И, наконец, можно запланировать импорт XML-документов, который может быть выполнен однократно или повторно по расписанию.
    Рисунок 5. DB2 Import - Расписание импорта
    Расписание импорта

Мы уже видели ранее при импорте документов XML с использованием утилиты DB2 Import, что импортирование файлов с разделителями может прекрасно быть выполнено точно таким же способом при помощи обработчика командной строки. Например, команда, показанная ниже, импортирует текстовый файл с разделителями - символами перенаправления в таблицу employee:

Листинг 10. Импорт файла с разделителем "символ перенаправления" при помощи утилиты DB2 Import
IMPORT FROM "D:\db2out\employee.dat" OF DEL MODIFIED BY COLDEL| 
      METHOD P (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14) 
         MESSAGES "D:\db2out\employee2.log" 
         INSERT INTO DB2ADMIN.EMPLOYEE 
(EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT, PHONENO, HIREDATE, JOB, EDLEVEL, 
SEX, BIRTHDATE, SALARY, BONUS, COMM);

Утилита DB2 Import поддерживает два режима блокировки таблиц - автономный и оперативный. В автономном режиме (ALLOW NO ACCESS), доступ к импортируемой таблице не разрешается. Автономный режим - это поведение по умолчанию, поскольку в начале импорта устанавливается блокировка с монополизацией. Оперативный режим дает возможность пользователям обращаться к данным в процессе импортирования. Этот режим разрешает фиксацию через определенные промежутки времени, чтобы предотвратить взаимоблокировку. LOB объекты можно импортировать как обычные данные. Для хранящихся отдельно в нескольких файлах объектов LOB необходимо использовать модификатор типа файла LOBSINFILE. Утилита DB2 import может осуществлять импорт данных не только в таблицу, но и в иерархию, псевдоним или представление.

Благодаря исключительной гибкости, предоставляемой DB2 Import и тому, что поддерживаются различные форматы файлов, нет ничего необычного в том, что существуют длинные списки модификаторов типа файла для этой утилиты. Полный список модификаторов можно найти в DB2 9.1 Data Movement Utilities Guide and Reference (Справочном руководстве по утилитам для перемещения данных DB2 9.1). Вот некоторые из наиболее часто используемых модификаторов: codepage, dateformat, timestampformat, reclen и coldel. Хотя утилита DB2 Import допускает достаточную гибкость в применении, скорость работы у нее меньше, чем у DB2 Load. Для больших таблиц утилита DB2 Load более предпочтительна. Однако обратите внимание на то, что DB2 Load, хотя и работает быстрее, не позволяет загружать данные в иерархии и псевдонимы. А DB2 Import поставляется со своей порцией ограничений.

Полный список ограничений на импорт для IBM DB2 Express-C включает следующие позиции:

  • Первичный ключ, на который ссылается внешний ключ в зависимой таблице, нельзя заменить; допускается только добавление ключа;
  • Не допускается импорт данных в системную таблицу или таблицу со структурированными столбцами;
  • Нельзя импортировать данные в объявленную временную таблицу;
  • При помощи утилиты импорта можно создавать только таблицы; представления создавать нельзя;
  • Ссылочные ограничения и описания внешнего ключа не сохраняются при создании таблиц из файлов PC/IXF;
  • Может быть превышен максимальный размер предложения в 2MB для сгенерированных предложений импорта;
  • Нельзя повторно создать таблицы, содержащие столбцы XML.

И, наконец, IBM DB2 Express-C поставляется с API с примерами кода, чтобы дать возможность пользователю написать собственные программы для импорта. Примеры кода поставляются с дистрибутивом IBM DB2 Express-C.


Утилита DB2 Load

DB2 Load - еще одно средство для загрузки больших объемов данных из текстовых файлов, лент или именованных каналов в таблицы DB2. Однако утилита DB2 Load не позволяет создавать таблицы "на лету" во время загрузки. Другими словами, необходимые таблицы и их индексы должны быть созданы до загрузки.

В работе DB2 Load можно выделить четыре этапа:

  • Загрузка: На этом этапе данные записываются в таблицу, а после загрузки данных в таблицу собираются ключи индекса и статистика по таблице, если это необходимо. Контрольные точки сохранения (точки непротиворечивости) для обеспечения восстановления устанавливаются с интервалами, определенными параметром SAVECOUNT команды LOAD. В момент сохранения точки генерируются сообщения, которые показывают, сколько записей было загружено на этот момент. Если происходит ошибка, можно перезапустить операцию загрузки; параметр RESTART может автоматически перезапустить операцию загрузки с последней успешной контрольной точки непротиворечивости; можно также использовать параметр TERMINATE, который выполняет откат незавершенной операции загрузки;
  • Создание индекса: Это этап создания индекса. На данном этапе создаются индексы на основе ключей индекса, собранных на этапе загрузки. Ключи индекса сортируются в процессе загрузки, при этом собирается статистика по индексам (если был задан параметр STATISTICS USE PROFILE, а профиль показывает сбор статистики по индексу). Собираются те же статистические данные, которые собирает команда RUNSTATS. Если на этапе создания индекса происходит ошибка, то параметр RESTART автоматически перезапускает операцию загрузки с соответствующей точки;
  • Удаление: На этом этапе из таблицы удаляются записи, которые вызвали нарушение уникального ключа. Обычно нарушения уникального ключа помещаются в таблицу исключений (если такая таблица определена), а сообщения об удаленных записях записываются в файл сообщений, заданный параметром MESSAGE. Чтобы гарантировать успешное выполнение процесса загрузки, вам нужно просмотреть сообщения и решить любые проблемы. Для этого часто требуется вставить исправленные записи в таблицу, с того места, где произошла остановка. Не пытайтесь удалять или изменять какие-либо временные файлы, созданные утилитой load. Некоторые временные файлы являются критически важными на этапе удаления. Так же, как и на этапе построения индекса, если произойдет ошибка во время этапа удаления, параметр RESTART автоматически перезапустит операцию загрузки данных с соответствующей точки;
  • Копирование индекса: На этом этапе данные индекса копируются из системного временного пространства таблиц в оригинальное пространство таблиц. Это происходит только в том случае, если системное временное пространство таблиц было определено для создания индекса в процессе операции загрузки при задании параметра READ ACCESS.

Утилита DB2 Load поддерживает четыре формата данных:

  • ASC (формат ASCII без разделителей);
  • DEL (формат ASCII с разделителями);
  • IXF (интегрированный формат обмена данными версия для PC), экспортированный из той же или другой таблицы DB2;
  • Определенный пользователем CURSOR (курсор, объявленный для операторов SELECT или VALUES). Обычно пользователь должен написать сценарий.

Аналогично утилите DB2 Import, DB2 Load требует наличия некоторых системных полномочий и привилегий. Необходимы системные полномочия SYSADM или DBADM или, по меньшей мере, системные полномочия LOAD с соответствующими привилегиями, которые показаны в следующей таблице:

Таблица 3. Системные полномочия и привилегии для DB2 Load
ДействияСистемные полномочияПривилегииПримечание
Загрузка в режимах INSERT, TERMINATE и RESTARTLOADINSERTДля загрузки в режимах INSERT, TERMINATE и RESTART необходима привилегия на вставку.
Загрузка в режимах REPLACE, TERMINATE и RESTARTLOADINSERT и DELETEПривилегии INSERT и DELETE требуются для работы с DB2 Load в режимах REPLACE, TERMINATE и RESTART

Утилиту загрузки можно вызвать через обработчик командной строки (CLP), мастер загрузки (Load wizard) в Control Center или через интерфейс прикладного программирования (API) утилиты db2Load. Чтобы начать демонстрацию средств DB2 Load, давайте начнем с обработчика командной строки. Полное описание синтаксиса командной строки для DB2 Load можно получить, если набрать в командной строке db2 ? load. Ниже, в листинге 11, приведен полный синтаксис DB2 Load. Хотя он работает для среды с разбиением, мы все же продолжаем рассматривать среду с единственным разделом поскольку IBM DB2 Express-C не укомплектована функцией разбиения данных Data Partitioning Feature (DPF).

Листинг 11. Синтаксис DB2 Load
      LOAD [CLIENT] FROM file/pipe/dev/cursor_name [ {,file/pipe/dev} ... ]
      OF {ASC | DEL | IXF | CURSOR}
      [LOBS FROM lob-path [ {,lob-path} ... ] ]
      [MODIFIED BY filetype-mod [ {filetype-mod} ... ] ]]
      [METHOD {L ( col-start col-end [ {,col-start col-end} ... ] )
                  [NULL INDICATORS (col-position [ {,col-position} ... ] )]
             | N ( col-name [ {,col-name} ... ] )
             | P ( col-position  [ {,col-position} ... ] )}]
      [SAVECOUNT n]
      [ROWCOUNT n] [WARNINGCOUNT n] [MESSAGES msg-file]
      [TEMPFILES PATH pathname]
      {INSERT | REPLACE | RESTART | TERMINATE}
      INTO table-name [( insert-column [ {,insert-column} ... ] )]
      [FOR EXCEPTION table-name [NOUNIQUEEXC NORANGEEXC]]
      [STATISTICS {NO | USE PROFILE}]
      [{COPY {NO | YES { USE TSM [OPEN num-sess SESSIONS]
                       | TO dir/dev [ {,dir/dev} ... ]
                       | LOAD lib-name [OPEN num-sess SESSIONS]}}
                       | NONRECOVERABLE} ]
      [HOLD QUIESCE] [WITHOUT PROMPTING] [DATA BUFFER buffer-size]
      [SORT BUFFER buffer-size] [CPU_PARALLELISM n] [DISK_PARALLELISM n]
      [INDEXING MODE {AUTOSELECT | REBUILD | INCREMENTAL | DEFERRED}]
      [SET INTEGRITY PENDING CASCADE {DEFERRED | IMMEDIATE}]
      [ALLOW NO ACCESS | ALLOW READ ACCESS [USE tblspace-name]] [LOCK WITH FORCE]
      [[PARTITIONED DB CONFIG] partitioned-db-option [{partitioned-db-option}...]]
        filetype-mod:
          NOROWWARNINGS, ANYORDER, BINARYNUMERICS, CODEPAGE=x,
          DUMPFILE=x, FASTPARSE, NOHEADER, TOTALFREESPACE=x,
          INDEXFREESPACE=x, PAGEFREESPACE=x, FORCEIN, IMPLIEDDECIMAL,
          PACKEDDECIMAL, NOCHECKLENGTHS, NOEOFCHAR, NULLINDCHAR=x,
          RECLEN=x, STRIPTBLANKS, STRIPTNULLS, NODOUBLEDEL, LOBSINFILE,
          CHARDELx, COLDELx, DLDELx, DECPLUSBLANK, DECPTx, DATESISO,
          DELPRIORITYCHAR, USEDEFAULTS, DATEFORMAT=x, TIMEFORMAT=x,
          TIMESTAMPFORMAT=x, ZONEDDECIMAL, KEEPBLANKS, IDENTITYMISSING,
          IDENTITYIGNORE, IDENTITYOVERRIDE, GENERATEDMISSING,
          GENERATEDIGNORE, GENERATEDOVERRIDE, USEGRAPHICCODEPAGE
        partitioned-db-option:
          HOSTNAME x, FILE_TRANSFER_CMD x, PART_FILE_LOCATION x, OUTPUT_DBPARTNUMS x,
          PARTITIONING_DBPARTNUMS x, MODE x, MAX_NUM_PART_AGENTS x, OMIT_HEADER,
          ISOLATE_PART_ERRS x, STATUS_INTERVAL x, PORT_RANGE x, CHECK_TRUNCATION,
          MAP_FILE_INPUT x, MAP_FILE_OUTPUT x, TRACE x, NEWLINE, DISTFILE x

Давайте продолжим рассмотрение практики работы с утилитой DB2 Load; научимся вызывать утилиту DB2 Load. И здесь также существует три способа вызвать утилиту DB2 Load -- через обработчик командной строки (CLP), мастер загрузки (Load wizard) в Control Center или через интерфейс прикладного программирования (API) db2Load. Например, чтобы загрузить текстовый файл без разделителей, можно выполнить следующую команду (в упрощенной форме):

Листинг 12. Команда DB2 Load
LOAD FROM "D:\db2out\employee.dat" OF DEL METHOD P (1, 2, 3, 4, 5, 6, 7, 
8, 9, 10, 11, 12, 13, 14) 
MESSAGES "D:\db2load\employee.log" 
INSERT INTO DB2ADMIN.EMPLOYEE (EMPNO, FIRSTNME, MIDINIT, LASTNAME, WORKDEPT,
                               PHONENO, HIREDATE, JOB, EDLEVEL, SEX, BIRTHDATE, 
                               SALARY, BONUS, COMM) 
COPY NO INDEXING 
MODE AUTOSELECT;

Хотя дополнительные опции, которые можно выбрать из синтаксиса командной строки, обычно рассматриваются как гибкие и эффективные, их выбор может стать непростой задачей. Еще один способ начать загрузку -- это воспользоваться интерфейсом DB2 Control Center, который поставляется в комплекте с интернет-справкой, способной дать подходящие рекомендации в режиме мастера. DB2 Control Center предоставляет простой, направляемый способ, позволяющий легко пройти через процесс загрузки, даже если вы не очень в этом разбираетесь. На следующих шагах мы загрузим текстовый файл с разделителями в таблицу employee, чтобы получить представление о том, как можно выполнить загрузку через интерфейс DB2 Control Center.

  1. После того, как вы вызовете утилиту DB2 Load путем выбора таблицы employee, а затем выберете Load, перед вами предстанет окно, показанное на рисунке 6.

    Обратите внимание на то, что мастер состоит из восьми шагов. Но вы можете выбрать настройки по умолчанию, нажимая во всех окнах мастера кнопку Next. На каждом шаге предоставляются различные опции, некоторые из которых могут оказаться необходимыми в вашей конкретной среде. В нашем простом примере для первого шага выберите вариант по умолчанию Append data to a table. В этом режиме вы можете разрешить пользователям обращаться к данным в процессе выполнения загрузки. Для продолжения нажмите кнопку Next;
    Рисунок 6. DB2 Load - Шаг 1. Добавить или заменить
    DB2 Load - Шаг 1. Добавить или заменить
  2. Второй шаг позволяет вам выбрать формат (по умолчанию выбран DEL). На этом шаге выберите место размещения файла ввода и файла сообщений -- - локальное, то есть на том же компьютере, где запущена утилита DB2 Load, или удаленное. Вы можете также задать общее количество записей, которые нужно обработать. Для продолжения нажмите кнопку Next;
    Рисунок 7. DB2 Load - Шаг 2. Определение места размещения файлов
    Рисунок 7. DB2 Load - Шаг 2. Определение места размещения файлов
  3. На этом шаге можно задать место размещения объектов LOB. Можно задать также характер идентичности и поведение генерируемых столбцов. Можно также выбрать, какие столбцы следует включить в загрузку. Согласитесь с параметрами по умолчанию и нажмите кнопку Next;
    Рисунок 8. DB2 Load - Шаг 3. Определение места размещения файлов
    Рисунок 7. DB2 Load - Шаг 3. Определение места размещения файлов
  4. Предусмотрено три варианта создания индекса -- инкрементный, повторный, или по выбору DB2 Load (предполагается, что DB2 Load выберет наилучший способ создания индекса). Доступны несколько уровней управления приложениями, и, наконец, DB2 Load имеет встроенные средства, позволяющие повысить производительность после загрузки;
    Рисунок 9. DB2 Load - Шаг 4. Параметры для индекса, приложений и производительности
    DB2 Load - Шаг 4. Параметры для индекса, приложений и производительности
  5. В процессе работы DB2 Load может произойти аварийное завершение работы системы. Чтобы обеспечить пользователю возможность восстановления с момента аварии, DB2 Load предоставляет функцию аварийного восстановления, позволяя задать контрольную точку непротиворечивости данных. Поскольку в процессе выполнения транзакции DB2 Load регистрирует минимум информации, может быть желательным прямое восстановление. На этом шаге можно выбрать вариант "recoverable", при котором вы сможете сохранить образ резервной копии, или "unrecoverable", чтобы отключить восстановление в случае, если произойдет сбой;
    Рисунок 10. DB2 Load - Шаг 5. Варианты восстановления
    Рисунок 10. DB2 Load - Шаг 5. Варианты восстановления
  6. Имеет смысл позволить выбрать правильные настройки производительности утилите DB2 configuration advisor, если вы не уверены, что сделаете это правильно. Здесь можно выбрать и некоторые другие параметры, в том числе место размещения таблицы исключений, файлы дампа исключений, которые будут содержать удаленные записи, и отказаться от отображения предостерегающих сообщений.
    Рисунок 11. DB2 Load - Шаг 6. Дополнительные опции
    Рисунок 10. DB2 Load - Шаг 6. Дополнительные опции

Шаги 7 и 8 позволяют составить расписание (как показано ранее при описании импорта при помощи утилиты DB2 Import). А последнее окно мастера показывает сводку выбранных вами параметров.

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

  • Загрузка данных в псевдонимы, иерархии, типизированные таблицы, объявленные временные таблицы, загрузка данных в таблицы, содержащие столбцы XML или в таблицы со столбцами структурированного типа не поддерживаются;
  • Оригинал данных в таблице теряется, если в процессе операции LOAD REPLACE возникает ошибка. Мера предосторожности - сохранить копию вводимых данных, чтобы можно было перезапустить операцию загрузки в случае сбоя;
  • Триггеры во вновь загруженных записях не активированы. Бизнес-правила, ассоциированные с триггерами, не применяются утилитой загрузки.

И наконец, чтобы подвести итог описанию утилиты загрузки, следует указать ее отличия от предшественника. В следующей таблице перечислены различия между утилитами DB2 Import и Load:

Таблица 4. Различия между DB2 Import и Load
Свойства/функцииDB2 ImportDB2 LoadПримечание
Скорость загрузкиЗаметно нижеЗагрузка с высокой скоростьюСкорость загрузки, наверное, главный критерий выбора между DB2 Import и Load
Поддержка форматов файловASC, DEL, WSF и IXF (см. описание этих форматов, приведенное выше)ASC, DEL, IXF и CURSORDB2 Load позволяет пользователю задать курсор, чтобы добавить гибкости загрузке данных из приложения. Отметим, что формат WSF не поддерживается утилитой DB2 Load.
Источник данныхВ основном простые текстовые файлыПростые текстовые файлы, ленты и именованные каналыС утилитой DB2 Load можно использовать также Tivoli Storage Manager (TSM)
Объекты назначенияТаблицы, представления, иерархии, псевдонимыТолько таблицыИерархии для DB2 Load не поддерживаются
Поддержка параллелизмаПоддерживается любой уровень параллелизмаДаДля DB2 Load доступны уровни параллелизма CPU, DISK и FETCH
Повторное создание индексаНетДаЕсли вы выберете повторное создание индекса, то все индексы будут повторно созданы после завершения работы DB2 Load
Инкрементное индексированиеНетДаDB2 Import вставляет индексы в процессе импорта только по одному индексу за один раз. Если вы выберете инкрементное индексирование, то добавочные индексы будут присоединены к существующему дереву индексов в процессе работы утилиты DB2 Load. Еще одна опция, Autoselect, позволяет DB2 выбрать, нужно ли повторно создать индекс или индексировать данные инкрементно.
Сохранение копииНетДаПри помощи DB2 Load можно сохранить копию загружаемых данных. Это особенно полезно для операции LOAD REPLACE.
Удаленный клиентНетДаDB2 Import будет работать только с файлами, которые размещены на том же клиенте, на котором запущена команда DB2 Import. А вот DB2 Load допускает загрузку удаленного клиента.
ВосстанавливаемостьНетДаДля DB2 Import нет необходимости в функции восстановления, поскольку она, по большей части, используется для таблиц малого и среднего размера. Несмотря на все сказанное, она позволяет перезапустить операцию импорта с того места, где произошла остановка из-за возникшей ошибки, путем задания параметра COMMITCOUNT. Впрочем, это возможно потому, что все транзакции записываются в журнал. Однако DB2 Load может проводить загрузку с параметром RECOVERABLE, при этом становится возможной прокрутка вперед в процессе восстановления. Это приводит пространства таблиц в состояние зависания. Единственный способ вывести их из этого состояния - это завершить процесс загрузки.
Таблица исключенийНетДаМожно направить ошибки загрузки в таблицу исключений в DB2 Load
Загрузка XML-данныхДаНетЗагрузка XML-данных при помощи DB2 Load в настоящий момент не поддерживается

DB2 Export

Чтобы использовать DB2 Export для экспорта данных, нужно иметь системные полномочия SYSADM или DBADM или привилегии CONTROL или SELECT для каждой таблицы, участвующей в операции экспорта. Утилита DB2 Export поддерживает тот же набор форматов файлов, что и DB2 Import; как было отмечено ранее, это файлы с расширениями DEL,PC/IXF и WSF. Ранее также говорилось о том, что полный синтаксис команды может быть получен через обработчик командной строки CLP. Чтобы получить полный синтаксис для DB2 Export, следует выполнить следующую команду: db2 ? export. В листинге 13 приводится весь синтаксис DB2 Export:

Листинг 13. Синтаксис DB2 Export
EXPORT TO filename OF {IXF | DEL | WSF}
[LOBS TO lob-path [ {,lob-path} ... ] ][LOBFILE lob-file [ {,lob-file} ... ] ]
[XML TO xml-path [ {,xml-path} ... ] ][XMLFILE filename [ {,filename} ... ] ]
[MODIFIED BY {filetype-mod ...}][XMLSAVESCHEMA]
[METHOD N ( column-name [ {,column-name} ... ] )] [MESSAGES message-file]
{select-statement | XQUERY xquery-statement |
HIERARCHY {STARTING sub-table-name |
(sub-table-name [{, sub-table-name} ...])} [WHERE ...] }
filetype-mod:
NODOUBLEDEL, LOBSINFILE, CHARDELx, COLDELx, DLDELx, DECPLUSBLANK
DECPTx, DATESISO, 1, 2, 3, 4, CODEPAGE=x, STRIPLZEROS, NOCHARDEL

Утилиту DB2 Export можно вызвать через обработчик командной строки, через мастер загрузки (Load wizard) интерфейса Control Center или через прикладной интерфейс программирования (API). Для изучения давайте рассмотрим несколько примеров для DB2 Export, вызванной через обработчик командной строки; эти примеры иллюстрируют некоторые возможности экспорта:

  • для начала посмотрим, как выглядит типичный случай экспорта текстовых файлов с разделителями. Команда, представленная в листинге 14, демонстрирует экспорт таблицы employee. Хотя по умолчанию используется разделитель "запятая" (,), можно без проблем использовать другой поддерживаемый разделитель;
    Листинг 14. Экспорт данных при помощи DB2 Export в файл с разделителями
    EXPORT TO "D:\db2exp\employee.dat" 
    OF DEL MESSAGES "D:\db2exp\employee.log" SELECT * FROM DB2ADMIN.EMPLOYEE;
  • Второй пример показывает, как экспортировать объекты LOB в два каталога. Это предотвращает переполнение первого каталога, и размещение остальных данных во втором каталоге, причем каждый объект LOB размещается в отдельном файле;
    Листинг 15. DB2 Export - экспортирование объектов LOB в несколько каталогов
            EXPORT TO "D:\db2exp\Lobs1\exportLoad.dat" OF DEL 
    	LOBS TO "D:\db2exp\Lobs1", "D:\db2exp\Lobs2" LOBFILE "Lob1", "Lob2" 
    	MODIFIED BY LOBSINFILE LOBSINSEPFILES 
    	MESSAGES "D:\db2exp\exportLoad.log" 
    	SELECT * FROM DB2ADMIN.EMP_PHOTO;
  • Как и в предыдущем примере, давайте посмотрим, какими способами можно экспортировать XML-документы. Следующая команда выполняет экспорт таблицы XEmployee. Каждый XML-документ помещается в отдельный файл, причем XEmployee выбирается в качестве базового имени. При помощи следующей команды файл XEmployee.del будет содержать такой список документов: <XDS FIL='XEmployee.001.xml' />, тогда как настоящие документы, которые содержат данные, например XEmployee.001.xml, экспортируются в каталог, заданный параметром XML TO. В следующем примере не показана возможность сохранения копии XML-схемы при помощи параметра XMLSAVESCHEMA.
    Листинг 16. DB2 Export - экспорт XML-документов в отдельные файлы
           EXPORT TO "D:\db2XML\XEmployee.del" OF DEL 
           XML TO "D:\db2XML\data" 
           XMLFILE "XEmployee" 
           MODIFIED BY XMLINSEPFILES 
           MESSAGES "D:\db2XML\XEmployee.log" 
           SELECT * FROM "ALLAN WH THAM".XEMPLOYEE;

Чтобы проиллюстрировать использование DB2 Control Center для экспорта, проследим выполнение одного примера экспорта XML-документов (последний пример из раздела об экспорте через командную строку).

  1. Нажмите правой кнопкой мыши на таблице, которую нужно экспортировать, и выберите пункт Export. На первом шаге работы утилиты DB2 Export вам будет предложено выбрать параметры файла вывода и сообщений;
    Рисунок 12. DB2 Export - место размещения конечных файлов
    DB2 Export - место размещения конечных файлов
  2. На вкладке Columns задайте реальный путь к файлам, куда будут экспортированы XML-документы . Также задайте базовое имя (это имя, используемое в файле XEmployee.del). Обратите внимание, что флажок Place each XML document in a separate file соответствует параметру XMLINSEPFILES. Данная опция позволяет сохранить XML-документ отдельно;
    Рисунок 13. DB2 Export - дополнительные параметры для экспорта XML
    DB2 Export - дополнительные параметры для экспорта XML
  3. На последней вкладке можно выбрать, запустить ли экспорт немедленно или составить расписание, позволяющее выполнить экспорт однократно или несколько раз.

И наконец, несколько моментов, которые следует иметь в виду при работе с DB2:

  • Можно использовать не только разделитель по умолчанию ("запятая"), но и другие поддерживаемые разделители;
  • Можно хранить XML-документы в одном файле, если только не задан модификатор типа файлов XMLINSEPFILES; последний будет сохранять вывод отдельно в каждом файле;
  • Перед тем, как выполнять экспорт, убедитесь, что ни одна из таблиц, которую вы хотите экспортировать, не заблокирована ни одним из возможных способов;
  • Если вы перемещаете данные между базами данных, то для импорта используйте формат PC/IXF;
  • В предложении экспорта допускается использовать псевдоним таблицы;
  • Вам не придется экспортировать все столбцы таблицы; можно экспортировать только те столбцы, которые вас интересуют;
  • Для объектов LOB и XML можно задать путь к каталогу, который будет использоваться при переполнении.

Прочие инструменты

Кроме обычных инструментов DB2 Import, Load и Export, DB2 предоставляет и другие утилиты/инструменты для упрощения перемещения данных. Некоторые встроены в функции, такие как db2move и DB2 Replication (гомогенная репликация при помощи SQL-Rep). Для того чтобы обеспечить высокоскоростную и гетерогенную репликацию, существует программа-сервер репликации IBM WebSphere Replication Server, которую можно приобрести отдельно. Чтобы обеспечить высокую скорость загрузки и выгрузки, потребители могут приобрести программу IBM DB2 High Performance Unload for Multiplatform. IBM DB2 High Performance Unload for Multiplatform - это высокоскоростной инструмент выгрузки для Linux, UNIX и Windows. Этот инструмент можно использовать вместо экспорта, когда объем данных слишком велик. Инструмент выгружает таблицы DB2 из пространства таблиц или из резервной копии. Для потребителей, которые решили перейти с MySQL на DB2 Express-C, предоставляется IBM DB2 Migration Toolkit (MTK), а также бесплатные инструменты.

В остальных разделах мы изучим db2move, встроенную функцию утилиты перемещения данных с платформы на платформу . Далее мы рассмотрим некоторые основные функции, предоставляемые пакетом IBM DB2 Migration Toolkit (MTK) для миграции с на IBM DB2 Express-C.

db2move

db2move, утилита, которая прекрасно подходит для перемещения таблиц из одной базы данных в другую, дает преимущество выбора между импортом или экспортом. Она экспортирует таблицы в формат PC/IXF, перед тем, как импортировать их или загрузить обратно в базы данных, которые могут находиться на той же машине или на разных платформах. Поскольку аппаратная архитектура на различных платформах может отличаться, что влияет на резервное копирование и восстановление, DB2 может быть несовместимой на любом отрезке от исходного до конечного файла. Например, операционные системы AIX, HPUX, Sun Solaris и Linux на платформе PowerPC имеют кодировку big endianess, тогда как Linux на IA-64, Linux на AMD64 и Intel® EM64T, а также 32-разрядный Linux на x86 - small endianess. Вследствие этого, db2move - это утилита, которая хорошо подходит для перемещения данных между платформами. Еще одно преимущество db2move - это ее способность создавать дубликаты схем, исходя из владельца схемы. Параметр -co позволяет создавать дубликаты схемы.

Использовать db2move несложно. Эта функция работает совместно с DB2 Import, Export и Load. Синтаксис не является сложным, хотя некоторые параметры являются специфичными для одной из утилит Import, Load, Export или Copy. Описание синтаксиса можно увидеть следующим способом:

Листинг 17. Синтаксис DB2Move
   Usage: "db2move <dbname> <action> [options]"

  <dbname> is the name of the database.

  <action> is one of:
     EXPORT - Export all tables that meet the filtering criteria in [options]
              (If no [options] specified, export all tables).
              Internal staging information is stored in file 'db2move.lst'.
              Messages are stored in 'EXPORT.msg'.

     IMPORT - Import all tables listed in the staging file 'db2move.lst'.
              Messages are stored in 'IMPORT.msg'..
              Use the -io option for IMPORT specific actions.

     LOAD   - Load all tables listed in the staging file 'db2move.lst'.
              Messages are stored in 'LOAD.msg'.
              Use the -lo option for LOAD specific actions.

     COPY   - Duplicate a schema(s) into a target database.
              Use the -sn option to specify one or more schemas.
              See the -co option for COPY specific options.
              Use the -tn or -tf option to filter tables in LOAD_ONLY mode.
              Messages are stored in 'COPY.<timestamp>.msg'
              Error only messages in 'COPY.<timestamp>.err'
              Load messages in 'LOADTABLE.<timestamp>.msg'
              List of tables that failed Load in 'LOADTABLE.<timestamp>.err' 

    Some of the options available:
	      
     -tc <value>  Table Definers. Filter on     EXPORT
              SYSCAT.TABLES.DEFINER

     -tn <value>  Table Names. Filter on        EXPORT
              SYSCAT.TABLES.TABNAME             COPY

     -sn <value>  Schema Names. Filter on       EXPORT,
                   SYSCAT.TABLES.TABSCHEMA      COPY

     -ts <value>  Tablespace Names. Filter on   EXPORT
                  SYSCAT.TABLES.TBSPACE

     -tf <file>   Fully qualified list of       EXPORT
                   table names in <file>        COPY

     -aw          Allow warnings                EXPORT

     -io <value>  IMPORT specific actions.      IMPORT
                 Default is REPLACE_CREATE
                 (see docs for limitations
                 of Import create function)

     -lo <value>  LOAD specific options.        LOAD
                  Default is INSERT

     -l <path>    Path to lobfiles.             EXPORT,
                   Default is cwd               IMPORT,
                                                LOAD

     -u <value>   Userid to connect to db.      ALL
                  Default is current user

     -p <value>   Password to connect to db.    ALL

     -co <opt>    COPY specific options.        COPY

Несколько простых примеров помогут лучше проиллюстрировать применение утилиты:

  • В самой простой форме, экспортируем все таблицы из базы данных sample:
    Листинг 18. DB2Move - Экспорт всех таблиц в Sample
          db2move sample export
  • Экспортируем несколько таблиц с использованием шаблона:
    Листинг 19. DB2Move - Экспорт таблиц с использованием шаблона
          db2move sample export -tn emp*
  • Загружаем все таблицы в базу данных sample. Убедитесь, что таблицы уже созданы ранее:
    Листинг 20. DB2Move - Загрузка всех таблиц в базу данных Sample
          db2move sample load -l d:\db2exp
  • И наконец, создадим копию схемы allan в базе данных sample и дублируем ее в базу данных sample1. Данные из схемы allan дублируются в схему allan1. Эта команда также копирует схему allan в allan1 из исходной базы данных sample в конечную базу данных sample1. Для конечной базы данных у вас есть копия DDL (DDL_ONLY) и отображение пространства таблиц (TABLESPACE_MAP). Операция копирования схемы COPY использует файл сообщений COPYSCHEMA_<timestamp>.MSG, а файл ошибок COPYSCHEMA_<timestamp>.err можно найти в рабочем каталоге.
    Листинг 21. DB2Move - Перемещение при помощи параметра COPY
          db2move sample COPY -sn allan -co TARGET_DB sample1 USER awt USING password 
          SCHEMA_MAP ((allan,allan1))

Некоторые ограничения использования db2move с параметром COPY для копирования схемы. Будут скопированы все разрешенные объекты схемы за исключением следующих типов:

  • Иерархия таблиц;
  • Ступенчатые таблицы (не поддерживаются утилитой загрузки в среде базы данных с несколькими разделами);
  • Jars (архивы Java™);
  • Псевдонимы;
  • Архивы;
  • Иерархии представлений;
  • Привилегии объектов (все новые объекты создаются с авторизацией по умолчанию);
  • Статистика (новые объекты не содержат статистической информации);
  • Расширения индекса (определяемый пользователем связанный структурированный тип);
  • Определяемые пользователем структурированные типы и их функции передачи.

IBM DB2 Migration Toolkit (MTK)

Пакет IBM Migration Toolkit, хотя он и не был создан специально для миграции с MySQL на DB2, может использоваться для переноса данных из MySQL в DB2.

Самое последнее обновление DB2 Migration Toolkit MySQL 2.0.1.1 доступно для загрузки.

Список функций, поддерживаемых в этой версии, и документацию можно найти в файле README данного продукта. Версия 2.0.1.1 пакета IBM DB2 Migration Toolkit включает следующие новые и измененные функции:

  • Поддержка миграции с MySQL 4 и MySQL 5 на:
    • Informix Dynamic Server версии 9 и более поздних версий;
    • DB2 LUW версии 8.2 и более поздних версий;
    • DB2 iSeries версии 5 и более поздних версий.

IBM DB2 Migration Toolkit 2.0.1.1 - это чистовая (альфа) версия; она поддерживает конструкции DDL такие как таблицы, представления, синонимы и ограничения.

Для преобразований DB2 Migration Toolkit с MySQL 4 и MySQL 5 этот набор инструментов имеет следующие ограничения:

  • Опция IMPORT на определенной вкладке source не поддерживается;
  • Триггеры и процедуры/функции не поддерживаются;
  • Свойства типа данных MySQL не поддерживаются;
  • Поддерживается только JDBC-соединение с базой данных MySQL;
  • Типы данных ENUM и SET не поддерживаются;
  • Особые регистры не поддерживаются (например, CURRENT_TIMESTAMP);
  • MySQL хранит значение текущей временной метки в типе данных time stamp по умолчанию; DB2 хранит нулевые значения в типе данных time stamp по умолчанию;
  • Выражение ON-UPDATE не поддерживается как значение по умолчанию;
  • В UNIX-системах размещение даты в формате LOB при помощи параметра LOAD не поддерживается. Вместо этого используйте параметр IMPORT;
  • Экстракция из представлений не поддерживается;
  • Атрибут AUTOINCREMENT не поддерживается.

Заключение

В этой статье был дан общий обзор параметров перемещения данных MySQL и приведена таблица, в которой сравниваются утилиты MySQL mysqldump и mysqlhotcopy После краткого расмотрения перемещения данных MySQL в статье было рассказано о средствах IBM DB2 Express-C 9.1, предназначенных для осуществления перемещения данных. Такие утилиты, как DB2 Import, Load и Export были подробно исследованы в нашей статье, и, наконец, были рассмотрены другие инструменты, встроенные и приобретаемые отдельно, чтобы составить у читателя более четкое представление о том, какие существуют инструменты и какое из доступных решений может быть использовано, если требуется дублирование базы данных/схемы, высокая скорость загрузки/выгрузки или даже запланирован полный переход с MySQL на DB2.

После такого введения администраторам баз данных MySQL не составит труда выбрать из доступных вариантов необходимый, когда придется администрировать перемещение данных на IBM DB2 Express-C.


Оговорки

Данная статья написана на основе наших знаний. При обнаружении несоответствий, сообщите, пожалуйста, о них авторам статьи.

Ресурсы

Научиться

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

  • Теперь у вас есть возможность использовать DB2 бесплатно. Загрузите DB2 Express-C, бесплатную версию DB2 Express Edition для сообщества разработчиков, которая предлагает все основные возможности DB2 Express Edition и может служить прочным фундаментом для создания и размещения приложений;
  • Загрузите DB2 Developer Workbench;
  • Создайте свой следующий проект с использованием пробного программного обеспечения IBM, которое можно загрузить непосредственно с сайта developerWorks.

Обсудить

Комментарии

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=203337
ArticleTitle=Перемещение данных: DB2 - MySQL
publish-date=03222007