Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Добавить колонку к нагруженной таблице  [new]
Dr. Oracle
Member

Откуда:
Сообщений: 40
Добрый день коллеги.

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

Вопрос: какие есть методики сделать это максимально безболезненно для пользователей?

Я понимаю, что есть гугл и я в процессе поиска, но мне интересно у кого есть решение проверенное, которое используется в такого рода задачах.
16 сен 20, 11:06    [22198188]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18150
Dr. Oracle
Поделитесь, пожалуйста, опытом. Есть таблица, в которую активно что-то пишут. Возникла необходимость добавить в нее столбец.

Смотря что за столбец.
Если простой nullable атрибут - то не вижу затруднений, словарная операция.
Единственное - имеет смысл установить в сессии ddl_lock_timeout.
Прочие варианты (not null, default и т.д.) имеет смысл вводить над уже созданным атрибутом.
16 сен 20, 11:11    [22198201]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
Dr. Oracle
Member

Откуда:
Сообщений: 40
Последнее, если честно не совсем понял. Мне как раз нужно добавить добавить с некоторым default значением.
16 сен 20, 11:20    [22198211]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
Тролин
Member

Откуда: БСП
Сообщений: 361
DBMS_redefinition
16 сен 20, 11:26    [22198218]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2840
andrey_anonymous

Если простой nullable атрибут - то не вижу затруднений, словарная операция

Ну как бы вся простота зависит от версии и supp log.
А то может и ddl_lock_timeout придется задирать так высоко, что обычные пользователи пострадают.
16 сен 20, 11:26    [22198219]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15480
Dr. Oracle
Последнее, если честно не совсем понял. Мне как раз нужно добавить добавить с некоторым default значением.

ну и напрасно вы сразу про это промолчали
если знаете то значение- так сразу и добавляйте столбец с дефолтом

а ,вообще, спрашивая совета, не будьте партизаном на допросе..
16 сен 20, 11:38    [22198239]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2557
пакеты зависящие от таблички могут "инвалидироватся", чревато для работающих пользователей

....
stax
16 сен 20, 11:38    [22198240]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18150
orawish
если знаете то значение- так сразу и добавляйте столбец с дефолтом

Плохой совет.
16 сен 20, 11:52    [22198266]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
кит северных морей
Member

Откуда: krsk / nyc / krsk
Сообщений: 785
andrey_anonymous
Плохой совет.
почему?
16 сен 20, 12:26    [22198310]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
Надфиль
Member

Откуда:
Сообщений: 233
Dr. Oracle
Добрый день коллеги.

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

Вопрос: какие есть методики сделать это максимально безболезненно для пользователей?

Я понимаю, что есть гугл и я в процессе поиска, но мне интересно у кого есть решение проверенное, которое используется в такого рода задачах.

когда срочно нужно мы добавляем таблицу с полем (или несколькими) со связью 1:1.
но так себе вариант если честно..
16 сен 20, 13:03    [22198363]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
xtender
Member

Откуда: Мск
Сообщений: 5617
Dr. Oracle,

Какая версия оракла?

C 11.1; Adding new columns with DEFAULT values and NOT NULL constraint no longer requires the default value to be stored in all existing records.

С 12.1: Optimized ALTER TABLE...ADD COLUMN with default value for nullable columns
https://docs.oracle.com/database/121/ADMIN/release_changes.htm#ADMIN13865
https://oracle-base.com/articles/12c/default-values-for-table-columns-enhancements-12cr1
16 сен 20, 13:48    [22198423]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
xtender
Member

Откуда: Мск
Сообщений: 5617
Dr. Oracle,

помимо этого тоже с 12.1 добавились invisible columns, так что в идеале для 12+ было бы добавлять новый столбец как invisible, чтобы не поломать зависимости, не рассчитанные на новый столбец.
16 сен 20, 13:55    [22198439]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
Dr. Oracle
Member

Откуда:
Сообщений: 40
Версия 19.6.

Спасибо за советы/рекомендации.

Если у кого-то есть что добавить - буду благодарен.
16 сен 20, 14:37    [22198469]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
Maksim Ivanov
Member

Откуда:
Сообщений: 8
Про дбмс_редефинишен вам уже подсказали.

Есть ещё такой рабоче-крестьянский метод.
Если вам повезло и у вас в базе зависимых, от этой таблицы, объектов нет, или достаточно мало (что это такое - достаточно: чуть ниже) то:
1) в этой же схеме создаёте реплицируемую таблицу-копию, от вашей текущей таблицы. В зависимости от того - чем реплицровать: есть большая, или меньшая свобода рук.
Ну. Например. Если голден-гейт, то там вообще всё спортивно-бодро, можно даже сразу создать, целевую таблицу, с нужной вам структурой/свойствами полей.
Обвешиваете целевую таблицу тем же набором триггеров, индексов.
С триггерами: тут либо советоваться с разработчиками, либо, до запуска репликации дизаблить триггера - who knows: какими они могут быть и куда и как могут лезть - всё что угодно может быть.
Подсматриваете набор объектных грантов на исходную таблицу - выдаёте такие же объектные гранты, тем же грантополучателям, на целевую таблицу.
2) Репликация вам синхронизирует таблицы по данным. Выбираете момент времени Ч
3) В момент времени Ч:
3.1) как больше нравится перекрываете доступ скл-запросов к исходной таблице.
3.2) контролируете что все изменения данных - зааплаились, репликацией, на целевую таблицу. Репликацию останавливаете.
3.3) Старую таблицу - переименовываете.
3.3) Создаёте синоним, с нужным именем старой таблицы. Назначаете его на новую таблицу. Синоним, то есть, провайдит зависимым объектам имя - которое они ожидают. Плюс зависимые объекты - начинают зависеть от синонима, а не напрямую от таблицы.
Ну. Если уверены в том что "больше никогда и ничего такого", с этой таблицей, по крайней мере - вам, делать не придётся: можно синоним не вводить в оборот, а просто переименовать целевую таблицу, в правильное имя.
3.4) Валидите зависимые объекты. Тут - про "достаточно мало": это такое кол-во зависимых объектов при котором затраты на их валидацию - не считается значимыми. Ну т.е.: достаточно быстро и достаточно просто, для вас.
3.5) Если есть триггера и если они дизаблились - енабле им делается.
3.6) Убираете, если нужно, лок на доступ к таблице.

Всё.
16 сен 20, 22:12    [22198824]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
xtender
Member

Откуда: Мск
Сообщений: 5617
Maksim Ivanov,

зачем такие муки если у ТС
Dr. Oracle
Версия 19.6.
и нужно
Dr. Oracle
добавить с некоторым default значением.


В случае ТС это всего лишь изменение метаданных.
16 сен 20, 22:19    [22198829]     Ответить | Цитировать Сообщить модератору
 Re: Добавить колонку к нагруженной таблице  [new]
AlexFF__|
Member

Откуда:
Сообщений: 2840
xtender

В случае ТС это всего лишь изменение метаданных.

По данным от ТС - не факт )
16 сен 20, 22:34    [22198839]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить