Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Репликация view ?  [new]
невпопад
Guest
Коллеги, позвольте попросить вашей консультации по поводу репликации. На трёх серверах есть базы SQL Server, идентичные по свое структуре. Из каждой базы есть пара таблиц для публикации, которые нужно реплицировать на сервер-subscriber, который будет заниматься репортингом. Всё было бы тривиально, если бы не несколько "но":
- К сожалению, таблицы не имеют primary key, хотя у них присутствует индекс, который является clustered unique. Добавить primary key не получится, потому что поля уникального индекса описаны как допускающие null (хотя никогда это значение не получающие)
- Это "боевые" БД, так что дропнуть таблицы и пересоздать с прописанным ключём, а потом восстановить данные, скорее всего, мне никто не даст
- Так как таблицы идентичны по структуре, возможны коллизии в реплицируемых данных: ключевые поля не созержат уникальное название БД или другой идентефикатор, так что вполне возможны варианты, когда в разных БД окажется одинаковый ключ, так что требуется ввести дополнительный идентификатор
Опыта с репликацией у меня особого нет, настроить простенькую транзакционную репликацию таблиц с праймари ключами через push subscription труда не составило, заодно заметил, что там можно реплицировать ещё и view, но с этим у меня как-то не срослось. Как делал: создал View с новым полем, куда прописал константой идентификатор БД (собственно её имя), далее те же шаги, что и с таблицой. В списке "Local publications" появилась новая публикация нужного мне view. Далее перешёл на сервер и попытался создать subscription. Оный вроде как содался, но в списке Replication->Local Subscriptions его не видно. Данные с сервера публикаций тоже не подтягиваются. При публикации было сказано, что чтобы подписка заработала, нужно чтобы у подписчика были таблицы, которые публицируются. Таблицы есть, но как быть с уникальным идентификатором БД? Решил, раз subscription не видно, попробую пересоздать - ан нет, сервак ругается, что подписка уже есть. Но хоть убейте, её не вижу. Подписку тестовой таблицы, которую создавал тут же - видно.
Так что немного в ступоре, как бы это дело решить?..
Промелькнула идея создать копии нужных таблиц с дополнительным полем и сделать там primary key, навесить на оригиналы триггеры на все типы операций и просто дублировать в эти таблицы всё происходящее с оригинальными таблицами, и эти таблицы уже публиковать... но тут другая проблема - когда-то мы уже делали что-то похожее - создали триггер, вносили в нём данные в отдельную таблицу и мониторили её, но тогда сама программа, которой принадлежит БД, принялась неожиданно подвисать. Хотя её таблицы вообще не трогались, да и частота записи в таблицу была раз в минут 5-10. Убрали триггеры - вновь всё заработало как надо. Так что опасаюсь я с триггерами тут дело иметь..
Что скажете? Буду благодарен любому совету или подсказке
8 ноя 16, 14:22    [19870425]     Ответить | Цитировать Сообщить модератору
 Re: Репликация view ?  [new]
invm
Member

Откуда: Москва
Сообщений: 9842
невпопад
Это "боевые" БД, так что дропнуть таблицы и пересоздать с прописанным ключём, а потом восстановить данные, скорее всего, мне никто не даст
Для того чтобы добавить/удалить ограничение, изменить тип столбца и т.п., совершенно не обязательно пересоздавать таблицу.
невпопад
что там можно реплицировать ещё и view
Если представление не материализовано(индексировано), то реплицируется только его схема.

Самый простой вариант: Обеспечить ПК на публикуемых таблицах. Каждую из них реплицировать на подписчике в свою собственную таблицу. На подписчике сделать представление
create view ConsolidatedData
as
select field1, field2, ..., fieldN from Table1
union all
select field1, field2, ..., fieldN from Table2
union all
select field1, field2, ..., fieldN from Table3
И работать с данными через него.

Более сложный вариант: Обеспечить ПК на публикуемых таблицах. Добавить в эти таблицы вычисляемый столбец, определяющий принадлежность к определенной БД.
На подписчике создать одну консолидированную таблицу в ПК которой валючен столбец-признак источника данных.
Статьи публикаций для этих таблиц дожны быть с горизонтальным фильтром по столбцу-признаку.
8 ноя 16, 15:40    [19870809]     Ответить | Цитировать Сообщить модератору
 Re: Репликация view ?  [new]
невпопад
Guest
invm, спасибо за подсказку - так действительно проще, пришлось всего лишь дропнуть индексы перед созданием ПК. С другой стороны вроде как снэпшоты и вовсе не требуют наличие ПК. Попробовал сделать таким образом - вроде как публикация и подписка создалась, но почему-то изменения с сервера публикации не отображаются у подписчика... Проверил с танзакциями - всё работает. Сижу, чешу репу...
9 ноя 16, 14:55    [19875191]     Ответить | Цитировать Сообщить модератору
 Re: Репликация view ?  [new]
invm
Member

Откуда: Москва
Сообщений: 9842
невпопад,

Снепшот-репликация, как следует из названия, не реплицирует изменения данных.
9 ноя 16, 15:00    [19875217]     Ответить | Цитировать Сообщить модератору
 Re: Репликация view ?  [new]
невпопад
Guest
Понял, спасибо :)

Ещё один вопрос: как настроить на подписчике репликацию в таблицы с другими именами? Т.е. у меня есть публикации на PubSvr1 таблиц Table1, Table2 и на PubSvr2 тоже Table1, Table2, нужно их реплицировать на SubsSvr в виде Pub1Table1, Pub1Table2, Pub2Table1, Pub2Table2. В визарде SQL Server Managment Studio от SQL Server 2008 R2 я вижу, как реплицировать в разные БД, но не могу найти, как реплицировать в таблицы с другими именами... Может ткнёте ссылочкой в какую статейку по этому поводу или мануальчик? Заранее благодарю!
9 ноя 16, 15:34    [19875422]     Ответить | Цитировать Сообщить модератору
 Re: Репликация view ?  [new]
invm
Member

Откуда: Москва
Сообщений: 9842
невпопад
Может ткнёте ссылочкой в какую статейку по этому поводу или мануальчик?

мануальчик
Через GUI: Свойства публикации -> Свойства статьи.
9 ноя 16, 16:01    [19875634]     Ответить | Цитировать Сообщить модератору
 Re: Репликация view ?  [new]
невпопад
Guest
invm, ещё раз огромное спасибо за исчерпывающий ответ! Всё настроил, всё работает :)
9 ноя 16, 16:14    [19875717]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить