2009-04-24 8 views
6

среда: SQL Server 2005 с пакетом обновления 2 (9.0.3077) транзакционные Публикации (Производство и бета)SQL Server 2005 Репликация

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

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

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

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

+4

Не желая проигрывать Stackoverlfow здесь, однако этот вопрос представляет собой довольно сложный запрос репликации SQL Server. Я бы предложил опубликовать его на форуме Microsoft Replication Server, а затем обновить это сообщение с помощью resutls. –

+2

Пока я работаю над некоторыми материалами репликации прямо сейчас, я согласен с Джоном. Это довольно сложный вопрос. Удачи. :) Возможно, придется ждать, пока кто-то сделает querytimeout.com –

+3

Согласен, Хиллари Коттер - известный эксперт по репликации и наблюдает за сервером репликации SQL Server http://social.msdn.microsoft.com/Forums/en-US/sqlreplication –

ответ

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.

pjjH

Смежные вопросы