167

接続がアクティブなため、SQL Server 2005 がバックアップを復元しません。どうすれば強制できますか?

4

10 に答える 10

197

データベースをシングルユーザーモードに設定し、復元を実行してから、マルチユーザーに戻します。

ALTER DATABASE YourDB
SET SINGLE_USER WITH
ROLLBACK AFTER 60 --this will give your current connections 60 seconds to complete

--Do Actual Restore
RESTORE DATABASE YourDB
FROM DISK = 'D:\BackUp\YourBaackUpFile.bak'
WITH MOVE 'YourMDFLogicalName' TO 'D:\Data\YourMDFFile.mdf',
MOVE 'YourLDFLogicalName' TO 'D:\Data\YourLDFFile.ldf'

/*If there is no error in statement before database will be in multiuser
mode.  If error occurs please execute following command it will convert
database in multi user.*/
ALTER DATABASE YourDB SET MULTI_USER
GO

参照:Pinal Dave(http://blog.SQLAuthority.com

公式リファレンス:https ://msdn.microsoft.com/en-us/library/ms345598.aspx

于 2009-07-20T15:25:20.237 に答える
181

SQL Server マネジメント スタジオ 2005

データベースを右クリックし、 をクリックしてTasksから をクリックDetach Databaseすると、アクティブな接続を示すダイアログが表示されます。

画面を切り離す

「メッセージ」の下のハイパーリンクをクリックすると、アクティブな接続を切断できます。

その後、データベースをデタッチせずにそれらの接続を切断できます。

詳細はこちら

SQL Server マネジメント スタジオ 2008

SQL Server Management Studio 2008 のインターフェイスが変更されました。手順は次のとおりです ( Tim Leung経由) 。

  1. オブジェクト エクスプローラーでサーバーを右クリックし、[アクティビティ モニター] を選択します。
  2. これが開いたら、[プロセス] グループを展開します。
  3. ドロップダウンを使用して、データベース名で結果をフィルタリングします。
  4. 右クリックの [プロセスの強制終了] オプションを選択して、サーバー接続を強制終了します。
于 2009-07-20T15:20:50.150 に答える
44

このコードは私のために働きました、それはデータベースのすべての既存の接続を殺します。Set @dbname ='databaseName'という行を変更して、データベース名を指定するだけです。

Use Master
Go

Declare @dbname sysname

Set @dbname = 'databaseName'

Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
        Execute ('Kill ' + @spid)
        Select @spid = min(spid) from master.dbo.sysprocesses
        where dbid = db_id(@dbname) and spid > @spid
End

この後、私はそれを復元することができました

于 2012-05-31T10:04:58.247 に答える
5

これを試して:

DECLARE UserCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT
    spid
FROM
    master.dbo.sysprocesses
WHERE DB_NAME(dbid) = 'dbname'--replace the dbname with your database
DECLARE @spid SMALLINT
DECLARE @SQLCommand VARCHAR(300)
OPEN UserCursor
FETCH NEXT FROM UserCursor INTO
    @spid
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @SQLCommand = 'KILL ' + CAST(@spid AS VARCHAR)
    EXECUTE(@SQLCommand)
    FETCH NEXT FROM UserCursor INTO
        @spid
END
CLOSE UserCursor
DEALLOCATE UserCursor
GO
于 2013-04-12T22:46:31.827 に答える
4

SQL サーバーを再起動すると、ユーザーが切断されます。私が見つけた最も簡単な方法 - サーバーをオフラインにしたい場合にも適しています。

しかし、いくつかの非常に奇妙な理由により、「オフラインにする」オプションはこれを確実に実行せず、管理コンソールをハングさせたり混乱させたりする可能性があります。再起動してからオフラインにする

場合によっては、これがオプションになることもあります。たとえば、接続のソースである Web サーバーを停止した場合などです。

于 2010-04-11T08:02:51.027 に答える
2

これらのどれも私のために働いていませんでした、現在のユーザーを削除したり切断したりすることができませんでした。また、DBへのアクティブな接続を確認できませんでした。SQL Serverを再起動する(右クリックして[再起動]を選択)と、それが可能になりました。

于 2012-05-01T03:04:56.047 に答える
2

既に与えられたアドバイスに加えて、DB を使用する IIS を介して実行されている Web アプリがある場合は、復元中にアプリのアプリ プールを停止(リサイクルではなく) してから再起動する必要がある場合もあります。アプリ プールを停止すると、アクティブな http 接続が切断され、それ以上の接続が許可されなくなります。そうしないと、データベースに接続してロックするプロセスがトリガーされる可能性があります。これは、データベースを復元するときの Umbraco コンテンツ管理システムなどの既知の問題です。

于 2013-07-31T00:30:05.490 に答える
1

上記のどれも私にとってはうまくいきませんでした。アクティビティ モニターまたは sp_who を使用して、データベースにアクティブな接続が表示されませんでした。私は最終的にしなければなりませんでした:

  • データベースノードを右クリック
  • 「切り離す...」を選択
  • 「ドロップ接続」ボックスにチェックを入れます
  • 再取り付け

最もエレガントなソリューションではありませんが、機能し、SQL Server を再起動する必要はありません (DB サーバーが他のデータベースの束をホストしていたため、私にとってはオプションではありません)。

于 2016-01-27T03:48:40.230 に答える