【问题标题】:Truncate Database Mail table截断数据库邮件表
【发布时间】:2016-02-10 21:26:08
【问题描述】:

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

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

DELETE FROM sysmail_allitems 

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

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

TRUNCATE TABLE sysmail_allitems

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

TRUNCATE TABLE sysmail_attachments 

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

【问题讨论】:

  • 离题,不是编程问题。试试 DBA 网站。
  • AFAIK 你不能截断视图。
  • 您不能截断视图。如果您截断引用 6 个表的视图,它将如何工作?它会截断哪些表?您必须批量删除这些数据,以免日志文件过载。

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


【解决方案1】:

也许你可以分块删除?

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

这样你就不会填满日志了……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2015-07-31
    • 2011-02-19
    • 2014-06-21
    • 2011-08-12
    • 1970-01-01
    相关资源
    最近更新 更多