Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / использование DBMS_REDEFINITION для обновления типа столбца / 14 сообщений из 14, страница 1 из 1
10.11.2018, 17:26
    #39731092
EvgeniaMakarova
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
Всем привет!

Кто-то пользовался DBMS_REDEFINITION для обновления типа столбца ?
В таблице 60 млн строк,как долго будет альтерить 3 столбца ? Таблица без партиций.

П.С. просто командой альтер не альтерит, говорит данные нужно сначала обнулить
...
Рейтинг: 0 / 0
10.11.2018, 17:44
    #39731097
кит северных морей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
EvgeniaMakarova,

пакет делает полную копию таблицы, с некоторыми наворотами для минимизации downtime, и потом меняет их местами. соответственно, время работы - это время создания полной копии таблицы, плюс ещё чуть-чуть (накатить разницу из MV log в момент обмена).

если есть возможность ненадолго остановить работу с таблицей - проще написать руками, имхо.
...
Рейтинг: 0 / 0
11.11.2018, 09:17
    #39731268
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
EvgeniaMakarovaпросто командой альтер не альтерит, говорит данные нужно сначала обнулитьКонкретней: что на что меняется?
...
Рейтинг: 0 / 0
12.11.2018, 10:37
    #39731576
EvgeniaMakarova
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
Elic,

number to varchar
...
Рейтинг: 0 / 0
14.11.2018, 16:49
    #39733115
Деев И.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
Копирование может идти в фоне. Все изменения тоже можно периодически синхронизировать средствами пакета. Т.е. при этом необязательно останавливать систему. А вот краткое финальное переключение лучше приурочить к запланированной остановке, если от таблицы зависят пакеты с переменными. При переключении они будут инвалидированы.
...
Рейтинг: 0 / 0
16.11.2018, 14:10
    #39734113
EvgeniaMakarova
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
Деев И.,

я в итоге решила сделать так:
1. бэкаплю таблицу
2. транкейт таблицы
3. дропаю индексы и дизаблю кострейнты
4. обновляю типы
5. делаю таблицу ПАРАЛЛЕЛЬ 8 (дба так разрешили)
6. вставляю данные обратно в табу
7. возвращаю назад индексы и констрейнты.

Получается все за приемлемое время- около часа, плюс таблица всегда доступна(как-никак, пустая, без индексов и тп).

Изза чего изначально был вопрос- у меня альтер долго работал ,хотелось как то оптимизировать
...
Рейтинг: 0 / 0
16.11.2018, 14:25
    #39734127
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
Почему бы просто не:
сделать новое поле (с другим именем, но новым типом)

повесить триггер на изменение/вставку старого поля -- менять сразу и новое

заполнить новое поле из старого

попереименовывать

удалить/сделать UNUSABLE старое поле
...
Рейтинг: 0 / 0
16.11.2018, 14:32
    #39734132
MazoHist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
EvgeniaMakarovaДеев И.,

я в итоге решила сделать так:
1. бэкаплю таблицу
2. транкейт таблицы
3. дропаю индексы и дизаблю кострейнты
4. обновляю типы
5. делаю таблицу ПАРАЛЛЕЛЬ 8 (дба так разрешили)
6. вставляю данные обратно в табу
7. возвращаю назад индексы и констрейнты.

Получается все за приемлемое время- около часа, плюс таблица всегда доступна(как-никак, пустая, без индексов и тп).

Изза чего изначально был вопрос- у меня альтер долго работал ,хотелось как то оптимизировать
ШТА????

1. Добавляем три столбца нового типа с именем column_name_n
2. Добавляем триггер на заполнение новых столбцов
3. Заполняем для исторических данных (bulk collect + forall в помощь)
4. rename column_name to column_name_o, column_name_n to column_name, дропаем триггер
5. column_name_o дропаем в часы наименьшей нагрузки.
...
Рейтинг: 0 / 0
16.11.2018, 14:52
    #39734160
EvgeniaMakarova
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
MazoHist,
так это же тоже повлечет обновление индексов и как следствие - времени.
Таблица большая (60 млн строк пока), на ней 7 индексов.
...
Рейтинг: 0 / 0
16.11.2018, 15:12
    #39734179
MazoHist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
EvgeniaMakarova,

какое обновление и каких индексов? На полях с изменением типа есть индексы? (пере)создать их после полной заливки данных.
ЗЫ. при таком пересоздании работа с таблицей не прервется ни на минуту, и время не имеет важного значения.
...
Рейтинг: 0 / 0
16.11.2018, 15:21
    #39734185
EvgeniaMakarova
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
MazoHist,

да, на обновляемых столбцах есть индексы.

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

Кстати во время первого неудачного наката этого обновления 1. закончился темп таблспейс- дба расширили потом и начали заново. 2. закончилось место под архив логи. Логирование на проде принудительное, nologging на таблицы не сработает
...
Рейтинг: 0 / 0
16.11.2018, 15:37
    #39734201
MazoHist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
Знакомая ситуация с релизами, проходили. Могу только посоветовать разбить релиз на 2 части - одна непосредственно с подготовокй столбцов, вторая все остальное. И таблица остается доступной все время. По такой схеме ставили все обновления на высконагруженной системе.
...
Рейтинг: 0 / 0
17.11.2018, 23:38
    #39734655
run09
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
MazoHist,
По вашему удаление колонки это онлайн операция?
...
Рейтинг: 0 / 0
18.11.2018, 07:09
    #39734709
Вячеслав Любомудров
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
использование DBMS_REDEFINITION для обновления типа столбца
Удаление можно сделать и на Новый Год, например

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


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