Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

Репликация view ?

$
0
0
Коллеги, позвольте попросить вашей консультации по поводу репликации. На трёх серверах есть базы 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. Убрали триггеры - вновь всё заработало как надо. Так что опасаюсь я с триггерами тут дело иметь..
Что скажете? Буду благодарен любому совету или подсказке

Viewing all articles
Browse latest Browse all 7251

Trending Articles