Найти самые последние действия базы данных SQL Server - PullRequest
0 голосов
/ 14 сентября 2009

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

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

  1. Триггер IUD для самой популярной реплицируемой таблицы
  2. Обновляет дату в таблице «Уведомление о синхронизации» каждый раз, когда в этой таблице есть какие-либо действия
  3. Задание агента SQL запускается каждые несколько минут и сравнивает эту дату с GETDATE (). Если это было слишком долго, мне пишут.

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

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

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

Ответы [ 2 ]

2 голосов
/ 14 сентября 2009

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

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

1 голос
/ 14 сентября 2009

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

...