截断数据库邮件 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
,然后递增该日期
- 以此类推直到现在
这样你就不会填满日志...
我们的 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
,然后递增该日期 - 以此类推直到现在
这样你就不会填满日志...