Массовое обновление значений столбцов всей таблицы - PullRequest
0 голосов
/ 01 июля 2011

У нас есть таблица базы данных Oracle 11g с около 35 миллионами строк. Мы находимся в ситуации, когда мы должны обновить все значения одного столбца. Этот столбец проиндексирован.

У меня есть скрипт, который может генерировать обновленные значения и заполнять его в текстовом файле.

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

Будет ли хорошей идеей

  • Дамп всей таблицы в плоский файл
  • Обновить значения, используя любой язык сценариев
  • Перезагрузить всю таблицу
  • Перестроить индексы

С какими подводными камнями можно столкнуться?

Я не компетентен в PL / SQL. Есть ли способ решить эту проблему в PL / SQL или каким-либо образом «внутри» самой базы данных?

Спасибо, Прабху

1 Ответ

1 голос
/ 01 июля 2011

Возможно, самым быстрым способом будет создание внешней таблицы на основе вашего плоского файла значений обновлений, а затем:

create table new_table as
  select o.col1, o.col2, o.col3, ..., x.value as colN
  from old_table o
  join extern_table x on ...;

(Убедитесь, что соединение возвращает все строки из old_table. Возможно, соединение должно быть внешним соединением.)

-- drop foreign key constraints that reference old_table
alter table child1 drop constraint fk_to_old_table1;
...

drop table old_table;

rename new_table to old_table;

-- Re-create indexes and constraints on old_table
alter table old_table add constraint oldpk primary key (col1);
...

-- Re-create the dropped foreign key constraints to old_table
alter table child1 add constraint fk_to_old_table1 ...;
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...