Фильтрованная репликация слиянием SQL Server 2008

Я ищу совета о том, как добиться двунаправленной репликации, которая реплицирует только определенные строки в SQL Server 2008.

Например, я хотел бы реплицировать таблицу A между двумя базами данных (Европа и Азия). Я хотел бы, чтобы таблица содержала как локальные, так и общие данные. Это будет указано с помощью поля «регион» со значениями

  1. Глобальный
  2. Европа
  3. Азия

Я настроил репликацию слиянием с Европой в качестве издателя и Азией в качестве подписчика и фильтром

WHERE region = 1

в попытке реплицировать только строки с регионом = 1

Добавление глобальных строк в базы данных Европы или Азии отлично работает со строками, отображаемыми в таблице напротив.

Добавление строк Europe в базу данных Europe отлично работает, если не выполнять репликацию в базу данных Asia (по желанию).

Однако добавление строк Asia в базу данных Asia не дает желаемого результата, поскольку строка реплицируется в базу данных Europe и удаляется из базы данных Asia.

Я понимаю, почему это может иметь место с отношениями издатель/подписчик, но это расстраивает.

Затем я подумал, что одноранговое соединение может быть решением, но я не могу фильтровать одноранговое соединение.

Есть ли способ достичь того, что я ищу?

Всем спасибо


person Mojo    schedule 12.03.2012    source источник
comment
Это не то, как работают фильтры - вы не говорите, что реплицируете данные только для региона 1, вы говорите, что подписчик должен содержать данные только для региона 1.   -  person Damien_The_Unbeliever    schedule 12.03.2012
comment
Дэмиен, спасибо за ответ. Итак, я могу изменить свой фильтр на регион IN (1,3)? Это означает, что в базе данных Азии будут глобальные данные и данные по Азии, а в базе данных Европы — глобальные данные, данные по Европе и Азии. Любые лучшие идеи относительно того, как я могу достичь того, что я пытаюсь?   -  person Mojo    schedule 12.03.2012


Ответы (2)


Лучший способ справиться с этим — использовать 3-й экземпляр для публикации данных, содержащих глобальные, европейские и азиатские данные. Используйте публикацию слияния, используя параметризованные фильтры строк, которые фильтруют на основе HOST_NAME и региона. 1. Настройте подписки для Европы и Азии, переопределив значение HOST_NAME() для каждой из них.

Таким образом, подписки для Европы и Азии получают только глобальные и региональные данные.

person Brandon Williams    schedule 12.03.2012
comment
Спасибо, Брэндон ... возникает вопрос, где разместить 3-й экземпляр? Если бы он был размещен, например, на европейском сервере, не возникали бы проблемы с потенциальной задержкой у азиатских пользователей? - person Mojo; 15.03.2012
comment
Издатель мог выйти либо в Европу, либо в Азию. Если вы думаете об этом с точки зрения задержки, это ничем не отличается от того, что Европа является издателем, а Азия — подписчиком. Данные по-прежнему должны поступать из Европы в Азию в любом случае. Вы правы, у азиатских пользователей могут возникнуть проблемы с задержкой, но так будет всегда. - person Brandon Williams; 15.03.2012
comment
Чего я надеялся добиться, так это иметь задержку только при глобальной репликации данных. Если я установлю третий экземпляр в Европе, не нужно ли будет отправлять данные из Азии в Европу, а затем обратно? Я надеялся просто сохранить эти локальные данные с каждой стороны и просто переместить глобальный срез. Возможно, было бы лучше разделить данные на повторяющиеся таблицы в БД, а затем просто ОБЪЕДИНИТЬ их, когда мне нужен полный набор, и просто реплицировать глобальные таблицы? - person Mojo; 15.03.2012

Я думаю, что вы должны использовать динамический фильтр. Когда вы создаете фильтр, вы можете вводить более сложные запросы после предложения WHERE. Вы можете увидеть этот учебник, он на испанском языке, но вы можете увидеть запрос. http://www.monografias.com/trabajos97/guia-crear-replica-mezcla-filtros-dinamicos-parametrizados-sql-server/guia-crear-replica-mezcla-filtros-dinamicos-parametrizados-sql-server.shtml

person Dahi    schedule 29.08.2013