一周前我制定了一个维护计划,每晚都执行得很好。现在Database Shrink任务已停止工作并抛出此错误:
属性大小不适用于数据库“[foo]”。此对象的此属性可能不存在,或者由于访问权限不足而无法检索。
昨天我安装了 Windows Update 提供的几个 SQL Server 修补程序(4411 和 4457,如果重要的话)。这是我可能做出的唯一改变。
我的任务如下所示:
- 连接:本地服务器连接(sa)
- 数据库:
所有数据库所有用户数据库 - 超过时收缩数据库:50 MB
- 收缩后剩余的可用空间量 (10%)
- 将释放的空间返回给操作系统
我的一些发现:
- 如果我生成 T-SQL 代码并手动执行它,它将完美运行。
- 如果我创建一个具有相同数据库收缩任务的新维护计划,它会完美运行。
问题可能是什么?
正如 Shanky 已经评论的那样,运行预定收缩是错误的。网上有很多关于它的信息。找到增长的根本原因并解决它。我会立即摆脱它。
至于错误,似乎与数据库所有权有关。如果您使用错误文本进行搜索,您会在此处、此处和更多地方找到几个相关的问题。
作为建议,我建议切换到Ola Hallengren 维护解决方案来处理 DBCC、索引维护、备份等管理任务。
你为什么要做收缩手术?
如果您每天运行它,这意味着您的数据库每天都在增长并消耗“释放”的空间。
在这种情况下,您每晚都会在数据库中创建碎片。另外,您强制数据库“自动增长”,这需要时间(特别是如果您没有启用即时文件初始化。
当您说“将释放的空间归还给操作系统”时,是否意味着您的数据库文件位于操作系统驱动器 (C:) 上?
如果是这样,我建议您将这些数据库文件移动到不同的驱动器。这样,如果一个文件填满了驱动器,它就不会导致 Windows 崩溃。它还将让 SQL 使用驱动器的所有 IO(而不是与操作系统共享它)。