Данные из другой системы реплицируются в базу данных SQL Server 2005 в режиме реального времени (в течение дня это сотни транзакций в секунду) с использованием Goldengate. Я хотел бы иметь возможность узнать, была ли недавно транзакция, которая скажет мне, если репликация в настоящее время происходит. Даже в нерабочее время я могу ожидать транзакцию каждые несколько минут, хотя я не буду знать, в какую из 400 таблиц она войдет.
Вот мой текущий процесс:
- Триггер IUD для самой популярной реплицируемой таблицы
- Обновляет дату в таблице «Уведомление о синхронизации» каждый раз, когда в этой таблице есть какие-либо действия
- Задание агента SQL запускается каждые несколько минут и сравнивает эту дату с GETDATE (). Если это было слишком долго, мне пишут.
Это работает по большей части, но я получаю ложные срабатывания, если есть активность в других таблицах, но не в отслеживаемой, что может произойти в одночасье.
Есть ли другие предложения, кроме добавления этого же триггера к каждой таблице в базе данных? Если я добавлю триггеры, как предотвратить взаимные блокировки и конфликты в таблице «Уведомление о синхронизации»? Поскольку меня не волнует, что самая последняя дата является точной в периоды высокой конкуренции, есть ли способ заставить SQL попытаться обновить дату, но просто пропустить ее, если какой-то другой процесс заблокировал ее?
Единственный выбор «уровня приложения», который у меня есть, - это подключиться к TELNET к монитору Goldengate и запросить задержку реплики, а затем просмотреть результаты. Я открыт для этого, но я бы хотел сделать что-нибудь на стороне SQL, если это более осуществимо.