Удалить большие объемы данных в SQL Server 2005 - PullRequest
0 голосов
/ 18 июня 2009

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

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

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

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

update documents set content = 0x0

Но, похоже, огромное количество разорвало .ldf.

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

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

Любые мысли приветствуются.

Приветствия

Ответы [ 3 ]

2 голосов
/ 18 июня 2009

попробуйте опустить столбец:

ALTER TABLE foo
DROP COLUMN foo.name
0 голосов
/ 24 июня 2009

Из экспериментов, похоже, нет волшебной пули.

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

0 голосов
/ 18 июня 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...