レプリケーションが設定されたSQL Server 2008 のデータベースを、異なるネットワークのSQL Server 2008にリストアすると、レプリケーション設定まで復元されました。SQL Server Management Studio(SSMS)のUIからサブスクリプションを削除しようとすると、エラーが発生し削除できなくなりました。どうやら、削除しようとすると、サブスクリプション先に通信をおこなっているらしく、サブスクリプション先が存在しないとエラーになるようです。その場合、クエリを実行して強制的に削除する必要があります。今回は強制的にサブスクリプションを削除する覚書を記載します。

1. サブスクライバの強制削除

UIからサブスクリプション設定を削除できなくなった場合、sp_dropsubscriptionストアドプロシージャを使用してサブスクライバを強制的に削除します。下に使用例を記載します。 

exec sp_dropsubscription @publication='sample_publication',@article='all',@subscriber='svr001',@ignore_distributor=1

重要なのは @ignore_distributor=1 となっているパラメタです。この設定で強制的にサブスクリプションが削除されます。そのほかのパラメタはストアドの説明を参照してもらえばわかりますが、@publicationはパブリケーション名、@articleに削除するアーティクル名を指定します。allを指定してすべて削除するようにしています。@subscriber はサブスクライバ名(サーバ名)を指定します。sp_dropsubscriptionの詳細な解説についてはMSDNを参照してください。

sp_dropsubscription (Transact-SQL)
http://msdn.microsoft.com/ja-jp/library/ms184385.aspx

プッシュ サブスクリプションを削除する方法 (レプリケーション Transact-SQL プログラミング)
http://msdn.microsoft.com/ja-jp/library/ms146944.aspx

ちなみに、パブリケーション設定をストアドから削除する場合は、sp_droppublication を使用します。

今回の説明は以上です。