web-dev-qa-db-ja.com

dbcc checkdb( 'XYZ'、REPAIR_ALLOW_DATA_LOSS)は、XYZがすでに開いており、一度に1人のユーザーしか持てないことを示します。

ログファイルが破損しているDB XYZがあり、ログファイルが完全に使用できないため、この特定のDBが使用できなくなり、再構築できるようにする必要があります。

このプロセスについてはすでに多くの調査を行っていますが、dbcc checkdbに行き詰まっています。

コマンドを実行しました

alter database xyz SET single_user with immediate rollback

そしてその後

use master
dbcc checkdb('xyz',REPAIR_ALLOW_DATA_LOSS)

しかし、私はこのエラーに遭遇し続けます:

Msg 924, Level 14, State 1, Line 2
Database 'XYZ' is already open and can only have one user at a time.

私が調査したすべての結果によると、DBは緊急モードである必要があり、そのDBはシングルユーザーモードである必要があります。 DBをマルチユーザーモードに戻すと、DBをシングルユーザーモードにする必要があることを示しています。さて、私はそれを行ってから、この問題を取得します。

私は走った

select spid from master..sysprocesses where dbid = DB_ID('XYZ') and spid <> @@spid

dBを使用しているプロセスをチェックしても行は返されず、ログには回復中のデータベースやそのような性質について何も表示されません。 DBは「緊急」と表示します。

何か案は?

7

データベースをマルチユーザーモードに戻し、次のようなことを試してください。

alter database xyz SET single_user with rollback immediate 

dbcc checkdb('xyz',REPAIR_ALLOW_DATA_LOSS)

おそらく、別のプロセスがデータベース接続にアクセスする前にデータベース接続を取得しています。両方のステートメントを組み合わせると、その接続が確実に得られるはずです。

9
Ian Chamberland