Репликация SQL Server 2005

Окружающая среда: SQL Server 2005 SP2 (9.0.3077) Транзакционные публикации (производство и бета)

У меня есть ситуация, когда у меня есть две разные установки Replication Publications, в которых используются одни и те же статьи. Каждая из этих публикаций подает подписчик на другой компьютер. Один из этих общих статей - это таблица. На регулярном временном интервале многие записи в этой таблице становятся старыми и больше не нужны. В это время вызывается хранимая процедура, которая удаляет записи.

Чтобы сэкономить ресурсы и улучшить время ожидания подписчиков, я установил свойство репликации в этой хранимой процедуре на «Выполнение хранимой процедуры» вместо стандартного определения «Только для хранения». Таким образом, когда хранимая процедура удаляет 20000000 записей, они не копируют подписчиков. Вместо этого выполнение хранимой процедуры реплицируется и выполняется одна и та же реплицированная хранимая процедура для подписчиков, и она удаляет те же 2 000 000 + строк.

Проблема, с которой я сталкиваюсь, связана с моей второй публикацией. Я не нуждался в таком типе поведения, поэтому я оставил свойство статьи в хранимой процедуре, установленной в «Только определение стандартной процедуры» и ожидал репликации, чтобы удалить строки у другого абонента, но это не было. Таблица у абонента только продолжала получать записи. Поэтому, чтобы исправить это, я установил свойство Article в «Execution ...» и назвал его хорошим. Скорее всего, это лучшее решение, поэтому бета-версия соответствует производству, но по-прежнему выглядит как клоч, поскольку свойства публикации должны работать независимо друг от друга.

Вопрос: Почему «Выполнение хранимой процедуры»? свойство статьи имеет приоритет и применяется к другой публикации, даже если оно настроено на «Только определение стандартной процедуры» в другой публикации?

sql-server,database,sql-server-2005,replication,

6

Ответов: 2


2 принят

Мы широко используем репликацию в нашей компании, поскольку у нас есть 38 складов в нескольких странах, которые все реплицируются на наш основной сервер в Лондоне.

Во-первых, ваши фильтры репликации должны использовать Views, даже простые. Таким образом, если вам нужно настроить фильтр (прочитайте предложение WHERE), вам просто нужно изменить представление и ваше действие. В противном случае вам придется повторно опубликовать свои данные и повторно подписаться на всех, что может стать настоящей болью.

Вы упомянули, что вы выполняете одно и то же удаление как у подписчика, так и у издателя, чтобы синхронизировать их. Это отдает дрожь по моему позвоночнику. Вам гораздо лучше удалять их в одном месте и позволять серверу копировать подписчикам сделанные изменения. Начиная с SQL Server 2005, репликация выполняется очень быстро и эффективно. SQL 2000 был и довольно медленный для репликации. Если вы используете SQL 2005/2008, просто убедитесь, что ваш уровень совместимости (правый щелчок на db, свойства, параметры) установлен на 90 (2005) или 100 (2008). Это переключает сервер sql на быстрые и эффективные методы репликации.

Другой способ - не удалять данные, а хранить их и отфильтровывать, используя предложение where в публикации.


0

Прошло много времени с тех пор, как я активно управлял репликацией, но я подозреваю, что ответ связан с архитектурой лог-ридера и что вы делитесь статьей между публикациями. Я понимаю, что лог-ридер будет тратиться через журнал и искать операции с реплицируемыми элементами. В зависимости от параметров статьи отдельные изменения данных могут быть отправлены в таблицу в базе данных распространения или будут опубликованы записи о вызове процедуры. В любом случае, это свойство статьи, а не публикация (публикации), в которой входит статья. Я предполагаю (но не проверял и проверял), что вы можете создавать несколько статей поверх одного и того же объекта базы данных и реплицировать их с помощью @ type = 'logbased', а другой - с помощью @ type = 'proc exec'

Возьмите все это с большой щепоткой соли: хотя я сейчас развиваюсь на SQL 2008, последний раз, когда я делал что-либо с репликацией, был SQL 7.

Pzz ?

SQL-сервер, база данных, SQL-сервер 2005, репликация,
Похожие вопросы