2009-06-16 2 views
1

У меня есть два экземпляра SQL Server 2005, которые географически разделены. Важные базы данных реплицируются с основного места на вторичное, используя транзакционную репликацию.Как обеспечить репликацию SQL Server?

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

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

Мой поисковый запрос некоторое время назад привел к нам, отслеживая таблицу MSrepl_errors и предупреждая, когда были какие-либо записи, но это просто не работает. Последний раз репликация не удалась (прошлой ночью, следовательно, вопрос), ошибки только попадали в эту таблицу, когда она была перезапущена.

Кто-нибудь еще контролирует репликацию и как вы это делаете?


Просто немного дополнительной информации:

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

Поскольку этот агент работает внутри SQL Server, мы не можем просто убедиться, что в Windows работает process.

ответ

1

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

Самый простой способ - настроить его через монитор репликации.

Перейдите к Монитору репликации и выберите конкретную публикацию. Затем выберите вкладку «Предупреждения и агенты», а затем настройте конкретное предупреждение, которое хотите использовать. В нашем случае это Replication: Agent Failure.

Для этого предупреждения у нас установлен ответ «Выполнение задания», которое отправляет электронное письмо. Эта работа также может выполнять некоторую работу, чтобы включить в нее сведения о том, что не удалось, и т. Д.

Это работает достаточно хорошо, чтобы предупредить нас о проблеме, чтобы мы могли ее исправить сразу.

+0

У вас есть информация о том, что на самом деле представляет собой провал? Часто, когда резервное копирование работает в ночное время, пропускная способность предотвращает репликацию немедленно. Это нормально, пока он догоняет, поэтому нам не нужно предупреждение. Я думаю, что это балансирующий акт ... – Damovisa

+0

Честно говоря, мы тоже этого не поняли. Иногда срабатывает предупреждение, но в конце концов репликация завершится успешно. И в основном у нас есть ложные предупреждения, когда наши снимки генерируются (мы делаем это еженедельно). Когда конкретный агент объединения запускается и выходит из строя, предупреждение является истинным и имеет смысл (обычно не удается подключиться к проблемам типа издателя). –

1

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

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

SELECT CHECKSUM_AGG(*) 
FROM audit_base 
WHERE action_timestamp BETWEEN <time1> AND BETWEEN <time2> 

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

С помощью SELECT CHECKSUM_AGG (*) объем данных для каждой таблицы очень мал, поэтому использование пропускной способности проверок будет незначительным. Вам просто нужно убедиться, что ваши чеки не слишком дороги в нагрузке, которые применяются к серверам, и что вы не проверяете данные, которые могут быть частью открытых транзакций репликации, поэтому в этот момент можно ожидать, что они будут отличаться (следовательно, проверка контрольный след несколько минут назад во времени, а не сейчас в моем примере), иначе вы получите слишком много ложных тревог.

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

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

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

+0

Спасибо, Дэвид, это хороший ответ. Мы действительно посмотрели на это раньше и положили его в сторону, ища более простой вариант. Возможно, теперь нам придется кое-что посмотреть. – Damovisa