2016-02-10 2 views
1

У нас были проблемы с дисковым пространством на нашем SQL-сервере (2005), и я просто запустил некоторые запросы в таблице sys.allocation_units и обнаружил, что у нас есть 26 ГБ почтовых вложений базы данных. Видимо, мы только что застрелили это в нашем msdb без какой-либо очистки в течение нескольких лет.Усечение базы данных Почтовый стол

Итак, я попытался использовать sysmail_delete_mailitems_sp, но мы заполняем наш журнал, и это поражает наше ограничение по пространству. Я смотрел в этом sys sproc и все, что он действительно делает, работает

DELETE FROM sysmail_allitems 

с некоторыми параметрами и обработкой ошибок. Это системное представление, которое я предполагаю удалить из коллекции таблиц sysmail_xyz.

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

TRUNCATE TABLE sysmail_allitems 

Это мнение, но это время DELETE'd так что мне интересно, если я могу TRUNCATE также. Если нет, возможно, я смогу

TRUNCATE TABLE sysmail_attachments 

но, боюсь, я буду осиротеть чем-то, что нарушит мою систему. Какие-либо предложения?

+0

оффтопик, не programmi g вопрос. Попробуйте сайт DBA. –

+0

AFAIK вы не можете обрезать представление. – SQLChao

+1

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

ответ

2

Возможно, вы можете удалить это кусочки?

  • Определить дату в далеком прошлом, для которого вы знаете, что нет никаких писем, присутствующих в msdb
  • Построить цикл WHILE для выполнения sysmail_delete_mailitems_sp для этой даты (@[email protected]_date), затем увеличить эту дату
  • не
  • И так далее до настоящего

таким образом, вы бы не заполнить журнал, как много ...