截断数据库邮件 table

Truncate Database Mail table

我们的 SQL 服务器 (2005) 一直存在一些驱动器 space 问题,我只是 运行 在 sys.allocation_units table 上查询了一些问题并发现我们有 26GB 的数据库邮件附件。显然,我们只是将其存放在我们的 msdb 中,几年来没有进行任何清理。

所以我尝试使用 sysmail_delete_mailitems_sp 但我们正在填满我们的日志并且它达到了我们的 space 限制。我查看了这个 sys 存储过程,它真正做的是 运行ning

DELETE FROM sysmail_allitems 

带有一些参数和错误处理。这是我假设从 sysmail_xyz tables.

集合中删除的系统视图

我们不需要 任何 旧邮件数据。我们邮寄的所有内容都已经在我们的应用程序层中进行了记录和存档。我可以 运行

TRUNCATE TABLE sysmail_allitems

这是一个视图,但正在被删除,所以我想知道我是否也可以截断。如果没有,也许我可以

TRUNCATE TABLE sysmail_attachments 

但恐怕我会孤立一些会破坏我的系统的东西。有什么建议吗?

也许你可以分块删除?

  • 确定一个很久以前的日期,您知道 msdb
  • 中没有任何邮件
  • 构造一个 WHILE 循环来为该日期 (@sent_before=@loop_date) 执行 sysmail_delete_mailitems_sp,然后递增该日期
  • 以此类推直到现在

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