powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Update большого числа записей
9 сообщений из 9, страница 1 из 1
Update большого числа записей
    #36077653
ananas2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Необходимо выполнить апдейт полей в таблице:

UPDATE tab1 t1 set DESC = (
SELECT T_ID from tab2 t2 where t1.KEY_id=t2.KEY2_ID);

Проблема в том, что таблица очень большая(больше 30млн записей), поэтому боюсь переполнения transaction log. Отключить запись в лог не представляется возможным. Экспорт-Импорт из-за джойна не работает, поэтому прошу помочь в написании ХП c conmit'ом через каждые 10000 записей, например.

Заранее спасибо.
...
Рейтинг: 0 / 0
Update большого числа записей
    #36079075
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

1. Что значит "Экспорт-Импорт из-за джойна не работает"?
Единственная проблема с этим может быть в том, что у tab1 нет primary key.
Иначе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
export to tab1.ixf of ixf
select t1.PK, t2.T_ID
from tab1 t1
join tab2 t2 on t1.KEY_id=t2.KEY2_ID;

import from tab1.ixf of ixf
commitcount  10000 
insert_update into tab1(PK, DESC);
2.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
create procedure huge_change(
  pstmt_sel varchar( 4000 )
, pstmt_chg varchar( 4000 )
, pcommitcount int
, out prowsaffected int
)
begin
  declare sqlcode int;
  declare cnt int default  0 ;
  declare dummy_int int;
  declare lupd_str varchar( 1000 );
  declare c1 cursor with hold for s1;

  set pstmt_chg = pstmt_chg||' where current of c1';
  prepare s1 from pstmt_sel;
  prepare s2 from pstmt_chg;
  set prowsaffected =  0 ;
  open c1;
  fetch c1 into dummy_int;
  while (sqlcode!= 100 ) do
    set cnt = cnt +  1 ;
    set prowsaffected = prowsaffected +  1 ;
    execute s2;
    if (cnt = pcommitcount) then
      commit;
      set cnt =  0 ;
    end if;
    fetch c1 into dummy_int;
  end while;
  commit;
  close c1;
end@

call huge_change(
  'select 1, DESC from tab1 for update of DESC'
, 'UPDATE tab1 t1 set DESC = (SELECT T_ID from tab2 t2 where t1.KEY_id=t2.KEY2_ID)'
,  10000 , ?)@
...
Рейтинг: 0 / 0
Update большого числа записей
    #36079671
ananas2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Огромное спасибо за готовое решение. Воспользуюсь EXPORT + LOAD, так выполняется быстрее всего.
...
Рейтинг: 0 / 0
Update большого числа записей
    #36713817
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Марк,

а если у меня похожая проблема, но не UPDATE, а INSERT??
Кроме import/export у меня вообще никаких вариантов, т.е. вариант #2 не существует для INSERT?

Я пробовал import/export, но столкнулся с тем, что слишком долго выполняется данная команда, особенно import - попытался на тестовой базе, которая каждый день апдэйтится с продакшн-базы, не хватило даже ночи! База под утро рестартовала и всё прекратилось... даже не на полпути... :(

В общем, мне нужно в таблице поменять тип столбца. Сейчас это CLOB, должно быть XML, т.к. содержит XML-данные. CLOB ужасно тормозит, т.к. частенько извлекая данные приходится кастить к XML, чтобы извлечь аттрибуты.

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

И вот... опять неудача. Хотя данных не так уж много. 48 тыс записей. Возможно, тормоза из-за того, что парсит XML? Черт его знает... Мне главное решить задачу....
...
Рейтинг: 0 / 0
Update большого числа записей
    #36713829
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ах да, еще.
Еще одна проблема. Вот что выдал экспорт:

SQL27984W The export command completed successfully. Some recreate
information has not been saved to the PC/IXF file during Export. This file
will not be supported in Import CREATE mode. Reason code="2,7".

Боюсь потерять данные, а сравнивать все 48 тысяч... нереально... :(
...
Рейтинг: 0 / 0
Update большого числа записей
    #36713913
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NafigatorПоскольку сделав в таблице XML-столбец, потом невозможно удалить исходный, только пересоздавать таблицу, то решил всё сделать через промежуточную таблицу, с нужным типом столбца, куда солью исходные, проCASTенные...

И вот... опять неудача. Хотя данных не так уж много. 48 тыс записей. Возможно, тормоза из-за того, что парсит XML? Черт его знает... Мне главное решить задачу....Не очень понял проблему.
Вы делаете
export to ... select col1, ..., xmlcast(...) as new_xml_col from ...;
И что, импорт потом медленно идёт в новую таблицу newtab(col1 ..., ..., xml_col xml)?

SQL27984W говорит о том, что всё нормально, только import CREATE не будет из этого файла работать. Т.е. вам надо будет сделать сначала create newtab сделать, а потом import INSERT.
...
Рейтинг: 0 / 0
Update большого числа записей
    #36713930
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, Вы всё верно поняли. Если экспорт отработал за час, может полтора... То импорт продолжается уже почти 5 часов... :(
(запустил повторно, уже с созданием файла на удаленной машине). Да и файлик-то небольшой! 5 мегабайт...
...
Рейтинг: 0 / 0
Update большого числа записей
    #36714673
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
NafigatorДа, Вы всё верно поняли. Если экспорт отработал за час, может полтора... То импорт продолжается уже почти 5 часов... :(
(запустил повторно, уже с созданием файла на удаленной машине). Да и файлик-то небольшой! 5 мегабайт...Экспорт 48k записей полтора часа???
...
Рейтинг: 0 / 0
Update большого числа записей
    #36714816
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё оказалось грустнее...
Не знаю, почему экспорт закончился на 5 мегабайтах, я сейчас глянул данные по таблице, оказалось следующее:

итак, количество записей - около 48 тыс, но проблема нарисовалась именно в CLOB-полях.
Средний размер записи - 83Кб (существуют записи с "отчетом", что хранится в этом поле, размером 15 МБ!) Итого имеем результирующий объем файла более 4 ГБ...

Что же делать? Понятно, что можно разбить на несколько этапов "слива". Но очень долго и муторно, возможно, более 1 суток апдэйта?? Не уверен, что нам дадут столько времени на модификацию продакшн-базы... :(
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Update большого числа записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]