SQL Server Transactional Replication и другие первичные ключи - PullRequest
1 голос
/ 04 декабря 2008

С SQL Server 2005 и репликацией транзакций можно ли удалить ограничения первичного ключа для подписчика, оставив ограничения первичного ключа для издателя?

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

Ответы [ 5 ]

1 голос
/ 04 декабря 2008

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

0 голосов
/ 05 декабря 2008

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

Я настроил простой сценарий репликации транзакций, сбросил первичный ключ на подписчике, а затем произвел некоторые вставки, удаления и обновления и убедился, что изменения были реплицированы на подписчика.

Полагаю, мне следовало начать с этого. Я не знал, что это будет так просто:).

0 голосов
/ 05 декабря 2008

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

Ваш вопрос здесь можно рассматривать как вопрос, можно ли использовать процесс репликации для нарушения этого основного принципа репликации.

Так что ответ - нет, но я все еще интересуюсь причинами, которые позволяют вам сформулировать этот вопрос. Должен ли я сказать, что этот вариант «двойного первичного ключа» рассматривался как способ решения другой проблемы? Я думаю, вам следует вернуться к этой первоначальной проблеме и попытаться найти другой способ ее решения.

0 голосов
/ 04 декабря 2008

Непосредственно для первичного ключа это невозможно. Иначе: когда вы устанавливаете репликацию транзакций, когда вы выбираете статьи для репликации, вы можете выбрать различные свойства, такие как «проверка ограничений внешнего ключа». Установите для этого свойства значение false. В db1 преобразуйте ваш первичный ключ во внешний ключ с новой таблицей tb1, содержащей его в качестве первичного ключа. Таким образом, в конечном счете, в вашей репликации db db2 ограничение внешнего ключа не будет реплицировано, что позволит вам делать то, что вы хотите.

0 голосов
/ 04 декабря 2008

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

Вы можете попытаться приостановить репликацию, а затем попытаться отбросить ограничение первичного ключа, воссоздать его как некластеризованный PK и затем приостановить репликацию. Если SQL Server не позволит вам сбросить ПК, вы узнаете, прежде чем нанести какой-либо ущерб.

Альтернатива - прервать репликацию и повторно инициализировать ее.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...