2015-03-05 1 views
0

его необходимо обновить подано из всех строк в таблице с пробелами. В таблице представлено около 1 миллиона записей. Не могли бы предоставить наилучший способ сделать это с наименьшим временем обработки. Thanksполе обновления для пустого для миллионов записей таблицы db2

+0

Для этого может быть менее 2 решений. solution-1) update table1 set col1 = пробелы; который будет обновлять все строки, но может занять много времени (без помощи утилиты загрузки). решение-2) (a) выгрузить все строки таблицы1 в файл с использованием утилиты unload (b) заменить значение col1 пробелами (c) загрузить пустой стол (d) загрузить таблицу с измененным файлом. Нужно знать, какая душа лучше. – user2054151

+3

Какая операционная система? Какая версия DB2? Какие у вас сторонние утилиты доступны? Что говорят ваши администраторы баз данных? Например, утилиты IBM для DB2 на z/OS прошли долгий путь в последних нескольких версиях и теперь находятся на одном уровне с CDB. Каким бы ни был ответ на сегодня, он может измениться со следующей версией - это одноразовая задача? – cschneid

+0

Миллионов строк не много. То, что вы делаете, очень просто. Проверьте оба метода. С разными объемами и различной сложностью и различными таблицами различные решения будут работать лучше. –

ответ

0

Использование команды обновления потребует много времени и стоимости процессора. Лучший способ - выгрузить все данные в файл. Обновите значение поля, используя программу cobol, и загрузите данные с помощью LOAD REPLACE.

Примечание -> Пожалуйста, возьмите резервную копию данных таблицы перед этим

+0

Да, я так думаю. хотя sort jcl будет эффективнее сравнивать с cobol для обновления значения в файле. – user2054151

+0

Согласовано - ВАРИАНТ ОПЦИИ КОЛИЧЕСТВО С ПОЛЕВОЙ ПОЛЯМИ и т.д. Следите за своим RI тоже. – mckenzm

1

Какой версии и платформами? Я вижу тег COBOL, поэтому я предполагаю DB2 для z/OS или DB2 для IBM i.

Мне трудно поверить, что выгрузите/перезагрузите, как упоминалось, было бы лучше всего на любой платформе. Поскольку это будет включать в себя как минимум два раза ввода-вывода в качестве простого обновления.

В DB2 для IBM i (aka AS/400, iSeries) ... Я знаю, что разгрузка/перезагрузка не будет быстрее. Следующие применимы к DB2 for i.

1) простой UPDATE MYTBL SET MYCOL = ' ' WITH NC; ... до тех пор, пока файл НЕ не зарегистрирован или вы можете отключить ведение журнала для этой таблицы достаточно долго, чтобы запустить обновление. На старом, маленьком бите 515, работающем на 7.1, я могу обновить 400 тыс. Строк всего за 13 секунд. Я ожидаю обновить 1M за менее чем 35 секунд.

2) Если вы абсолютно не можете прекратить ведение журнала на столе, то следующим быстрым методом будет использование доступа к уровню записи COBOL или RPG (RLA aka native I/O). Убедитесь, что вы прочитали таблицу в последовательности прибытия и открыли ее под контролем обязательств. Вы также захотите зафиксировать изменения после X числа записей. Где X = 128 КБ/(размер строки) округляется вниз.

Другое соображение относительно того, что колонка, которую вы обновляете, используется в индексе или логическом ключе. Вы не хотите, чтобы система обновляла путь доступа для каждого обновления записи. Если индекс, вероятно, проще всего отбросить индекс и перестроить его после обновления файла. Если логически, вы можете удалить участника с помощью RMVM перед обновлением и повторно добавить его после обновления с помощью ADDLFM.

+0

Unload, reload NOLOG будет использовать гораздо меньше накладных расходов, включая IO. Если это (маловероятно) статические/эфемерные данные, вы всегда будете регистрировать активность в z/OS. Выгрузить, fastunload должен быть способ. Изменение наборов данных всегда приводило к катастрофе раньше, чем позже в магазинах, в которых я работал. – mckenzm

+0

Если прошедшее время является вашей единственной проблемой. Испытайте его.Это мата будет медленнее выгружать, если перестройки индекса тяжелы. Нагрузите замену подавленным логом/chck, также естественно перегруппируйте таблицу. – mckenzm

Смежные вопросы