Найти самые последние действия базы данных SQL Server
-
07-07-2019 - |
Вопрос
Данные из другой системы реплицируются в базу данных SQL Server 2005 в режиме реального времени (в течение дня это сотни транзакций в секунду) с использованием Goldengate. Я хотел бы иметь возможность узнать, была ли недавно транзакция, которая скажет мне, если репликация в настоящее время происходит. Даже в нерабочее время я могу ожидать транзакцию каждые несколько минут, хотя я не буду знать, в какую из 400 таблиц она войдет.
Вот мой текущий процесс:
<Ол>Это работает по большей части, но я получаю ложные срабатывания, если есть активность в других таблицах, но не в отслеживаемой, что может произойти в одночасье.
Есть ли другие предложения, кроме добавления этого же триггера к каждой таблице в базе данных? Если я добавлю триггеры, как предотвратить взаимные блокировки и конфликты в " Уведомлении о синхронизации " Таблица? Поскольку меня не волнует, что самая последняя дата является точной в периоды высокой конкуренции, есть ли способ заставить 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) . р>