SQL Server のマージレプリケーションで、エラー21036が表示された時の対処方法
SQL Serverのマージレプリケーション処理の最中に処理が中断された場合、次回同期時にサブスクライバ側でエラー(21036)が発生し、以降、同期ができなくなることがありました。
#どこかの誰かのために復帰方法をメモしておきます。
●発生しているエラー詳細:
試行したコマンド:
{call sp_MSensure_single_instance (N'pubserver\aaa-dbPub-Pub_dbPub-mypc\SQLEXPRESS-7', 4)}エラー メッセージ:
マージ プロセスで、Publisher 'pubserver\aaa:dbPub' に接続できませんでした。サーバーが実行されていることを確認してください。 (ソース: MSSQL_REPL, エラー番号: MSSQL_REPL-2147199368)
ヘルプの表示: http://help/MSSQL_REPL-2147199368
サブスクリプションに対して別の merge エージェントが実行されているか、サーバーで同じエージェントからの以前の要求が処理されています。 (ソース: MSSQLServer, エラー番号: 21036)
ヘルプの表示: http://help/21036
●対処方法:
パブリッシャのシステムテーブル「sysprocesses」からプロセスを探します。
以下のSQLを実行(※「program_name」の値は環境によって異なります。エラー情報によって適宜変更してください。)
SELECT * FROM sys.sysprocesses
where program_name = 'pubserver\aaa-dbPub-Pub_dbPub-mypc\SQLEXPRESS-7'
該当するプロセスリストが表示された場合、
「spid」列に表示されているプロセスIDを引数にして、クエリウインドウから「kill」します。
(xx は spidに表示されていた数値)
kill xx
これで 再度、サブスクライバ側で同期処理を実行してください。