powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / ALTER TABLE -> Long Transaction
9 сообщений из 9, страница 1 из 1
ALTER TABLE -> Long Transaction
    #35759245
Leonid Vorontsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток!

Есть необходимость увеличить длину поля с VARCHAR( 12 ) на VARCHAR( 20 ) в очень большой таблице (порядка 20 млн строк), но обычным способом (ALTER TABLE NODIFY) это сделать не удаётся - длинная транзакция. Может кто-то знает "секретный" способ это сделать не отключая журналирование базы?
...
Рейтинг: 0 / 0
ALTER TABLE -> Long Transaction
    #35759274
cpr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
cpr
Гость
Leonid Vorontsov,

наверное перевести таблицу в raw режим.
...
Рейтинг: 0 / 0
ALTER TABLE -> Long Transaction
    #35759334
yack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не очень, конечно, красиво, но все же...
Если достаточно свободного пространства и есть регламентное время для тех.работ, можно попробовать сделать копию таблицы с увеличенным полем и перелить данные с одной таблицы в другую фрагментами, умещающимися в транзакцию по времени, путем INSERT INTO new_table (SELECT * FROM old_table WHERE id BETWEEN ... AND ...).
потом, соответственно, переименовать.
...
Рейтинг: 0 / 0
ALTER TABLE -> Long Transaction
    #35759337
Алексан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid VorontsovДоброе время суток!

Есть необходимость увеличить длину поля с VARCHAR( 12 ) на VARCHAR( 20 ) в очень большой таблице (порядка 20 млн строк), но обычным способом (ALTER TABLE NODIFY) это сделать не удаётся - длинная транзакция. Может кто-то знает "секретный" способ это сделать не отключая журналирование базы? журналов добавить?
...
Рейтинг: 0 / 0
ALTER TABLE -> Long Transaction
    #35759376
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid VorontsovДоброе время суток!

Есть необходимость увеличить длину поля с VARCHAR( 12 ) на VARCHAR( 20 ) в очень большой таблице (порядка 20 млн строк), но обычным способом (ALTER TABLE NODIFY) это сделать не удаётся - длинная транзакция. Может кто-то знает "секретный" способ это сделать не отключая журналирование базы?странно это, вообще должен быть inplace alter моментальный. (Помнится баг года 2001 (на роллбеке), который ронял мне сервак раз в 3дня, чуть не поседел тогда).
...
Рейтинг: 0 / 0
ALTER TABLE -> Long Transaction
    #35759377
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексанжурналов добавить?

Если даже это не поможет, то:

1. ALTER TABLE .. ADD new_column VARCHAR(20);

если остановка работы пользователей с old_column невозможна, то:
1.1. для поддержки в онлайн автоматом нового поля
CREATE TRIGGER ... ON INSERT ... UPDATE ... SET new_column = old_column WHERE pk= old.pk
CREATE TRIGGER ... ON UPDATE OF old_column UPDATE ... SET new_column = old_column WHERE pk= old.pk


2. пишите и запускаете ХП, которая неспеша (в цикле и т.д.) обновляет new_column для существующих записей (тут уж сами заботьтесь, чтобы и лишней работы не делать, и таки ВСЕ записи проапдейтить)

3. избавляетесь от пользователей :)

3. Если создавали триггера - дропаете их

4. ALTER TABLE .. DROP old_column;
5. RENAME COLUMN xxx.new_column TO old_column;
...
Рейтинг: 0 / 0
ALTER TABLE -> Long Transaction
    #35759650
Фотография Тан
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев ДенисLeonid VorontsovДоброе время суток!

Есть необходимость увеличить длину поля с VARCHAR( 12 ) на VARCHAR( 20 ) в очень большой таблице (порядка 20 млн строк), но обычным способом (ALTER TABLE NODIFY) это сделать не удаётся - длинная транзакция. Может кто-то знает "секретный" способ это сделать не отключая журналирование базы?странно это, вообще должен быть inplace alter моментальный. (Помнится баг года 2001 (на роллбеке), который ронял мне сервак раз в 3дня, чуть не поседел тогда).
на varchar не делается in-place alter
...
Рейтинг: 0 / 0
ALTER TABLE -> Long Transaction
    #35759958
atlas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Использовать onpload.
Выгрузить таблицу с разделителями.
Таблицу удалить и создать raw пустую модифицированную.
Загрузить таблицу, перевести в стандартный тип, создать архив 0 уровня.
...
Рейтинг: 0 / 0
ALTER TABLE -> Long Transaction
    #35759993
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перед выбором варианта с onpload обязательно оценить затраты времени, которые возникнут вследствие
atlasТаблицу удалить

Это затраты на:
1. Работы по созданию скрипта восстановления удалённых констрейнтов (особенно внешних ключей на эту таблицу), триггеров, и всех взглядов, использовавших эту таблицу
2. Работу созданного скрипта из п.1.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / ALTER TABLE -> Long Transaction
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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