web-dev-qa-db-ja.com

最初にサブスクライバーにサブスクリプションをドロップする、それを修正する方法?

サブスクリプションの削除を探していましたが、下の画像の警告を無視して、最初にパブリッシャーにドロップせずに、サブスクライブでそれをドロップするのを間違えました。

enter image description here

TITLE:Microsoft SQL Server Management Studio

このアクションにより、データベース 'MY_DATABASE_Sub'から、以前に複製されたデータではなく、選択したサブスクリプション情報が削除されます。サブスクリプション情報の削除は、サブスクリプションがパブリッシャーMY_PUBLISHERで削除されている場合、またはサブスクリプションが無効である場合にのみ実行してください。アクティブなサブスクリプションを削除すると、パブリッシャーでエラーが発生します。

サブスクリプション情報を削除してもよろしいですか?

ヘルプが必要な場合は、 http://go.Microsoft.com/fwlink?ProdName=Microsoft%20SQL%20Server&ProdVer=14.0.17119.0&EvtSrc=Microsoft.SqlServer.Management.UI.VSIntegration.ObjectExplorerをクリックしてください。 .Replication.ReplicationMenuItem&EvtID = CleanUpPushSubscriberConfirmation&LinkId = 20476

------------------------------ボタン:

&はい・いいえ

これにより、以下のエラー(黄色)が発生します。基本的に、サブスクリプションはレプリケーションモニターに表示されますが、まったく表示されないはずです。

enter image description here

質問です:このエラーを修正するにはどうすればよいですか?基本的に、ゴーストサブスクリプションをレプリケーションモニターに表示して、フラグが赤くならないようにしますか?

2

このエラーを回避するには、常に最初にパブリッシャーでサブスクリプションを削除してください。

しかし、サブスクライバーでサブスクリプションを削除して、上記の質問でエラーが発生した場合、それを分類する方法は、パブリッシャーサーバーとパブリッシャーデータベースに移動し、以下のスクリプトを実行することでした。記事はまだ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つに赤いエラークロスが付いていることに注意してください。これは、削除したいサブスクリプションでしたが、現在は削除されています: enter image description here

このレプリケーションモニターにはまだエラーがありますが、別のサーバー上にあるため、サブスクリプションとは無関係です。

パブリケーションの削除で問題が発生した場合に役立つため、以下の質問へのリンクを含めたいと思います

SQL Agentは削除されたパブリケーションのレプリケーションをまだ試みています

1