powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Создание пустого поля по большой таблице сразу с индексом
13 сообщений из 13, страница 1 из 1
Создание пустого поля по большой таблице сразу с индексом
    #39435088
field_index
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго дня!
Наверняка постоянно возникающая задача, у которой есть простое решение, которое не приходит в голову.

Дано: большая таблица-миллиардник. Надо написать скрипт, который в неё добавит новое поле(БЕЗ дефолта) и создаст на это поле индекс(на будущее). Если это делать последовательно - просто add column, а потом create index, то на стадии создания индекса мы получаем тормоза, так как таблицу приходится прочитать, чтобы понять, что поле пустое. Понятно, что пока статистика по полю не собрана, бессмысленно от Оракла ждать этих знаний.
Можно сразу после добавления поля собрать статистику, но это ведь придется собирать по всей таблице, что приведёт к тем же тормозам.

Как правильно написать такой скрипт? Как дать понять Ораклу, что поле - зуб даю - пустое?
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435141
veep_in_office
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
field_index,

Зачем садятся фигней.
Создавать поле и индекс надо стандартными способами.
Фулскан таблицы не должен никак сказаться на перфомансе базы. Оракл не блокирует всю таблицу а только часть записей которые фетчит. При добавлении поля может возникнуть блокировка всей таблицы - следовательно добавлять надо в особое согласованное с end-user время т желательно следуя Change management процесу.
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435145
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этот комментарий можно спокойно игнорировать -- там не про оракл

По поводу "зуб даю" он как-бы и сам прекрасно знает, тем более что начиная с 11g добавление столбца без дефолтового значения на сегмент данных вообще не влияет -- чисто операция над словарем
Но вот с построением индекса видимо еще недоделали
Может в 12.2 что-то поменялось

И еще как-то было обсуждение.
Типо, что добавление нескольких ограничений целостности (в том числе индексов?) выполняется последовательно one-to-one. Но переведя их в NOVALIDATE последующее переведение в VALIDATE можно сделать одновременно.
Подробностей не помню -- может не в лотерею, а в карты, не "Волгу", а "Москвич" и не выиграл, а проиграл
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435357
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав Любомудровначиная с 11g добавление столбца без дефолтового значения на сегмент данных вообще не влияет -- чисто операция над словаремС.
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435383
orac_list
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав ЛюбомудровЭтот комментарий можно спокойно игнорировать -- там не про оракл

По поводу "зуб даю" он как-бы и сам прекрасно знает, тем более что начиная с 11g добавление столбца без дефолтового значения на сегмент данных вообще не влияет -- чисто операция над словарем
Но вот с построением индекса видимо еще недоделали
Может в 12.2 что-то поменялось

И еще как-то было обсуждение.
Типо, что добавление нескольких ограничений целостности (в том числе индексов?) выполняется последовательно one-to-one. Но переведя их в NOVALIDATE последующее переведение в VALIDATE можно сделать одновременно.
Подробностей не помню -- может не в лотерею, а в карты, не "Волгу", а "Москвич" и не выиграл, а проиграл

https://docs.oracle.com/cd/E11882_01/server.112/e41084/statements_3001.htm#i2198241

When you add a column, the initial value of each row for the new column is null.

If you specify the DEFAULT clause for a NOT NULL column, then the default value is stored as metadata but the column itself is not populated with data. However, subsequent queries that specify the new column are rewritten so that the default value is returned in the result set.

This optimized behavior differs from earlier releases, when as part of the ALTER TABLE operation Oracle Database updated each row in the newly created column with the default value, and then fired any update triggers defined on the table. In this release, no triggers are fired because the default is stored only as metadata.

The optimized behavior is subject to the following restrictions:

The table cannot have any LOB columns. It cannot be index-organized, temporary, or part of a cluster. It also cannot be a queue table, an object table, or the container table of a materialized view.

If the table has a Virtual Private Database (VPD) policy on it, then the optimized behavior will not take place unless the user who issues the ALTER TABLE ... ADD statement has the EXEMPT ACCESS POLICY system privilege.

The column being added cannot be encrypted, and cannot be an object column, nested table column, or a LOB column.

If you specify the DEFAULT clause for a nullable column, then the default value is added to existing rows as part of this ALTER TABLE statement, and any update triggers defined on the table are fired. This behavior also results if you change a NOT NULL column with a default value to be nullable.


Restrictions on Adding Columns
The addition of columns is subject to the following restrictions:
....

You cannot add a column with a NOT NULL constraint if table has any rows unless you also specify the DEFAULT clause.
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435385
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicВячеслав Любомудровначиная с 11g добавление столбца без дефолтового значения на сегмент данных вообще не влияет -- чисто операция над словаремС.
only not null
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435421
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|ElicВячеслав Любомудровначиная с 11g добавление столбца без дефолтового значения на сегмент данных вообще не влияет -- чисто операция над словаремС.only not nullДо 12.1.
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435426
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
field_indexВсем доброго дня!
Понятно, что пока статистика по полю не собрана, бессмысленно от Оракла ждать этих знаний.
Можно сразу после добавления поля собрать статистику, но это ведь придется собирать по всей таблице, что приведёт к тем же тормозам.

а что в этом случае меняет статистика?
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435540
field_index
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DВА,

ну вообще-то я действительно не проверяла, но была надежда, что когда Оракл будет видеть, что по столбцу max=min=пусто, то он не пойдёт строить индекс.. Я не права?
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435553
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
погуглите create index online
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435561
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
field_indexкогда Оракл будет видеть, что по столбцу max=min=пусто, то он не пойдёт строить индекс.. Я не права?Как и ориентирующиеся на прошлогодний снег.
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435562
field_index
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DВА,

спасибо, я в курсе. Просто думалось, может есть какой-то неизвестный мне хак/синтаксис сделать так, чтобы создание индекса было только действием над словарём.
...
Рейтинг: 0 / 0
Создание пустого поля по большой таблице сразу с индексом
    #39435642
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
field_indexDВА,

спасибо, я в курсе. Просто думалось, может есть какой-то неизвестный мне хак/синтаксис сделать так, чтобы создание индекса было только действием над словарём.
unusable =)
если версия позволит
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Создание пустого поля по большой таблице сразу с индексом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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