サブスクリプションの削除を探していましたが、下の画像の警告を無視して、最初にパブリッシャーにドロップせずに、サブスクライブでそれをドロップするのを間違えました。
TITLE:Microsoft SQL Server Management Studio
このアクションにより、データベース 'MY_DATABASE_Sub'から、以前に複製されたデータではなく、選択したサブスクリプション情報が削除されます。サブスクリプション情報の削除は、サブスクリプションがパブリッシャーMY_PUBLISHERで削除されている場合、またはサブスクリプションが無効である場合にのみ実行してください。アクティブなサブスクリプションを削除すると、パブリッシャーでエラーが発生します。
サブスクリプション情報を削除してもよろしいですか?
------------------------------ボタン:
&はい・いいえ
これにより、以下のエラー(黄色)が発生します。基本的に、サブスクリプションはレプリケーションモニターに表示されますが、まったく表示されないはずです。
質問です:このエラーを修正するにはどうすればよいですか?基本的に、ゴーストサブスクリプションをレプリケーションモニターに表示して、フラグが赤くならないようにしますか?
このエラーを回避するには、常に最初にパブリッシャーでサブスクリプションを削除してください。
しかし、サブスクライバーでサブスクリプションを削除して、上記の質問でエラーが発生した場合、それを分類する方法は、パブリッシャーサーバーとパブリッシャーデータベースに移動し、以下のスクリプトを実行することでした。記事はまだwrong
サブスクリプションを指しています。
これは、実行するスクリプトを生成するスクリプトです。
-- check the server and database
-- these should be the publisher server and publisher database
SELECT @@SERVERNAME
-- CTSTGDB1
SELECT DB_NAME()
-- APIASTG_Repl_Pub
-- go to the publication database
USE APIASTG_Repl_Pub
GO
--check how things are (works for before and after)
sp_helppublication
sp_helpsubscription
--script to generate the drop of all articles in the BANDIT subscription
USE APIASTG_Repl_Pub
GO
select
db_name() PublisherDB
, sp.name as PublisherName
, sa.name as TableName
, UPPER(srv.srvname) as SubscriberServerName
, s.dest_db
,SQL_='exec sp_dropsubscription ' + CHAR(13) +
' @publication=' + '''' + db_name() + '''' + CHAR(13) +
' ,@article=' + '''' + SA.NAME + '''' + CHAR(13) +
' ,@subscriber=' + '''' + UPPER(srv.srvname) + '''' + CHAR(13) +
' ,@destination_db=' + '''' + s.dest_db + ''''
+ CHAR(13) + CHAR(10)
from dbo.syspublications sp
join dbo.sysarticles sa on sp.pubid = sa.pubid
join dbo.syssubscriptions s on sa.artid = s.artid
join master.dbo.sysservers srv on s.srvid = srv.srvid
where s.dest_db = 'MY_WRONG_SUBSCRIPTION'
-- get the _SQL generated above and open a new query,
-- on the same server, same database, run it
-- problem should be solved!!!
以下は例です-上記のスクリプトを実行した後に生成されたスクリプトの部分的なリスト。
exec sp_dropsubscription @publication='MY_WRONG_SUBSCRIPTION' ,@article='repl_Airport' ,@subscriber='MY_SUBSCRIPTION_SERVER' ,@destination_db='MY_WRONG_SUBSCRIPTION'
exec sp_dropsubscription @publication='MY_WRONG_SUBSCRIPTION' ,@article='repl_ArrivalCalendar' ,@subscriber='MY_SUBSCRIPTION_SERVER' ,@destination_db='MY_WRONG_SUBSCRIPTION'
exec sp_dropsubscription @publication='MY_WRONG_SUBSCRIPTION' ,@article='repl_Transportation' ,@subscriber='MY_SUBSCRIPTION_SERVER' ,@destination_db='MY_WRONG_SUBSCRIPTION'
exec sp_dropsubscription @publication='MY_WRONG_SUBSCRIPTION' ,@article='repl_Transportation_Details' ,@subscriber='MY_SUBSCRIPTION_SERVER' ,@destination_db='MY_WRONG_SUBSCRIPTION'
生成されたスクリプトはパブリッシャー(サーバーとデータベース)で実行する必要があります
これはレプリケーションモニターの画像です。2つの行が表示される前の右側に、1つに赤いエラークロスが付いていることに注意してください。これは、削除したいサブスクリプションでしたが、現在は削除されています:
このレプリケーションモニターにはまだエラーがありますが、別のサーバー上にあるため、サブスクリプションとは無関係です。
パブリケーションの削除で問題が発生した場合に役立つため、以下の質問へのリンクを含めたいと思います