Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Добавить колонку к нагруженной таблице / 18 сообщений из 18, страница 1 из 1
16.09.2020, 11:06
    #39999235
Dr. Oracle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
Добрый день коллеги.

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

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

Я понимаю, что есть гугл и я в процессе поиска, но мне интересно у кого есть решение проверенное, которое используется в такого рода задачах.
...
Рейтинг: 0 / 0
16.09.2020, 11:11
    #39999237
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
Dr. Oracle
Поделитесь, пожалуйста, опытом. Есть таблица, в которую активно что-то пишут. Возникла необходимость добавить в нее столбец.

Смотря что за столбец.
Если простой nullable атрибут - то не вижу затруднений, словарная операция.
Единственное - имеет смысл установить в сессии ddl_lock_timeout.
Прочие варианты (not null, default и т.д.) имеет смысл вводить над уже созданным атрибутом.
...
Рейтинг: 0 / 0
16.09.2020, 11:20
    #39999239
Dr. Oracle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
Последнее, если честно не совсем понял. Мне как раз нужно добавить добавить с некоторым default значением.
...
Рейтинг: 0 / 0
16.09.2020, 11:26
    #39999243
Тролин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
DBMS_redefinition
...
Рейтинг: 0 / 0
16.09.2020, 11:26
    #39999244
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
andrey_anonymous

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

Ну как бы вся простота зависит от версии и supp log.
А то может и ddl_lock_timeout придется задирать так высоко, что обычные пользователи пострадают.
...
Рейтинг: 0 / 0
16.09.2020, 11:38
    #39999251
orawish
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
Dr. Oracle
Последнее, если честно не совсем понял. Мне как раз нужно добавить добавить с некоторым default значением.

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

а ,вообще, спрашивая совета, не будьте партизаном на допросе..
...
Рейтинг: 0 / 0
16.09.2020, 11:38
    #39999252
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
пакеты зависящие от таблички могут "инвалидироватся", чревато для работающих пользователей

....
stax
...
Рейтинг: 0 / 0
16.09.2020, 11:52
    #39999261
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
orawish
если знаете то значение - так сразу и добавляйте столбец с дефолтом

Плохой совет.
...
Рейтинг: 0 / 0
16.09.2020, 12:26
    #39999280
кит северных морей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
andrey_anonymous
Плохой совет.
почему?
...
Рейтинг: 0 / 0
16.09.2020, 13:03
    #39999305
Надфиль
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
Dr. Oracle
Добрый день коллеги.

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

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

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

когда срочно нужно мы добавляем таблицу с полем (или несколькими) со связью 1:1.
но так себе вариант если честно..
...
Рейтинг: 0 / 0
16.09.2020, 13:48
    #39999340
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
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
...
Рейтинг: 0 / 0
16.09.2020, 13:55
    #39999342
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
Dr. Oracle,

помимо этого тоже с 12.1 добавились invisible columns, так что в идеале для 12+ было бы добавлять новый столбец как invisible, чтобы не поломать зависимости, не рассчитанные на новый столбец.
...
Рейтинг: 0 / 0
16.09.2020, 14:37
    #39999354
Dr. Oracle
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
Версия 19.6.

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

Если у кого-то есть что добавить - буду благодарен.
...
Рейтинг: 0 / 0
16.09.2020, 22:12
    #39999572
Maksim Ivanov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
Про дбмс_редефинишен вам уже подсказали.

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

Всё.
...
Рейтинг: 0 / 0
16.09.2020, 22:19
    #39999576
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
Maksim Ivanov,

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


В случае ТС это всего лишь изменение метаданных.
...
Рейтинг: 0 / 0
16.09.2020, 22:34
    #39999583
AlexFF__|
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
xtender

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

По данным от ТС - не факт )
...
Рейтинг: 0 / 0
21.09.2020, 06:07
    #40000725
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице


https://oracle-base.com/articles/12c/default-values-for-table-columns-enhancements-12cr1 Oracle 11g introduced the concept of metadata-only default values. Adding a NOT NULL column with a DEFAULT clause to an existing table involved just a metadata change, rather than a change to all the rows in the table. Queries of the new column were rewritten by the optimizer to make sure the result was consistent with the default definition.

Oracle 12c takes this a step further, allowing metadata-only default values of both mandatory and optional columns. As a result, adding a new column with a DEFAULT clause to an existing table will be handled as a metadata-only change, regardless of whether that column is defined as NOT NULL or not. This represents both a space saving and performance improvement.

Мы на этой штуке ловили WR.
...
Рейтинг: 0 / 0
21.09.2020, 10:51
    #40000782
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Добавить колонку к нагруженной таблице
Андрей Панфилов
Мы на этой штуке ловили WR.
ну совсем малоинформативное сообщение: на которой из? В какой версии? Есть ли тест-кейс? В какой версии пофиксили? Есть ли патч? Номер бага?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Добавить колонку к нагруженной таблице / 18 сообщений из 18, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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