当我在 master 数据库上运行 dbcc checkdb 时,出现如下错误
Msg 5030, Level 16, State 12, Line 1
The database could not be exclusively locked to perform the operation.
Msg 7926, Level 16, State 1, Line 1
Check statement aborted. The database could not be checked as a database snapshot could not be created and the database or table could not be locked. See Books Online for details of when this behavior is expected and what workarounds exist. Also see previous errors for more details.
当我搜索它时,我得到了很多链接,说明它发生在数据库具有只读文件组或文件位于 FAT32 文件系统中时。但是当我检查主数据库不在只读文件组中时。但是 mdf 文件是在 FAT32 文件系统中。所以解决方案是将 TABLOCK 与 checkdb 命令一起使用。所以我试过了dbcc checkdb With Tablock
。但我收到了同样的错误信息。那么这个错误的原因是什么。我正在使用 sql server 2008 R2 express(服务包 2)。
FAT32 是这里的原因。而且您不能
TABLOCK
在 Master 数据库上执行 CHECKDB。WITH TABLOCK
将数据库置于只读模式 - 您不能对 Master 数据库执行此操作,因为需要在 Master 数据库上运行的系统操作。您可以通过在同一文件系统上创建一个新的用户数据库然后尝试 CHECKDB,看到相同的错误,然后使用该
TABLOCK
选项对其执行 CHECKDB 来很容易地验证这一点。我的猜测是你在没有选项的情况下得到同样的错误并且在指定选项时你没有得到错误(只要你没有意外打开到数据库的连接)不幸的是,在解决此问题之前,您无法在 Master 上执行常规 CHECKDB。
同时你可以做这个过程(有点痛苦但它有效)
我刚刚在我的 SQL Server 2012 实例上试过这个并且它有效。只有这样你才能做到这一点。
对我来说最大的问题是——为什么你的文件系统是 FAT32?这是什么操作系统?您的所有数据库都在 FAT32 上吗?可以在 FAT32 上,但建议在 NTFS 卷上。在 FAT32 上,您无法获得在 NTFS 上获得的某些权限好处 - 使一些文件处于打开状态以进行操作和由此产生的问题,显然还有这个 CHECKDB 问题。