2016-04-25 22 views
0

記事フィルタと削除操作を使用すると、トランザクションレプリケーションに問題があります。新しいデータをパブリッシャに挿入すると、指定したフィルタに一致するすべてのデータがサブスクライバに挿入されます。すべて正常に動作します。サイト運営者から一部のデータを削除すると、指定したフィルタに一致するすべてのデータがサブスクライバから削除されず、理由がわかりません。 - 出版社(マイクロソフトのSQL Server 2012の)、 B - 販売代理店(Microsoft SQL Serverの2012)、 C - 加入者(のMicrosoft SQL Server 2012の) A:記事フィルタと削除操作を使用したトランザクションレプリケーション

は、私は3台のサーバを持っています。

パブリッシャーデータベースには6つのテーブルがあります。各テーブルには主キーを持っており、そのうちのいくつかは、添付の写真のように外部キーがあります。

Database diagram

をのみ、最初のメーカー(メーカーID = 1)私は、加入者に、パブリッシャからレプリケートするデータ、 IパブリッシャCarPartsテーブルに指定されたフィルタ(メーカーID = 1)を満たし、部品表またはPartDetailsテーブルのすべてのデータを新しいデータを挿入する

SELECT <published_columns> FROM [dbo].[Manufacturer] 
WHERE [dbo].[Manufacturer].ID IN (Select M.ID from [dbo].[Manufacturer] AS M where M.ID = 1) 

SELECT <published_columns> FROM [dbo].[Catalog] 
WHERE [dbo].[Catalog].ID IN (Select C.ID from [dbo].[Catalog] AS C 
INNER JOIN [dbo].[Manufacturer] AS M ON M.ID = C.MID where M.ID = 1) 

SELECT <published_columns> FROM [dbo].[Cars] 
WHERE ID IN (Select CA.ID from [dbo].[Cars] AS CA 
INNER JOIN [dbo].[Catalog] AS C ON C.ID = CA.CID 
INNER JOIN [dbo].[Manufacturer] AS M ON M.ID = C.MID where M.ID = 1) 

SELECT <published_columns> FROM [dbo].[CarParts] 
WHERE ID IN (Select CP.ID from [dbo].[CarParts] AS CP 
INNER JOIN [dbo].[Cars] AS CA ON CA.ID = CP.CarID 
INNER JOIN [dbo].[Catalog] AS C ON C.ID = CA.CID 
INNER JOIN [dbo].[Manufacturer] AS M ON M.ID = C.MID where M.ID = 1) 

SELECT <published_columns> FROM [dbo].[Parts] 
WHERE ID IN (Select P.ID from [dbo].[Parts] AS P 
INNER JOIN [dbo].[CarParts] AS CP ON CP.PID = P.ID 
INNER JOIN [dbo].[Cars] AS CA ON CA.ID = CP.CarID 
INNER JOIN [dbo].[Catalog] AS C ON C.ID = CA.CID 
INNER JOIN [dbo].[Manufacturer] AS M ON M.ID = C.MID where M.ID = 1) 

SELECT <published_columns> FROM [dbo].[PartDetails] 
WHERE ID IN (Select PD.ID from [dbo].[PartDetails] AS PD 
INNER JOIN [dbo].[Parts] AS P ON P.ID = PD.PartID 
INNER JOIN [dbo].[CarParts] AS CP ON CP.PID = P.ID 
INNER JOIN [dbo].[Cars] AS CA ON CA.ID = CP.CarID 
INNER JOIN [dbo].[Catalog] AS C ON C.ID = CA.CID 
INNER JOIN [dbo].[Manufacturer] AS M ON M.ID = C.MID where M.ID = 1) 

加入者に挿入されている:私はこれらのフィルタを使用します。

パブリッシャーのCarPartsテーブルからデータを削除すると、指定したフィルター(製造元ID = 1)を満たすすべてのデータがサブスクライバから削除されるわけではなく、CarPartsテーブルのデータのみが削除されますテーブルとPartDetailsテーブル。

同じフィルタが挿入操作と削除操作に使用されます。どこに問題がありますか?たぶんMicrosoft SQL Server 2012のバグですか?

+0

これまでこれまでに機能しましたか?そのようなフィルタを使用してトランザクションをレプリケートする場合、クエリを実行する前に満足する必要はありませんか?私。 CarPartsテーブルから削除すると 'INNER JOIN'から除外されるため、削除することはできません。 – Shaneis

答えて

0

問題は削除操作シーケンスで発生しました。

問題を解決しました。

関連する問題