10

ウィザードとT-SQLの両方を使用してSQLServer2008でディストリビューションを構成しましたが、その後、ウィザードを使用して(レプリケーションを右クリックし、[公開と配布を無効にする...]を選択して)削除するか、次のコマンドを実行します。そのパラメータ:

exec sp_dropdistributor @no_checks = 1 -- no new results with @ignore_distributor = 1

このエラーが表示されます:

Msq 21122、レベル16、状態1、プロシージャsp_dropdistributiondb行124現在使用中のため、ディストリビューションデータベース'lobloblob'を削除できません。

何も公開せず、サブスクリプションを構成しませんでしたが、このエラーが発生しました。どうすればよいですか?

4

3 に答える 3

14

これを試して:

SELECT spid FROM sys.sysprocesses WHERE dbid = db_id('distribution')

スパイを殺して、もう一度やり直してください。これで動作するはずです。

于 2012-04-18T17:30:27.260 に答える
6

次のスクリプトを使用しました。

SELECT spid FROM sys.sysprocesses WHERE dbid = db_id('distribution')

そして、現在のセッションのsession_id(配布構成スクリプトを含む)では配布を無効にできないことがわかったので、このスクリプトで実行中のspidを強制終了して配布を削除することをお勧めします。

use [master]
declare @spid varchar(10)
select @spid=spid from sys.sysprocesses where dbid = DB_ID('distribution')

while @@ROWCOUNTS <> 0
    exec ('KILL ' + @spid)

exec sp_dropdistributor @no_checks = 1
于 2012-05-06T05:34:08.693 に答える
1

私の推測では、ディストリビューションのクリーンアップジョブが問題を引き起こしていると思います。ただし、確認するには、SSMSの1つのウィンドウでsp_dropdistributorを実行する準備をし、ウィンドウのsession_idをメモします。すぐに、実行の準備をしますselect session_id from sys.dm_os_waiting_tasks where blocked_session_id = <spid from window 1>。ウィンドウ1に戻り、procを実行してから、ウィンドウ2に戻り、selectを実行します。データベースのドロップをブロックしているセッションのsession_idsが表示されます。

于 2012-04-17T17:40:12.553 に答える