|
Смена типа int на bigint в большом количестве однотипных таблиц?
|
|||
---|---|---|---|
#18+
Yasha123 Критик имхо конечно, но ерунда ваше обоснование обоснования всей гадкости identity у меня выше даны. при смене типа в здоровой таблице, которую нельзя было блокировать, ибо все в нее пишут, другого выхода просто не было. переливать пришлось в такую же, но с нужным типом и без идентити. переливаться в такой же кластерный с идентити без сорта сервер противился, а зато в таблицу с сиквенсом без сорта перелилось, сиквенс пустили с началом на 1000000 больше, чем был макс. ид переливаемой таблицы. в старую спокойно писали во время перелива, потом ренэйм и вот все уже пишут в таблицу с сиквенсом, а я спокойно доливаю то, что навставляли во время перелива. а теперь расскажите, как без блокировки основной таблицы с идентити в 100Гб можно было переделать тип столбца с идентити. Недавно как раз переливал такую таблицу (1.8млрд записей): 1. Создал новую таблицу с нужным типом 2. Создал ограничения, индексы, триггеры на новой таблице. 3. Создал еще одну копию этой таблицы _update и повесил триггер на боевую, который писал в таблицу _update все UPDATE. 4. Создал скрипт, который пачками по 1000 штук переносил записи из боевой в копию с новым типом. Перед вставкой использовал Код: sql 1.
после вставки OFF 5. 2,5 суток переливался весь объем. 6. MERGE с таблицей _update 7. Сверил обе таблицы на NOT EXISTS 8. sp_rename 9. Пересоздал внешние ключи на связанных таблицах ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 15:19 |
|
Смена типа int на bigint в большом количестве однотипных таблиц?
|
|||
---|---|---|---|
#18+
о боже, зачем же все индексы и триггеры вешать на таблицу-приемник? триггеры уже свое отработали, когда принимали эти данные в старой таблице... SET IDENTITY_INSERT ON гарантирует сорт при вставке в новую таблицу, если даже делать упорядоченный селект из старой. лично мне ни время, ни место не позволяли 100Гб сортировать. а нет идентити в новой, нет и сорта, перелилось все минут за 15, и уже кластерный на месте, по этому самому бигинту. кто ратует за идентити, просто не переливал с ним ничего объемного. вот он у меня на таблице лога, это да, мне на него все равно. ни переливать, ни апдэйтить его никто не будет. а где на большой нужной таблице и ФК на него завязаны, т.е. любой перелив должен эти значения сохранять, там идентити зло. но никого никуда не призываю, пока вам idenity не выстрелит, не сможет по достоинству его оценить ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 16:36 |
|
Смена типа int на bigint в большом количестве однотипных таблиц?
|
|||
---|---|---|---|
#18+
Yasha123 о боже, зачем же все индексы и триггеры вешать на таблицу-приемник? триггеры уже свое отработали, когда принимали эти данные в старой таблице... Триггеры разумеется были включены только после переключения. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 17:05 |
|
Смена типа int на bigint в большом количестве однотипных таблиц?
|
|||
---|---|---|---|
#18+
ок, но индексы надо потом навешивать. можно сделать сразу только кластерный, а переливать с тем же order by, что и в кластерном-исходном. и тогда, если нет идентити в приемнике, перельется без сорта ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 17:44 |
|
Смена типа int на bigint в большом количестве однотипных таблиц?
|
|||
---|---|---|---|
#18+
Yasha123 ок, но индексы надо потом навешивать. можно сделать сразу только кластерный с чего бы? таблица на несколько миллиардов записей, ее нужно перелить в другую, по времени вы особо не ограничены, индексы вы решили повесить потом, и, внезапно, в работающем коде оказались DDL операции ) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 17:59 |
|
Смена типа int на bigint в большом количестве однотипных таблиц?
|
|||
---|---|---|---|
#18+
это у кого это DDL-операции, когда приложение только db_datareader + db_datawriter? истребив идентити, истребляется и set identity_insert, и сразу отпадает надобность в alter table. так что это у вас в коде DDL, а я могу спать спокойно ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2020, 18:13 |
|
|
start [/forum/topic.php?fid=46&msg=40018076&tid=1685413]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
83ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 291ms |
total: | 458ms |
0 / 0 |