Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Репликация транзакций + ссылочная целостность  [new]
Torus
Member

Откуда:
Сообщений: 72
Репликация транзакций, MSSQL 2005 -> MSSQL 2008

Имею 2 таблицы: родительскую и дочернюю (дочерние). Обе участвуют в репликации.
Для репликации родительской таблицы установлен фильтр по значению поля.

Допустим, есть родительская и дочерняя записи в этих таблицах. Обе таблицы в репликации.
Вариант 1. Запись в родительской таблице не удовлетворяет фильтру, на подписчике появляются только дочерние записи.
Вариант 2. Родительская запись удовлетворяет фильтру. Родительская и дочерняя запись реплицируются. Затем на издателе родительская запись изменяется так, что фильтру не удовлетворяет.
Далее в зависимости от параметра NOT FOR REPLICATION:
1) На подписчике родительская запись исчезает, дочерняя становится оборванной, ссылочная целостность нарушена.
FK проверяются только для пользовательских операций, для действий агентов репликации FK игнорируются.
2) Бросается эксепшн зависимости по FK.

Логично было бы следующее поведение, если не реплицируется родительская запись, то не присутствовали (исчезали) и дочерние записи. Можно ли добиться такого поведения при репликации транзакций?

Подскажите выход кроме как писать фильтры репликации для каждой дочерней таблицы с проверкой наличия родительской записи???

Спасибо.
26 сен 11, 17:03    [11337181]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций + ссылочная целостность  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31960
Torus
Подскажите выход кроме как писать фильтры репликации для каждой дочерней таблицы с проверкой наличия родительской записи???
Другого выхода нет.
26 сен 11, 17:09    [11337234]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций + ссылочная целостность  [new]
invm
Member

Откуда: Москва
Сообщений: 9835
FK без not for replication и с каскадным удалением. Но это мина замедленного действия.
26 сен 11, 17:31    [11337364]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций + ссылочная целостность  [new]
Torus
Member

Откуда:
Сообщений: 72
invm - каскадное удаление уже проигрывали, к сожалению не вариант, т.к. это удаление данных прямиком на подписчике. Если родительская запись снова претерпит изменения и будет реплицирована, зависимые записи на подписчике не появятся, будут потеряны.
26 сен 11, 17:36    [11337397]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций + ссылочная целостность  [new]
Torus
Member

Откуда:
Сообщений: 72
alexeyvg
Torus
Подскажите выход кроме как писать фильтры репликации для каждой дочерней таблицы с проверкой наличия родительской записи???
Другого выхода нет.


Ввод фильтра для статьи дочерней таблицы вида

@filter_clause = N'[EntityId] IN
(
	select distinct [EntityId] from [Entity] 
	where [Entity].column = value
)'

показал, что работает это дело только для первичного отсева дочерних записей (см. вариант 1). Если родительская запись перестала удовлетворять фильтру, то она удаляется, а фильтр на дочерние не срабатывает - они остаются.

Такое впечатление, что родительская запись с подписчика не удаляется, а помечается флагом, поэтому фильтр отрабатывает как будто запись есть ))
26 сен 11, 18:32    [11337674]     Ответить | Цитировать Сообщить модератору
 Re: Репликация транзакций + ссылочная целостность  [new]
Torus
Member

Откуда:
Сообщений: 72
Torus
Такое впечатление, что родительская запись с подписчика не удаляется, а помечается флагом, поэтому фильтр отрабатывает как будто запись есть ))

да глупость сказал, фильтр ведь определяется для таблиц на издателе ))

Если есть еще соображения, высказывайте плиз.
Как это вообще работает, если даже таким фильтром целостность поддержать нельзя?
26 сен 11, 18:52    [11337766]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить