Q1: Какие утилиты массовой загрузки выгрузки данных существуют?
Выгрузка - EXPORT
Загрузка - IMPORT
Быстрая загрузка - LOAD
Q2: Какие форматы данных понимают EXPORT, IMPORT,LOAD???
Загрузка и выгрузка данных происходит, только по
определенным форматам.
ASC - текстовый файл без разделителей столбцов.
DEL - текстовый файл c разделителями столбцов.
WSF - Work Sheet Format, НЕ поддерживает русские кодировки???
IXF - интегрированный формат обмена. При обратном IMPORT
автоматически создаются таблицы.
Q3: Какие есть рекомендации при использовании IMPORT???
IMPORT
Простые insert каждая вставка обрабатывается как транзакция
(COMMITCOUNT указывает на количество строк после которых
должен осуществлятся COMMIT). Триггеры не отключаются,
все ограничения учитываются при вставке.
Внимание дабы не было ошибок из-за переполнения log файлов
при загрузки рекомендуется увеличить количество LOG файлов и
использовать опцию СCOMMITCOUNT в IMPORT
db2 update db cfg for database <database-name> using logprimary 20
logsecond
Так же можно указать в какой кодировке (win1251, DOS866, iso8859-5)
находится файл для IMPORT и LOAD. Например если вы выгружаете
в текстовый файл на OS/2, то потом его можно будет без
дополнительных операций загрузить например на AIX, см. опцию
в LOAD и IMPORT под названием CODEPAGE
Q3: Какие есть рекомендации при использовании LOAD???
Предположим, что загружаем данные в две таблицы
table1 & table2
LOAD
1. Создание таблиц table1, table2и индексов
2. Создание таблиц исключений table1exp, table2exp
3. Перед выполнением этой утилиты сделайте BACKUP
если вы используете NONRECOVEREABLE option
4. Проверте свободное место
5. Выполнение оператора загрузки LOAD
6. Проверка load.msg и dumpfile после загрузки
7. Проверка EXCEPTION TABLES после загрузки
8. BACKUP TABLESPACE (DATABASE) есди LOGRETAIN=YES and COPY=NO
9. SET CONSTRAINTS FOR table1,table2 IMMEDIATE CHECKED
FOR EXCEPTION
IN table1 USE table1exp
IN table2 USE table2exp
10. RUNSTATS - если необходимо.
Q4: Какие параметры влияющие на скорость загрузки?
1. Быстрее если вы используете REPLACE.
2. Создание индексов во время загрузки снижает скорость LOAD.
3. СOPY YES снижает производительность.
4. Реомендуется в READ ONLY системах (OLAPи все такое)
использовать COPY NO
Q5: Что такое Check Pending State у таблицы???
1. При и после LOAD в таблице отключаются ограничения
(constraints)
2. Если Parent table находится в Check Pending State, то и
дочерние таблицы находятся в Check Pending State.
3. К таблицам нет доступа по DML
Q6: Как вернуть таблицу из Check Pending State в нормальное состояние
SET CONSTRAINTS FOR table1,table2 IMMEDIATE CHECKED
FOR EXCEPTION
IN table1 USE table1exp
IN table2 USE table2exp;
Q7: Что такое и по каким правилам создается exception tables для
таблицы table1???
Таблица в которую заносятся строки которые не прошли
SET CONSTRAINTS
1. Первые n столбцов такие же как и у table1.
2. Не создается на ней никаких ограниечений и триггеров.
3. n+1 столбец --> TIMESTAMP
4. n+2 cтолбец --> CLOB (32K)
5. Пользователь должен иметь INSERT привилегии.
Q8: Какие состояния табличных пространств бывают и
как узнать состояние tablespace
db2 list tablespaces show detail
-Normal
-Load Pending
-Delete Pending
-Backup Pending
-Recovery Pending
-RollForward Pending
Q9: Какие Типы BACKUP есть в DB2???
Offline и Online по умолчанию Offline.
Offline резервное копирование требует
отсоединения всех пользователей
Q10: Как сделать возможным Online Backup???
Поставить один из параметров (или оба) LOGRETAIN
USEREXIT в YES
Q11: На что влияют параметры LOGRETAIN и USEREXIT???
Если оба этих парметра находятся в соятоянии NO, то
тразакции пишут свои данные по кругу в LOG файлы.
Т.е f1 -> f2 ->f3 ->f1, если транзакция настолько велика, что не
укладывается в количество определенных первичных LOG файлов
(logprimary), например IMPORT без СOMMITCOUNT, то транзакция
начинает писать в дополнительные LOF файлы (logsecond)
transactionstart -> f1 ->f2 -> f3 (выход за размер logprimary) -> s1 ...
Если же она не укладывается и в эти файлы, то она откатывается.
В случае если один из LOGRETAIN и USEREXIT в положении YES, то
нет циклического перезаписывания, а создаются новые файлы,
LOGRETAIN и USEREXIT определяют количество и рабочие LOG
файлы. Не рабочие LOG файлы (те в которые транзакции не пишут)
можно архивировать на ленточку, например.
Q12: Как установить TextExtender?
Все зависит от того, под какую версию тебе нужно. В 6.1 мне пока не
удалось
заставить их работать. В 5.2 все работает нормально.
Краткое руководство по установке 5.2
1. Скачать Extenders c IBM. Раздаются бесплатно.
http://www.software.ibm.com/db2/ и далее по ссылкам.
2. Установить. Все Extenders ставятся сразу. Отдельно поставить Text
Extender нельзя.
При установке ОБЯЗАТЕЛЬНО ОТКРЫТЬ СПИСОК СЛОВАРЕЙ и ВЫБРАТЬ РУССКИЙ.
По-умолчанию ставится английский.
3. Перезагрузка (Для WinNT).
4. Внимательно прочитать документацию и определить тип необходимого
индекса. Для начала хватит PRESIZE.
5. Увеличить параметры связанные с log до максимума.
6. Перезапустить db2
7. Стартовать Text Extender: txstart
8. Запустить db2tx. Выполнить connect к бд с admin account. Выдать
команду:
enable database <имя бд>
9. Сделать индекс используя команду enable text column.
10. Не обращать внимания на тот момент, что выполнение команды
закончилось
в окне db2tx. Может шуршать диском еще очень долго. Проверить количество
проиндексированных записей можно через get index status.
Пункты 6-9 есть в bat-файле dmbsamplestxverify. Нужно выкинуть
загрузку
и создание демонстрационных таблиц.
Возможные грабли
1. Раздутие log. При создании индекса можно указать commitcount, но у
меня
этот параметр не заработал. Логи раздувались
до 100Мб.
2. Низкая скорость работы. Для поиска используется ф-я CONTAINS. Можно
увеличить скорость, если использовать
специальный вид запроса. Он описан в где-то в performance. Делается
через
common table expression.
Q13: Какие особенности работы с различным типом бэкапов DB2
offline - нужно при бэкапе отключать всех пользователей
online - периодически чистить см описание USEREXIT
Пока все в следующей версии RESTORE + ROLLFORWARD + EVENT MONITORS.
Special Thanks Vadim Rumyantsev, Victor Metelitsa, Lilya Kozlenko,
Vyacheslav Yanuk