September 6, 2013 at 6:34 am
I have a database for an order handling system that is replicated to an other database.
The publisher and distributor database are the same.
I want to keep the publisher database small for performance reasons.
The subscriber database is used for reporting.
I want the delete statements that are executed by the user applications replicated to the subscriber database.
At night I want to run a stored procedure to clean up the publisher database. This involves deleting records from several table if they are older than x days.
These deletes (from the clean up job) I do not want to replicate to the subscriber database.
Is there are way to do this?
So if a user deletes an order from the system with his application then I want to mirror that delete to the subscriber database but if the order is deleted by a clean up job because it is shipped more than 60 days ago then I do not want to mirror that delete.
September 6, 2013 at 7:19 am
You can implement Filter on the publications of tables, or disable log reader of Replication publications for the time being so the record deleted by your Stored procedure doesn't record it and in turn never gets deleted from subscribers.
But I have doubt what about the foreign key constraints with the data.
September 7, 2013 at 12:32 am
Bhaskar.Shetty (9/6/2013)
You can implement Filter on the publications of tables, or disable log reader of Replication publications for the time being so the record deleted by your Stored procedure doesn't record it and in turn never gets deleted from subscribers.But I have doubt what about the foreign key constraints with the data.
A filter on the publications is not an option but I will try the disable of the logreader.
Thanks for your reply
September 8, 2013 at 10:11 pm
Disabling the logreader agent won't work - the log records will remain in the transaction log until the logreader stars up again and the deletes will still be sent to the subscriber.
I think you will need to think about another option - perhaps a logical delete flag. The publisher would treat the record as though it has been deleted and the subscriber would ignore the flag and, hence, would still be able to read the record. Another option would be to configure replication to use custom stored procs and write the code required to keep the deleted records in the subscriber database
September 9, 2013 at 11:45 pm
Thanks for your reply.
Indeed, as I already figured out myself, disabling the logreader won't work.
I will try to find an other solution.
September 11, 2013 at 2:54 am
Hi,
Instead of just deleting the records on the publisher, insert them in an archive table on the subscriber then do your publisher cleanup.
Create a view on the subscriber with both the replicated table and the archive table.
Alter your reports to use the view instead of the table.
This will also mean that if you have to create a new replication snapshot, you won't lose all your archival data on the subscriber.
Would this work for you?
Viewing 6 posts - 1 through 5 (of 5 total)
You must be logged in to reply to this topic. Login to reply