Изменить длину varchar на живом столе


25

У меня есть сервер БД MS SQL Server 2008 R2, который в настоящее время используется с производственным приложением.

Новое усовершенствование приложения теперь требует varchar(100)увеличения длины столбца в таблице.

Можно ли увеличить длину этого существующего столбца в базе данных prod, не влияя на текущие данные?

Обязательно ли вносить это изменение в нерабочее время, чтобы избежать перерыва в обслуживании?

Ответы:


42

Если вы увеличиваете его до varchar(100 - 8000)(т. Е. Что- либо кроме varchar(max)) и делаете это через TSQL, а не через графический интерфейс SSMS

ALTER TABLE YourTable ALTER COLUMN YourCol varchar(200) [NOT] NULL

и не изменяя колонки допустимости пустых от NULLдо NOT NULL(который будет блокировать таблицу , а все строки проверяются и потенциально записываются ) или NOT NULLв NULL некоторых случаях , то это быстро метаданные только изменение. Возможно, придется подождать SCH-Mблокировки на столе, но как только он получит, что изменение будет в значительной степени мгновенным.

Следует помнить, что во время ожидания SCH-Mблокировки другие запросы будут блокироваться, а не перемещаться по очереди перед ним, поэтому вы можете рассмотреть возможность добавления SET LOCK_TIMEOUTпервого.

Также убедитесь, что в ALTER TABLEоператоре вы явно указываете NOT NULL, является ли это исходным состоянием столбца, иначе столбец будет изменен для разрешения NULL.


Спасибо за быстрый ответ, просто проверял. Это было почти мгновенно.
— anataliocs
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.