截断数据库邮件表

时间:2016-02-10 21:26:08

标签: sql sql-server sql-server-2005 database-mail

我们的SQL服务器(2005)上遇到了一些驱动器空间问题,我只是在sys.allocation_units表上运行了一些查询,发现我们有26GB的数据库邮件附件。显然,我们刚刚在我们的msdb中将其藏匿了几年而没有进行任何清理。

所以我尝试使用sysmail_delete_mailitems_sp,但我们正在填写我们的日志并且它已经达到我们的空间限制。我查看了这个sys sproc,它正在做的就是运行

DELETE FROM sysmail_allitems 

带有一些参数和错误处理。这是一个系统视图,我假设从sysmail_xyz表的集合中删除。

我们不需要任何此旧邮件数据。我们邮寄的所有内容都已记录并存档在我们的应用程序层中。我可以跑吗

TRUNCATE TABLE sysmail_allitems

这是一个观点,但它正在删除,所以我想知道我是否也可以进行TRUNCATE。如果没有,也许我可以

TRUNCATE TABLE sysmail_attachments 
但是,我担心我会孤立一些会破坏我系统的东西。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

也许你可以删除大块?

  • 确定过去的日期,您知道msdb
  • 中没有任何邮件
  • 构建WHILE循环以执行该日期sysmail_delete_mailitems_sp的{​​{1}},然后递增该日期
  • 依此类推至今

这样你就不会填满日志......