In my environment we have a central server running Microsoft SQL Server 2008 and have enabled replication to all of our 27 remote locations, all of which are running MSDE 2000 SP3. The publications are setup with transactional queued replication.
The problem is the Queue Reader Agent is reporting the error:
The publication articles that are defined are not based on views, however they are defined with a filter intended to limit the replication of data to a given remote location. The following are the basic replication structures.
Publication 1 (There is a unique publication for each location to try and limit the amount of data that is replicated between remote location and the central location) Table: CustomerInfo Fields: ID, FirstName, LastName, Address, City, State, HomeLocation Filter: Where CustomerInfo.ID IN(Select Distinct CustomerID From CustomersShipping WHERE LOCATION IN('MYLOC1','AllLOC'))
Publication 2: One publication with all remote databases defined as subscribers Table: CustomerShipping Fields: ID, CustomerID, Location Filter: NO FILTER, all data is replicated
The replication monitor is reporting transactions being delivered from the subscriber to the distributor but I am not sure if some or no transactions are being replicated to the other subscribers that meet the filter requirement of the first publication example. I am not a DBA but need to get this resolved as soon as I can and any help IS GREATLY APPRECIATED!!!!!
If there are any other details needed please let me know.
Thanks for everything!
Does the replication works perfectly if you remove the WHERE condition on your filter ?
Its because, on a view, the WITH CHECK option specifies that during a insert/update/delete you cant change any criteria that would remove a row from the view.
Basically a view with: WHERE CONDITION = 1 cant have an update adjusting contintion to 2, because otherwise those rows would be eliminated from the view.
In your case, you have a where clausule: Where CustomerInfo.ID IN(Select Distinct CustomerID From CustomersShipping WHERE LOCATION IN('MYLOC1','AllLOC'))
And if the CustomersShipping table is being changed, or it is not up to date, or its being updated in any wrong order ( before/after ) that violates the clausule, than the WITH CHECK will alerts.
Do some tests, make CustomersShipping so that the same select executed on both servers returns the same values, test the order of the publications, maybe you are removing something from the view minutes before you try to update it.
And, if possible, test it without the where clausule or with static values in it, this will let us know you that your replication is working with other parameters.
Let us know of your results.
answered Oct 21 '09 at 04:46 PM