Sql 截断数据库邮件表

Sql 截断数据库邮件表,sql,sql-server,sql-server-2005,database-mail,Sql,Sql Server,Sql Server 2005,Database Mail,我们的SQL server(2005)上出现了一些驱动器空间问题,我刚刚在sys.allocation\u units表上运行了一些查询,发现我们有26GB的数据库邮件附件。显然,我们已经在我们的msdb中储存了这段时间,没有进行任何清理 因此,我尝试使用sysmail\u delete\u mailtimes\u sp,但我们正在填充日志,它达到了空间限制。我查看了这个sys存储过程,它真正做的就是运行 DELETE FROM sysmail_allitems 带有一些参数和错误处理。这是

我们的SQL server(2005)上出现了一些驱动器空间问题,我刚刚在
sys.allocation\u units
表上运行了一些查询,发现我们有26GB的数据库邮件附件。显然,我们已经在我们的
msdb
中储存了这段时间,没有进行任何清理

因此,我尝试使用
sysmail\u delete\u mailtimes\u sp
,但我们正在填充日志,它达到了空间限制。我查看了这个sys存储过程,它真正做的就是运行

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

我们不需要这些旧邮件数据。我们发送的所有邮件都已在应用程序层中记录和存档。我能跑吗

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

TRUNCATE TABLE sysmail_attachments 

但我担心我会成为孤儿,这会破坏我的系统。有什么建议吗?

也许你可以分块删除

  • 确定一个远在过去的日期,您知道在
    msdb
  • 构造一个
    WHILE
    循环,以执行该日期的
    sysmail\u delete\u mailtimes\u sp
    @sent\u before=@loop\u date
    ),然后递增该日期
  • 等等,直到现在

这样,您就不会在日志中填写太多…

Offtopic,而不是编程问题。请尝试DBA site.AFAIK。您不能截断视图。您不能截断视图。如果截断一个引用了6个表的视图,它将如何工作?它将截断哪些表?您必须批量删除此数据,以避免日志文件过载。