Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Смена типа int на bigint в большом количестве однотипных таблиц?  [new]
teCa
Member

Откуда:
Сообщений: 684
Yasha123
Критик

имхо конечно, но ерунда ваше обоснование

обоснования всей гадкости identity у меня выше даны.
при смене типа в здоровой таблице, которую нельзя было блокировать,
ибо все в нее пишут, другого выхода просто не было.
переливать пришлось в такую же, но с нужным типом и без идентити.
переливаться в такой же кластерный с идентити без сорта сервер противился,
а зато в таблицу с сиквенсом без сорта перелилось,
сиквенс пустили с началом на 1000000 больше, чем был макс. ид переливаемой таблицы.
в старую спокойно писали во время перелива,
потом ренэйм и вот все уже пишут в таблицу с сиквенсом,
а я спокойно доливаю то, что навставляли во время перелива.
а теперь расскажите, как без блокировки основной таблицы с идентити в 100Гб
можно было переделать тип столбца с идентити.


Недавно как раз переливал такую таблицу (1.8млрд записей):
1. Создал новую таблицу с нужным типом
2. Создал ограничения, индексы, триггеры на новой таблице.
3. Создал еще одну копию этой таблицы _update и повесил триггер на боевую, который писал в таблицу _update все UPDATE.
4. Создал скрипт, который пачками по 1000 штук переносил записи из боевой в копию с новым типом. Перед вставкой использовал
SET IDENTITY_INSERT _bigint ON;  

после вставки OFF
5. 2,5 суток переливался весь объем.
6. MERGE с таблицей _update
7. Сверил обе таблицы на NOT EXISTS
8. sp_rename
9. Пересоздал внешние ключи на связанных таблицах
13 ноя 20, 15:19    [22231465]     Ответить | Цитировать Сообщить модератору
 Re: Смена типа int на bigint в большом количестве однотипных таблиц?  [new]
Yasha123
Member

Откуда:
Сообщений: 1929
о боже, зачем же все индексы и триггеры вешать на таблицу-приемник?
триггеры уже свое отработали, когда принимали эти данные в старой таблице...

SET IDENTITY_INSERT ON гарантирует сорт при вставке в новую таблицу,
если даже делать упорядоченный селект из старой.
лично мне ни время, ни место не позволяли 100Гб сортировать.
а нет идентити в новой, нет и сорта, перелилось все минут за 15,
и уже кластерный на месте, по этому самому бигинту.

кто ратует за идентити, просто не переливал с ним ничего объемного.

вот он у меня на таблице лога, это да, мне на него все равно.
ни переливать, ни апдэйтить его никто не будет.
а где на большой нужной таблице и ФК на него завязаны,
т.е. любой перелив должен эти значения сохранять, там идентити зло.
но никого никуда не призываю, пока вам idenity не выстрелит, не сможет по достоинству его оценить
13 ноя 20, 16:36    [22231544]     Ответить | Цитировать Сообщить модератору
 Re: Смена типа int на bigint в большом количестве однотипных таблиц?  [new]
teCa
Member

Откуда:
Сообщений: 684
Yasha123
о боже, зачем же все индексы и триггеры вешать на таблицу-приемник?
триггеры уже свое отработали, когда принимали эти данные в старой таблице...


Триггеры разумеется были включены только после переключения.
13 ноя 20, 17:05    [22231568]     Ответить | Цитировать Сообщить модератору
 Re: Смена типа int на bigint в большом количестве однотипных таблиц?  [new]
Yasha123
Member

Откуда:
Сообщений: 1929
ок, но индексы надо потом навешивать.
можно сделать сразу только кластерный,
а переливать с тем же order by, что и в кластерном-исходном.
и тогда, если нет идентити в приемнике, перельется без сорта
13 ноя 20, 17:44    [22231608]     Ответить | Цитировать Сообщить модератору
 Re: Смена типа int на bigint в большом количестве однотипных таблиц?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 34241
Блог
Yasha123
ок, но индексы надо потом навешивать.
можно сделать сразу только кластерный


с чего бы?
таблица на несколько миллиардов записей, ее нужно перелить в другую, по времени вы особо не ограничены,
индексы вы решили повесить потом,
и, внезапно, в работающем коде оказались DDL операции )
13 ноя 20, 17:59    [22231620]     Ответить | Цитировать Сообщить модератору
 Re: Смена типа int на bigint в большом количестве однотипных таблиц?  [new]
Yasha123
Member

Откуда:
Сообщений: 1929
это у кого это DDL-операции,
когда приложение только db_datareader + db_datawriter?
истребив идентити, истребляется и set identity_insert,
и сразу отпадает надобность в alter table.
так что это у вас в коде DDL,
а я могу спать спокойно
13 ноя 20, 18:13    [22231625]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Microsoft SQL Server Ответить