我知道您可以使用查询来找出哪些数据库启用了自动收缩功能,但我想知道是否可以为维护计划做到这一点。目前我们只有几个维护计划,因此手动检查很容易,但我知道使用查询来执行此操作会很有用。
答案1
我认为这就是你想要的。Jamie Thompson 发布了关于如何从 SSIS 包中提取信息的文章。维护计划是作为 SSIS 包创建的,你可以使用这篇文章中的信息来实现你想要的。祝你好运!
答案2
我可能已经找到了一种在我的环境中实现此操作的方法。我们的维护计划是使用 SQL Server 2008 使用的拖放系统创建的,因此如果您不使用该系统,此操作可能无法正常工作。这是我使用的查询:
从 sysmaintplan_logdetail 中选择不同的 line3,
其中 line1 类似于'%Shrink%'或 line2 类似于'%Shrink%'
我意识到 line1-3 列可能看起来有点令人困惑,所以我会尝试解释一下。sysmaintplan_logdetail 表有一个 line1-5 列。这 5 行似乎描述了维护计划中特定任务的进展情况。它们并不总是满的,我不确定 SQL Server 是否需要创建超过 5 行,但这就是我所需要的。
当我查看 sysmaintplan_logdetail 表中的条目时,我注意到,在维护计划中执行收缩操作时,第 1 行和第 2 行都包含单词 shrink。具体行如下:
line1 - 收缩数据库任务(服务器名称)
line2 - 在本地服务器连接上收缩数据库
line3 - 包含数据库名称
我无法保证这些条目在另一台服务器上会位于同一位置,甚至是相同的字符串,但查看几分钟后,似乎可以使用 sysmaintplan_logdetail 创建一个简单的查询。希望这也能帮助其他人。
答案3
msdb.sysjobsteps 表有一个名为 command 的列。此 command 列包含作业中特定步骤要运行的 SQL 语句。以下查询应确定是否有任何作业步骤会收缩数据库:
从 sysjobs INNER JOIN sysjobsteps 中选择名称
,其中 sysjobs.job_id = sysjobsteps.job_id
为命令 LIKE '%Shrink%'
这应该确定服务器上是否有任何使用 Shrink 的作业并为您提供作业名称。