question

user-237 (google) avatar image
user-237 (google) asked

Queue Agent Reader Error

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 Queue Reader Agent has encountered the error ''The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION ....

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!

Richard

sql-server-2008replication
10 |1200

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

1 Answer

·
Gustavo avatar image
Gustavo answered

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.

10 |1200

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.