当 SQL Server 数据库位于引用的卷的 DBCC CHECKDB 行为

概要

在 Microsoft SQL Server 2012年或 SQL Server 的早期版本中,您运行 DBCC CHECKDB 命令具有一个引用格式的卷上的文件的数据库时可能遇到的错误消息。错误消息如下所示︰

Msg 5030,级别 16 状态 12,第 1 行
可以不以独占方式锁定数据库以执行该操作。

Msg 7926 时,级别 16 状态 1,第 1 行
检查语句已中止。无法创建数据库快照并无法锁定数据库或表,数据库不会检查。当此行为预期行为和有哪些解决方法的详细信息,请参阅联机丛书。请参阅以前的错误,有关更多详细信息。


如果没有用户连接到数据库,DBCC CHECKDB 命令将获得对数据库的独占锁定,然后再执行对数据库,而不是使用内部快照,它通常使用的检查上。

因为 SQL Server 无法创建内部快照数据库通过使用命名流,当数据库文件位于引用的卷时,将发生此问题。

在 Microsoft SQL Server 2014年解决这个问题。在此版本的 SQL Server 开始,命令不使用 DBCC CHECKDB 命名流来创建内部快照数据库。

备注:

  • 在这篇文章的信息适用于 DBCC CHECKDB 家族 (所对应的行,DBCC CHECKALLOC 和定义) 中的所有一致性检查命令。

  • 参照意味着适应性的文件系统,并引入中 Windows Server 2012。

详细信息

DBCC CHECKDB 命令从 Microsoft SQL Server 2005 年与 SQL Server 2012年的 SQL Server 版本中的行为

  • DBCC CHECKDB 创建内部快照数据库。

  • 通过使用命名流的物理数据库文件中创建内部快照数据库。

    • 考虑了E:\Data\my_DB.mdf、 E:\Data\my_DB.ndf和E:\Data\my_DB.ldf的三个文件的数据库。

    • 考虑内部快照数据库创建数据库 ID 为10。

    • 通过使用E:\Data\my_DB.mdf文件将创建内部快照数据库: MSSQL_DBCC10 , E:\Data\my_DB.ndf: MSSQL_DBCC10。

    • 请注意,使用<格式文件名.扩展名创建命名的流>: MSSQL_DBCC <database_id_of_snapshot>。

    • 如果您尝试引用卷上创建文件驻留的命名的流,就会出现错误。但是,如果该文件位于 NTFS 卷,也不会发生此错误。

  • 在文件系统级别命名的数据流标记为稀疏。

    • "硬盘大小"使用命名流将会增加根据 DBCC CHECKDB 命令期间更新源数据库中的数据量。

    • "大小"的命名流将同一文件作为.mdf 或.ndf 文件。

  • 已命名的流是删除结尾的处理不一致。

  • 通过使用普通的文件实用程序,如 Windows 资源管理器中命名的流未亮起。

行为的 DBCC CHECKDB 命令从 SQL Server 2014年开始

  • DBCC CHECKDB 创建内部快照数据库。

  • 通过使用物理数据库文件创建内部快照数据库。

    • 考虑了E:\Data\my_DB.mdf、 E:\Data\my_DB.ndf和E:\Data\my_DB.ldf的三个文件的数据库。

    • 考虑内部快照数据库创建数据库 ID 为10。

    • 通过使用文件E:\Data\my_DB.mdf_MSSQL_DBCC10 , E:\Data\my_DB.ndf_MSSQL_DBCC10,将创建内部快照数据库。

    • 请注意,使用命名约定<文件名.扩展名相同的文件夹中创建新文件> _MSSQL_DBCC <database_id_of_snapshot>。

  • 在文件系统级别,新的文件被标记为稀疏。

    • "硬盘大小"使用新的文件将会增加根据 DBCC CHECKDB 命令期间更新源数据库中的数据量。

    • "大小"的新文件将同一文件作为.mdf 或.ndf 文件。

  • 新文件都会删除结尾的处理不一致。

    • 由 DBCC CHECKDB 这些附加文件具有"删除在关闭"属性设置。

    • 如果 DBCC CHECKDB 命令时,操作系统会遇到意外的关机,然后这些文件将不会清除。他们将积累空间,并有可能将防止未来 DBCC CHECKDB 执行正确完成。在这种情况下,您可以后您确认,没有当前正在执行 DBCC CHECKDB 命令删除这些新文件。

  • 新文件使用普通文件的实用程序,如 Windows 资源管理器中是可见的。

参考资料

DBCC CHECKDB (事务处理 SQL)

可恢复的文件系统概述

当您在 SQL Server 中运行任何 DBCC 检查命令的错误消息:"无法不以独占方式锁定数据库以执行该操作"

对于数据库数据文件报告操作系统错误 1450年和 665

您可能会收到"FCB::RemoveAlternateStreams︰ 操作系统错误

需要更多帮助?

扩展你的技能
了解培训
抢先获得新功能
加入 Microsoft 内部人员

此信息是否有帮助?

谢谢您的反馈意见!

谢谢你的反馈! 可能需要转接到 Office 支持专员。

×