在新的Azure文件共享上存储SQL Server数据库文件。无法针对这些数据库运行完整/全面的CHECKDB-我认为这与没有创建快照权限的用户帐户有关。结果,我将这些检查卸载到了另一台服务器上,也可以在其中测试.baks。一切正常,除了主数据库,该主数据库在您将其还原为用户数据库并对其运行CHECKDB(https://www.itprotoday.com/my-master-database-really-corrupt)时会注册损坏,即使它没有损坏。
问题:
1)是否有人遇到过在Azure文件共享上存储的SQL数据库文件上运行CHECKDB的相同问题?有解决方法吗?
2)如果无法在PROD中运行CHECKDB,有什么替代方法可以在master上运行?我可以以某种方式将master还原到另一个SQL实例并在那里进行检查吗?
在PROD中执行DBCC CHECKDB(主服务器)时出错:
Msg 5030,第16级,状态12,第4行 无法独占锁定数据库以执行该操作。 Msg 7926,第16级,状态1,第4行 检查语句中止。由于无法创建数据库快照并且无法锁定数据库或表,因此无法检查数据库。请参阅联机丛书以获取有关何时预期出现此行为以及存在哪些解决方法的详细信息。另请参阅先前的错误以获取更多详细信息。
当我在PROD中的用户db上运行DBCC CHECKDB时出现的消息:
DBCC CHECKDB将不会检查SQL Server目录或Service Broker的一致性,因为无法创建数据库快照或因为指定了WITH TABLOCK。
答案 0 :(得分:0)
在Microsoft SQL Server中,运行以下任何DBCC命令时,您可能会收到一条错误消息:
错误消息包含以下文本:
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.
原因:
如果满足以下条件,则会出现此问题:
从SQL Server 2005开始,DBCC CHECK命令在执行任何检查时会创建并使用内部数据库快照以实现一致性。如果数据库中存在一个只读文件组,则不会创建内部数据库快照。为了继续执行检查,DBCC CHECK命令尝试获取EX数据库锁。如果其他用户连接到该数据库,则此尝试获取EX锁定失败。因此,您会收到一条错误消息。
解决方案
要解决此问题,请按照以下步骤操作,而不要对数据库运行DBCC CHECK命令:
此文档可以为解决该问题提供更多帮助。
更新:
对于系统数据库,它不使用数据库快照,但是它将持有表锁。
您还引用了此博客:Checkdb giving error for master database: Mike Walsh为我们提供了有关该错误的更多信息。
希望这会有所帮助。