ログファイルが破損している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は「緊急」と表示します。
何か案は?
データベースをマルチユーザーモードに戻し、次のようなことを試してください。
alter database xyz SET single_user with rollback immediate
dbcc checkdb('xyz',REPAIR_ALLOW_DATA_LOSS)
おそらく、別のプロセスがデータベース接続にアクセスする前にデータベース接続を取得しています。両方のステートメントを組み合わせると、その接続が確実に得られるはずです。