244

現在、データベースはシングル ユーザー モードです。データベースを拡張しようとすると、次のエラーが表示されます。

データベース 'my_db' にアクセスできません (ObjectExplorer)

また、データベースを削除しようとすると、次のエラーが表示されます。

現時点では、データベース 'my_db' の状態またはオプションを変更できません。データベースはシングル ユーザー モードで、ユーザーが現在データベースに接続しています。

シングルユーザーモードを終了するにはどうすればよいですか? このデータベースを使用しているユーザーはいません。

IIS でサイトを参照しようとすると、次のエラーが表示されます。

現在の Web 要求の実行中に未処理の例外が生成されました。例外の発生元と場所に関する情報は、以下の例外スタック トレースを使用して特定できます。

シングルユーザーモードがこれを引き起こしているように感じます。

4

19 に答える 19

440

一般に、SSMS はバックグラウンドでデータベースへの複数の接続を使用します。

アクセス モードを変更する前に、これらの接続を終了する必要があります。

まず、オブジェクト エクスプローラーが master などのシステム データベースを指していることを確認します。

次に、a を実行して、sp_who2データベース「my_db」へのすべての接続を見つけます。KILL { session id }セッションIDがSPIDリストされている場所を実行して、すべての接続を強制終了しsp_who2ます。

3 番目に、新しいクエリ ウィンドウを開きます。

次のコードを実行します。

-- Start in master
USE MASTER;

-- Add users
ALTER DATABASE [my_db] SET MULTI_USER
GO

データベース ファイルの管理に関する私のブログ記事を参照してください。これはファイルの移動用に書かれていますが、ユーザー管理は同じです。

于 2013-09-23T18:19:41.973 に答える
58

まず、KILL現在実行中のすべてのプロセスを見つけます。

次に、次T-SQLを実行してデータベースをMULTI_USERモードに設定します。

USE master
GO
DECLARE @kill varchar(max) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; '
FROM master..sysprocesses 
WHERE spid > 50 AND dbid = DB_ID('<Your_DB_Name>')
EXEC(@kill);

GO
SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [<Your_DB_Name>] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO
于 2016-08-26T10:42:49.850 に答える
31

シングル ユーザー モードから切り替えるには、次のことを試してください。

ALTER DATABASE [my_db] SET MULTI_USER

シングル ユーザー モードに戻すには、次を使用できます。

ALTER DATABASE [my_db] SET SINGLE_USER

于 2013-09-23T18:14:20.323 に答える
17

私はこれが機能していることを試しました

ALTER DATABASE dbName SET MULTI_USER WITH ROLLBACK IMMEDIATE
于 2014-07-09T12:38:25.487 に答える
10

私は同じ問題を抱えていました.killするsession_idは、次のクエリを使用して見つかりました:

Select request_session_id From sys.dm_tran_locks Where resource_database_id=DB_ID('BI_DB_Rep');
于 2016-08-22T13:10:04.680 に答える
8

以下は私のために働いた:

USE [master]
SET DEADLOCK_PRIORITY HIGH
exec sp_dboption '[StuckDB]', 'single user', 'FALSE';
ALTER DATABASE [StuckDB] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [StuckDB] SET MULTI_USER WITH ROLLBACK IMMEDIATE
于 2015-10-29T10:12:50.887 に答える
1

これは、SQL 2012 で発生したばかりです。シングル ユーザーに設定された元のセッションを強制終了したときに、レプリケーション プロセスが開始されました。しかし、sp_who2 は、DB にアタッチされた新しいプロセスを示しませんでした。SSMS を閉じてから再度開くと、データベース上でこのプロセスを確認できるようになり、それを強制終了してすぐに multi_user モードに切り替えることができ、それが機能しました。

この背後にあるロジックを理解することはできませんが、SSMS のバグのようであり、SQL 2012 でもまだ現れています。

于 2016-04-19T16:49:13.007 に答える
1

my_db へのアクティブな接続を見つけて強制終了することはできませんが、それでも同じエラーが表示されます。サーバー上のデータベースに対して可能なすべてのSSMS接続を切断し、SSMSから新しい接続を作成して、それをマルチユーザーに変更します。

-- Actual Code to change my_db to multi user mode
USE MASTER;
GO
ALTER DATABASE [my_db] SET MULTI_USER

注: これは、SQL Server 2005 のバグの可能性があるようです!

于 2014-09-15T10:47:30.023 に答える