2009-06-18 2 views
0

Каков наилучший способ удалить большой двоичный столбец из базы данных SQL Server 2005, но при этом минимизировать размер полученных файлов .mdf и .ldf?Удаление больших объемов данных в SQL Server 2005

Наше приложение позволяет пользователям загружать свои документы. Они хранились как BLOB в столбце в таблице . Со временем эта таблица увеличилась до> 90% от общего размера базы данных.

С тех пор мы изменили ситуацию и больше не нужно хранить документы, подобные этому. Теперь я хотел бы обнулить данные в этом столбце и вернуть базу данных к управляемому размеру (дисковое пространство стоит немного дороже). Будучи устаревшим приложением, я хотел бы поддерживать совместимость и не изменять структуру таблицы.

Наиболее очевидный способ сделать что-то вроде:

update documents set content = 0x0

Но это, кажется, удар .ldf из огромной суммы.

Адресация конкретного симптома, я мог бы тогда или усечение журнала (backup log mydb with truncate_only) или, возможно, попробовать dbcc shrinkdatabase(mydb) или dbcc shrinkfile(mydb_log, 20), но я слышал, это может вызвать неприятные фрагментации и т.д., и не может быть лучше в долгосрочной перспективе.

Было бы лучше создать вторую таблицу со всеми, кроме контентом, скопировать данные через, а затем truncate первый?

Любые мысли будут оценены.

Приветствие

ответ

0

Да, ваша идея создать вторую таблицу из первого минуса столбец содержания затем обрежет исходная таблица, вероятно, будет наиболее эффективной.

2

попытка уронить колонки:

ALTER TABLE foo 
DROP COLUMN foo.name 
+1

и обрезать журнал – jle

+0

и воссоздать столбец (с нулями), если вам нужно где-либо еще – pkmiec

0

Из экспериментов, не похоже, чтобы быть чудодейственным к этому.

Оба предложения позволят мне удалить большой контент без значительного увеличения размера .ldf, однако, единственный способ уменьшить размер .mdf впоследствии - это что-то вроде dbcc shrinkdatabase, которое происходит за счет фрагментации страницы ,

Смежные вопросы