2012-02-15 22 views
3

SMOを使用してアクティブなユーザーをすべてSQLデータベースから切断する方法はありますか?SMOからのアクティブなSQL接続の切断

以下に関連する質問は同様ですが、SMOの使用については説明しません。

When restoring a backup, how do I disconnect all active connections?

このリンクは、同様の質問ですが、未解決のまま:

http://us.generation-nt.com/answer/smo-detach-fails-due-active-connection-help-122972951.html

+1

いつでも 'database.useraccess'プロパティをシングルユーザーモードに設定することができます... – JNK

+0

ああ素敵!私はそれを試してみましょう... –

+0

あなたの解決策は何ですか? – claudekennilol

答えて

1

すべて外しアクティブユーザービルド機能ではありません。 ExecuteNonQueryを使用する必要があります。ここに例があります:http://www.techtalkz.com/microsoft-windows-powershell/132252-run-transact-sql-using-smo.html

+0

'Database'クラスには' DisconnectAll() 'メソッドなどが必要です。これを行う方法はありませんか? –

+0

問題は、サーバーがビジー状態でシングルユーザーモードを設定した場合、他のプロセスが制御してデータベースを復元できないことが容易だということです。 1つのスクリプト内でそれを行うと、この頭痛を防ぐことができます。 'ALTER DATABASE databasename SET SINGLE_USER WITH ROLLBACK IMMEDIATE'から始めてください。同じスクリプトで復元して、 'ALTER DATABASE databasename SET MULTI_USER WITH ROLLBACK IMMEDIATE'で終了してください。 –

6

KillAllProcessesメソッドを使用できます。

 
add-type -AssemblyName "Microsoft.SqlServer.Smo, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" 
$serverObject = New-Object -TypeName Microsoft.SqlServer.Management.Smo.Server -argumentList 'YourServerNameHere' 
$serverObject.KillAllProcesses('YourDatabaseNameHere') 
確認する場合は、GetActiveDBConnectionCountメソッドを使用できます。しかし、ロールバックなどのために数秒待つことをお勧めします。
$serverObject.GetActiveDBConnectionCount('YourDatabaseNameHere') 

+0

Aha!それが私が探していたものです。私はOPのコメントから 'Database.UserAccess'プロパティを試しましたが、何も影響を与えていないようです。多分、私はすべてのユーザーが切断されるまで待たなければならなかったでしょう。 私はそれをテストして受け入れるチャンスがあるまで、この回答をアップしました。 –

関連する問題