powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Смена типа int на bigint в большом количестве однотипных таблиц?
6 сообщений из 31, страница 2 из 2
Смена типа int на bigint в большом количестве однотипных таблиц?
    #40017958
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
Критик

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

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


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


после вставки OFF
5. 2,5 суток переливался весь объем.
6. MERGE с таблицей _update
7. Сверил обе таблицы на NOT EXISTS
8. sp_rename
9. Пересоздал внешние ключи на связанных таблицах
...
Рейтинг: 0 / 0
Смена типа int на bigint в большом количестве однотипных таблиц?
    #40018015
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
о боже, зачем же все индексы и триггеры вешать на таблицу-приемник?
триггеры уже свое отработали, когда принимали эти данные в старой таблице...

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

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

вот он у меня на таблице лога, это да, мне на него все равно.
ни переливать, ни апдэйтить его никто не будет.
а где на большой нужной таблице и ФК на него завязаны,
т.е. любой перелив должен эти значения сохранять, там идентити зло.
но никого никуда не призываю, пока вам idenity не выстрелит, не сможет по достоинству его оценить
...
Рейтинг: 0 / 0
Смена типа int на bigint в большом количестве однотипных таблиц?
    #40018029
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
о боже, зачем же все индексы и триггеры вешать на таблицу-приемник?
триггеры уже свое отработали, когда принимали эти данные в старой таблице...


Триггеры разумеется были включены только после переключения.
...
Рейтинг: 0 / 0
Смена типа int на bigint в большом количестве однотипных таблиц?
    #40018063
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок, но индексы надо потом навешивать.
можно сделать сразу только кластерный,
а переливать с тем же order by, что и в кластерном-исходном.
и тогда, если нет идентити в приемнике, перельется без сорта
...
Рейтинг: 0 / 0
Смена типа int на bigint в большом количестве однотипных таблиц?
    #40018072
Фотография Критик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yasha123
ок, но индексы надо потом навешивать.
можно сделать сразу только кластерный


с чего бы?
таблица на несколько миллиардов записей, ее нужно перелить в другую, по времени вы особо не ограничены,
индексы вы решили повесить потом,
и, внезапно, в работающем коде оказались DDL операции )
...
Рейтинг: 0 / 0
Смена типа int на bigint в большом количестве однотипных таблиц?
    #40018076
Фотография Yasha123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это у кого это DDL-операции,
когда приложение только db_datareader + db_datawriter?
истребив идентити, истребляется и set identity_insert,
и сразу отпадает надобность в alter table.
так что это у вас в коде DDL,
а я могу спать спокойно
...
Рейтинг: 0 / 0
6 сообщений из 31, страница 2 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Смена типа int на bigint в большом количестве однотипных таблиц?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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