|
ALTER TABLE -> Long Transaction
|
|||
---|---|---|---|
#18+
Доброе время суток! Есть необходимость увеличить длину поля с VARCHAR( 12 ) на VARCHAR( 20 ) в очень большой таблице (порядка 20 млн строк), но обычным способом (ALTER TABLE NODIFY) это сделать не удаётся - длинная транзакция. Может кто-то знает "секретный" способ это сделать не отключая журналирование базы? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2009, 14:17 |
|
ALTER TABLE -> Long Transaction
|
|||
---|---|---|---|
#18+
Leonid Vorontsov, наверное перевести таблицу в raw режим. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2009, 14:30 |
|
ALTER TABLE -> Long Transaction
|
|||
---|---|---|---|
#18+
не очень, конечно, красиво, но все же... Если достаточно свободного пространства и есть регламентное время для тех.работ, можно попробовать сделать копию таблицы с увеличенным полем и перелить данные с одной таблицы в другую фрагментами, умещающимися в транзакцию по времени, путем INSERT INTO new_table (SELECT * FROM old_table WHERE id BETWEEN ... AND ...). потом, соответственно, переименовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2009, 14:56 |
|
ALTER TABLE -> Long Transaction
|
|||
---|---|---|---|
#18+
Leonid VorontsovДоброе время суток! Есть необходимость увеличить длину поля с VARCHAR( 12 ) на VARCHAR( 20 ) в очень большой таблице (порядка 20 млн строк), но обычным способом (ALTER TABLE NODIFY) это сделать не удаётся - длинная транзакция. Может кто-то знает "секретный" способ это сделать не отключая журналирование базы? журналов добавить? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2009, 14:56 |
|
ALTER TABLE -> Long Transaction
|
|||
---|---|---|---|
#18+
Leonid VorontsovДоброе время суток! Есть необходимость увеличить длину поля с VARCHAR( 12 ) на VARCHAR( 20 ) в очень большой таблице (порядка 20 млн строк), но обычным способом (ALTER TABLE NODIFY) это сделать не удаётся - длинная транзакция. Может кто-то знает "секретный" способ это сделать не отключая журналирование базы?странно это, вообще должен быть inplace alter моментальный. (Помнится баг года 2001 (на роллбеке), который ронял мне сервак раз в 3дня, чуть не поседел тогда). ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2009, 15:09 |
|
ALTER TABLE -> Long Transaction
|
|||
---|---|---|---|
#18+
Алексанжурналов добавить? Если даже это не поможет, то: 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; ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2009, 15:09 |
|
ALTER TABLE -> Long Transaction
|
|||
---|---|---|---|
#18+
Журавлев ДенисLeonid VorontsovДоброе время суток! Есть необходимость увеличить длину поля с VARCHAR( 12 ) на VARCHAR( 20 ) в очень большой таблице (порядка 20 млн строк), но обычным способом (ALTER TABLE NODIFY) это сделать не удаётся - длинная транзакция. Может кто-то знает "секретный" способ это сделать не отключая журналирование базы?странно это, вообще должен быть inplace alter моментальный. (Помнится баг года 2001 (на роллбеке), который ронял мне сервак раз в 3дня, чуть не поседел тогда). на varchar не делается in-place alter ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2009, 16:20 |
|
ALTER TABLE -> Long Transaction
|
|||
---|---|---|---|
#18+
Использовать onpload. Выгрузить таблицу с разделителями. Таблицу удалить и создать raw пустую модифицированную. Загрузить таблицу, перевести в стандартный тип, создать архив 0 уровня. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2009, 17:53 |
|
ALTER TABLE -> Long Transaction
|
|||
---|---|---|---|
#18+
Перед выбором варианта с onpload обязательно оценить затраты времени, которые возникнут вследствие atlasТаблицу удалить Это затраты на: 1. Работы по созданию скрипта восстановления удалённых констрейнтов (особенно внешних ключей на эту таблицу), триггеров, и всех взглядов, использовавших эту таблицу 2. Работу созданного скрипта из п.1. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2009, 18:08 |
|
|
start [/forum/topic.php?fid=44&msg=35759958&tid=1607913]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
78ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 197ms |
0 / 0 |