Вопрос

Данные из другой системы реплицируются в базу данных SQL Server 2005 в режиме реального времени (в течение дня это сотни транзакций в секунду) с использованием Goldengate. Я хотел бы иметь возможность узнать, была ли недавно транзакция, которая скажет мне, если репликация в настоящее время происходит. Даже в нерабочее время я могу ожидать транзакцию каждые несколько минут, хотя я не буду знать, в какую из 400 таблиц она войдет.

Вот мой текущий процесс:

<Ол>
  • триггер IUD для самой популярной реплицируемой таблицы
  • Дата обновления в " Уведомлении о синхронизации " стол каждый раз, когда есть какая-либо активность на этом столе
  • Задание агента SQL запускается каждые несколько минут и сравнивает эту дату с GETDATE (). Если это было слишком долго, мне пишут.
  • Это работает по большей части, но я получаю ложные срабатывания, если есть активность в других таблицах, но не в отслеживаемой, что может произойти в одночасье.

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

    Единственный «уровень приложения» у меня есть выбор - связаться по TELNET с монитором Goldengate и запросить задержку реплики, а затем проверить результаты. Я открыт для этого, но я бы хотел сделать что-нибудь на стороне SQL, если это более осуществимо.

    Это было полезно?

    Решение

    Это для автоматизированной работы или что-то, на что вы хотите посмотреть время от времени? Если последнее, то вы можете использовать инструмент проверки журнала транзакций (Redgate Log Rescue, Apex SQLLog, возможно, другие).

    Еще один вариант, который вам доступен, - это посмотреть на sysindexes (SQL Server 2000: dbo.sysindex; 2005: sys.sysindexes). Столбец rowmodctr (для цитирования MSDN) " подсчитывает общее количество вставленных, удаленных или обновленных строк с момента последнего обновления статистики для таблицы " . Возможно, он не вернет все, что вам нужно знать, но, если у вас есть покрывающие индексы, он даст представление о том, сколько и где произошли изменения при регулярной выборке.

    Другие советы

    Вы можете проверить SELECT * FROM :: fn_dblog (@startLSN, NULL) и посмотреть, произошла ли какая-либо операция LOP_MODIFY_ROW с момента последней проверки (с момента последней проверки LSN) .

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top