2013-10-25 3 views
2

Надеюсь, это не вне темы, но у меня есть настоящая проблема, о которой я посоветовал использовать некоторые советы.Sql Server issue

У меня есть приложение, которое обновляет собственную базу данных Sql Server (из предыдущих версий) при запуске. Обычно это работает хорошо, но новая версия должна изменить несколько ширины столбцов nvarchar.

В реальных базах данных с большим количеством данных в таблице это занимает очень много времени. Кажется, что существует две проблемы: один из них заключается в том, что сервер Sql, по-видимому, обрабатывает данные (возможно, переписывает их), даже если это фактически не изменяется, а другое - журнал транзакций поглощает огромное пространство.

Есть ли способ обойти эту проблему? Это только простая таблица Alter ... Команда Alter Column, изменяющая nvarchar (x) на nvarchar (x + n), ничего не притворяется, но вызывает «проблему» и много неудовлетворенности в этой области. Если бы был способ изменить ширину столбца без обработки существующих данных и каким-то образом подавить материал журнала транзакций, это было бы удобно.

Это не похоже на проблему с базами данных Oracle.

Пример команды:

IF EXISTS (SELECT 1 FROM information_schema.COLUMNS WHERE table_name='ResourceBookings' AND column_name = ('ResourceBookerKey1') AND character_maximum_length <= 50) 
    ALTER TABLE [ResourceBookings] ALTER COLUMN [ResourceBookerKey1] NVARCHAR(80) NULL 

Как вы можете видеть, таблица только изменится, если ширина столбца должна быть увеличена

ТИА

+0

я понимаю, вы охарактеризовали код, но он все еще может быть полезным разместите фактический код. –

+0

Похоже, что у вас есть какие-то разрывы страниц, но я бы не подумал, что это необходимо с VAR. – Paparazzi

+0

Есть ли какие-либо индексы с этим полем? – valex

ответ

1

Перед обновлением убедитесь, что SQL Server для модели восстановления базы данных установлено значение «Простой». Перейдите в SSMS, щелкните правой кнопкой мыши базу данных, выберите свойства и нажмите на страницы параметров. Запишите значение «Режим восстановления». Установите для модели восстановления значение «Простой», если она еще не установлена ​​(я полагаю, что она установлена ​​в значение FULL).

Затем выполните обновление. После обновления вы можете восстановить значение до того, что было.

В качестве альтернативы вы можете сценарий его с чем-то вроде этого:

Перед обновлением:

ALTER DATABASE MyDatabase SET RECOVERY SIMPLE; 

После обновления:

ALTER DATABASE MyDatabase SET RECOVERY FULL;