我有一个包含 8 个数据文件的 2Tb+ SAP 数据库,第一个文件已经增长到填满我们 HP EVA5000 上的可用磁盘空间,现在增长的是新文件。我们将 SQL 从 SQL server 2000 升级到 2005,Checkdb 的工作方式不同,现在失败,没有空间来创建快照。我们为每个文件添加了 50Gb 作为临时措施,同时我们预固化了一个新的 I/O 子系统。问题是:我们如何监控快照使用情况?如果 Checkdb 现在启动它有更多空间,然后填满,会发生什么?如果您发现 CheckDb 空间不足,您可以取消它吗?
哦,我昨晚刚在 SQL Server 2008 Internals 一书中读到这个(感谢 Paul Randal)。如果空间不足,快照将被删除。我的意思是在 SQL 2005+ 中,内部引擎实际上是在幕后创建快照并针对它运行 checkdb。您无法访问此快照,因为它对您不可见,但它仍会占用文件所在的文件系统上的空间。如果它没有足够的空间来创建此系统快照,它将引发错误并回滚该快照。
您可以做的是在另一个有足够空间的卷上手动创建数据库的快照,然后针对该卷运行 checkdb。您的结果应该仍然有效,因为快照只是页面更改与基础数据的差异的集合。我相信保罗可以更有说服力地回答这个问题,但这是它的基本要点。
也可以,您可以取消正在运行的 checkdb 查询。
看看保罗博客上的这篇文章,它回答了你的问题:
http://www.sqlskills.com/BLOGS/PAUL/post/CHECKDB-From-Every-Angle-Why-would-CHECKDB-run-out-of-space.aspx