У меня есть репозиторий оракула и работает, скажем, 10 миллионов записей. Один из столиков скажет
CREATE TABLE TABLE_A
NAME VARCHAR2(128),
VER VARCHAR2(128),
TYPE VARCHAR2(32),
DESCRIPTION VARCHAR2(256),
CONSTRAINT TABLE_A_PK PRIMARY KEY ("NAME","VERSION");
Эта таблица используется давно, и теперь говорят, что у меня есть требование изменить ограничение первичного ключа. Теперь у меня есть требование, чтобы в другом столбце было указано ID и первичный ключ, чтобы они были комбинацией NAME, VER, TYPE и LANG.
В скрипте обновления у меня может быть что-то вроде
EXECUTE IMMEDIATE
ALTER TABLE TABLE_A ADD LANG VARCHAR2(32);
EXECUTE IMMEDIATE
UPDATE TABLE TABLE_A SET LANG ='|| 'en_US';
EXECUTE IMMEDIATE
UPDATE TABLE TABLE_A SET TYPE='||'n/a'||' WHERE TYPE IS NULL;
До TYPE может иметь значения, а иногда и ноль. Так как после обновления его части первичного ключа он не может быть нулевым, поэтому делает его ноль, если его ноль.
Но выполнение описанных выше действий для 10 миллионов записей требует времени обновления не менее 5 часов. Есть ли какой-нибудь другой способ сделать предыдущий столбец первичным ключом и все равно не потребовать большого времени простоя.
Просьба также предложить мне, если я ошибаюсь с моим подходом. Заранее спасибо