dbcc checkdb('XYZ', REPAIR_ALLOW_DATA_LOSS) 表示XYZ已经打开并且一次只能有一个用户

Chr*_*uce 7 sql sql-server tsql sql-server-2008

我有一个数据库 XYZ,它有一个损坏的日志文件,现在由于日志文件完全无法使用,这导致这个特定的数据库无法使用,我需要能够重建它。

我已经对这个过程进行了大量研究,但我陷入了 dbcc checkdb 的困境。

我运行了命令

alter database xyz SET single_user with immediate rollback
Run Code Online (Sandbox Code Playgroud)

随后

use master
dbcc checkdb('xyz',REPAIR_ALLOW_DATA_LOSS)
Run Code Online (Sandbox Code Playgroud)

但我一直遇到这个错误:

Msg 924, Level 14, State 1, Line 2
Database 'XYZ' is already open and can only have one user at a time.
Run Code Online (Sandbox Code Playgroud)

我研究的所有内容都表明数据库需要处于紧急模式,然后该数据库需要处于单用户模式。如果我将数据库恢复为多用户模式,则表明数据库需要处于单用户模式。好吧,我这样做,然后得到这个问题。

我跑了

select spid from master..sysprocesses where dbid = DB_ID('XYZ') and spid <> @@spid
Run Code Online (Sandbox Code Playgroud)

检查使用数据库的任何进程,但没有返回任何行,并且日志不显示有关正在恢复的数据库或任何此类性质的任何信息。DB 确实显示为“紧急情况”。

有任何想法吗?

小智 9

将数据库恢复到多用户模式并尝试如下操作。

alter database xyz SET single_user with rollback immediate 

dbcc checkdb('xyz',REPAIR_ALLOW_DATA_LOSS)
Run Code Online (Sandbox Code Playgroud)

可能另一个过程是在您进入数据库连接之前获取数据库连接。结合这两个语句应该确保您获得这种联系。