Несколько издателей, один подписчик (хранилище данных) - PullRequest
1 голос
/ 20 апреля 2011

Я пытаюсь выяснить, как лучше всего заполнить промежуточную базу данных в хранилище данных. У меня будет ряд баз данных (идентичная схема, SQL Server 2005 Standard). В идеале я бы назначил каждого в качестве издателя, с та же публикация. Будет одна база данных подписчика (SQL Server 2005 Enterprise), который подпишется на каждую из баз данных издателя. Данные в базах данных издателя будут изменены. База данных подписчиков будет обновляться только по своим подпискам, и, следовательно, не нужно отправить изменения обратно любому из издателей. Базы данных издателя не нужны обновить друг друга. Репликация будет происходить через Интернет (хотя VPN можно использовать).

Я Не ясно, какую репликацию я должен использовать для этого. Могу ли я сделать это с репликацией? а как насчет инкрементных полей?

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

Репликация может определенно справиться с этим.Вам не нужно ничего делать, кроме стандартной настройки болота, если только нет совпадений между таблицами разных издателей.То есть, если у вас есть pub_a и pub_b в качестве издателей, у которых есть таблица tbl_a, то вы должны либо опубликовать их в разных таблицах у подписчика (таблица назначения определяется в вашем вызове sp_addarticle), либо вам нужно гарантирует, что данные между разрозненными издателями никогда не будут конфликтовать.В последнем случае вам также нужно быть осторожным с тем, что вы предоставляете для параметра @pre_creation_cmd при вызове sp_addarticle.По умолчанию отбрасывается таблица у подписчика, что означает, что последний издатель, добавленный в микс, выиграет, а остальные будут разбиты.Вам нужно будет указать «drop» для первого добавленного издателя и «none» для остальных.Удачи!

1 голос
/ 20 апреля 2011

Я считаю, что это было бы возможно, но вы настроили бы его наоборот, чем вы указали.Вы бы выбрали центральную базу данных в качестве издателя и использовали бы репликацию слиянием.

Слияние репликации включает опцию, позволяющую динамические фильтры - так что выМне нужно настроить фильтры так, чтобы каждый подписчик получал только те строки, которые он создал, - возможно, добавив столбец в некоторые из ваших таблиц, чтобы включить HOST_NAME () сервера, с которого произошла строка.Вам не нужно делать это с каждой таблицей, потому что после того, как вы отфильтровали одну таблицу, вы можете иметь каскадные фильтры, которые отфильтровывают строки из дополнительных таблиц с помощью объединений.

Что касается «инкрементальных полей» - IПредположим, вы говорите здесь о столбцах IDENTITY?К счастью, о них также думали о - в основном, издатель управляет диапазоном IDENTITY и раздает меньшие диапазоны (из 1000 значений по умолчанию) каждому подписчику.

Caveat - этиЭто общие принципы, но я сам раньше не пробовал такого рода настройки.Я бы порекомендовал сначала попробовать его в «игрушечной» базе данных и попытаться заставить его работать.

...