Как мне сжать мою базу данных SQL Server? - PullRequest
50 голосов
/ 13 января 2009

У меня есть база данных размером почти 1,9 ГБ, а MSDE2000 не позволяет использовать базы данных, размер которых превышает 2,0 ГБ

Мне нужно сжать эту БД (и многие другие, подобные этой, в разных местах клиентов).

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

Так что теперь мне нужно уменьшить БД для учета отсутствующих записей.

  • Я выполняю DBCC ShrinkDatabase('MyDB') ...... Никакого эффекта.
  • Я испробовал различные средства сжатия, предусмотренные в MSSMS .... По-прежнему безрезультатно.
  • Я создал резервную копию базы данных и восстановил ее ... По-прежнему безрезультатно.

Still 1.9Gb

Почему?

Какую бы процедуру я в итоге ни нашел, ее необходимо воспроизвести на клиентском компьютере, не имеющем доступа ни к чему, кроме OSql или аналогичного.

Ответы [ 15 ]

0 голосов
/ 01 января 2018

Я думаю, что вы можете удалить весь свой журнал с переключением с полного на простое восстановление. Щелкните правой кнопкой мыши на вашей базе данных и выберите Properties, выберите Options и измените

  • Recovery mode до Simple
  • Containment type до None

Switching from full to simple

0 голосов
/ 01 сентября 2015

Не уверен, насколько это будет практично, и в зависимости от размера базы данных, количества таблиц и других сложностей, но я:

  1. дефрагментация физического диска
  2. создать новую базу данных в соответствии с моими требованиями, пространством, процентным ростом и т. Д.
  3. используйте простую задачу ssms для импорта всех таблиц из старой базы данных в новую базу данных
  4. Сценарий индексов для всех таблиц в старой базе данных, а затем воссоздать индексы в новой базе данных. расширять по мере необходимости для внешних ключей и т. д.
  5. при необходимости переименуйте базы данных, подтвердите успешность, удалите старую
0 голосов
/ 11 июля 2011

Я недавно сделал это. Я пытался сделать компактную версию своей базы данных для тестирования в дороге, но я просто не мог ее сжать, независимо от того, сколько строк я удалил. В конце концов, после многих других команд в этом потоке, я обнаружил, что мои кластерные индексы не восстанавливались после удаления строк. Перестройка моих индексов позволила мне правильно сжаться.

0 голосов
/ 19 августа 2009

Удалите данные, убедитесь, что модель восстановления проста, а затем уменьшите (работает либо сжатие базы данных, либо сжатие файлов). Если файл данных по-прежнему слишком велик, и вы используете кучи для хранения данных, то есть нет кластеризованного индекса для больших таблиц, то у вас может возникнуть проблема с удалением данных из кучи: http://support.microsoft.com/kb/913399

0 голосов
/ 13 января 2009

Вы также должны изменить минимальный размер данных и файлов журналов. DBCC SHRINKDATABASE сократит данные внутри файлов, которые вы уже разместили. Чтобы сжать файл до размера меньше его минимального размера, используйте DBCC SHRINKFILE и укажите новый размер.

...