9

アプリケーションからデータベースの復元を実行する必要があります。これを行う前に、次のようにすべてのプロセスを強制終了します。

    private void KillAllProcessesOnSMARTDatabases(Server targetServer)
    {
        targetServer.KillAllProcesses(SMART_DB);
        targetServer.KillAllProcesses(SMART_HISTORY_DB);
        targetServer.KillAllProcesses(SMART_METADATA_DB);
        SqlConnection.ClearAllPools();
    }

ただし、最初のKillAllProcessesを実行すると、次の例外が発生します。

Microsoft.SqlServer.Management.Smo.FailedOperationException:サーバー'MYServer'のアクティブなデータベース接続をすべて削除できませんでした。---> Microsoft.SqlServer.Management.Common.ExecutionFailureException:Transact-SQLステートメントまたはバッチの実行中に例外が発生しました。---> System.Data.SqlClient.SqlException:ユーザープロセスのみを強制終了できます。

サーバーの作成に使用される接続文字列には資格がありますが、終了する必要のあるプロセスは別のユーザーで開始されます。同様のシナリオをテストしたところ、テストは成功しました。

これはごく最近になって起こり始めました。私には、ユーザーによって開始されていないいくつかのプロセスが実行されているように見えますか?

4

2 に答える 2

10

コードがすべてのSQLServerプロセスを終了しようとしているように見えますが、これはお勧めできません。

データベースの復元を実行する場合は、問題のデータベースをsingle_userモードまたはRESTRICTED_USERモードのいずれかに設定する必要があります。後者が最適です。

データベースをRESTRICTED_USERモードに切り替える次の例と、プロセスで開いているユーザー接続を閉じる方法を見てください。

方法:データベースをシングルユーザーモードに設定する

于 2009-09-17T14:24:09.040 に答える
-1

SMOを使用して、特定のデータベースを「強制終了」できます。これにより、そのデータベースへのすべてのクライアント接続のみが強制的に削除され、データベース自体が削除されます。

Microsoft.SqlServer.Management.Smo.Server oServer = this.GetSmoServer();
oServer.KillDatabase(this.DatabaseName);
于 2010-07-22T01:31:15.870 に答える