4

修復を可能にするためにデータベースを single_user モードに設定する必要がありましたが、データベースを multi_user に戻すdbcc checkdbことができません。マスターデータベースに対してクエリウィンドウで次のコマンドを試しましたが、別のスタックオーバーフローの投稿で示唆されているように機能しませんでした:

USE [master]; 
GO 

ALTER DATABASE mydb SET MULTI_USER WITH ROLLBACK IMMEDIATE; 
GO

次のエラーが表示されます。

メッセージ 5064、レベル 16、状態 1、行 2 現時点では、データベース 'mydb' の状態またはオプションを変更できません。データベースはシングル ユーザー モードで、ユーザーが現在データベースに接続しています。
メッセージ 5069、レベル 16、状態 1、行 2 ALTER DATABASE ステートメントが失敗しました。

データベースを右クリックしてプロパティを選択しようとすると、既に使用されているというエラーが表示されます。

どんな助けでも大歓迎です。

4

4 に答える 4

5

既存の接続を強制終了し、同じバッチで MULTI_USER を設定してみてください。

USE master; 
GO
DECLARE @sql nvarchar(MAX);
SELECT @sql = ' KILL ' + CAST(session_id as varchar(5))
    FROM sys.dm_exec_sessions
    WHERE database_id = DB_ID(N'mydb');
SET @sql = @sql + N' ALTER DATABASE mydb SET MULTI_USER;';
EXEC sp_executesql @sql;
GO
于 2015-03-14T23:52:12.537 に答える
-2

最初に master データベースを選択して、alter コマンドを実行してみてください。

機能しない場合は、データベースへの開いている接続がいくつか存在し、プロセスを確認して強制終了できます

use master
GO

select 
d.name, 
d.dbid, 
spid, 
login_time, 
nt_domain, 
nt_username, 
loginame
from sysprocesses p 
inner join sysdatabases d 
    on p.dbid = d.dbid
where d.name = 'dbname'
GO

kill 52 -- kill the number in spid field
GO

exec sp_dboption 'dbname', 'single user', 'FALSE'
GO
于 2015-03-14T21:46:17.997 に答える