#sql-server-2008
#sql-server-2008
Вопрос:
Мне нужно захватить операции записи (любой запрос, который изменяет данные), но только для двух определенных таблиц. Возможно ли это настроить в профилировщике Sql? Если да, то каким образом? Я надеюсь на решение, которое не требует фильтрации текста.
Ответ №1:
Основываясь на комментариях к ответам других пользователей, используйте профилировщик SQL по своему усмотрению со следующей настройкой
Event Selection:
-Stored Procedures
- SP: StmtStarting
-TSQL
- SQL:StmtStarting
Column Filters
-TextData (LIKE)
- "insert %"
- "update %"
- "delete %"
Я не хотел фильтровать текстовые данные, но это единственный способ получить то, что я хочу.
Ответ №2:
Я согласен с другим ответом, что CDC — это правильный путь (пока вы используете Enterprise edition)
С помощью профилировщика это технически возможно, но лишь с трудом.
Вы бы начали с захвата TSQL: StmtStarting, TSQL: StmtCompleting
Затем вам нужно будет экспортировать список для дальнейшего анализа. Вам пришлось бы написать какой-нибудь анализатор, чтобы отфильтровывать инструкции, которые не соответствуют критериям. Если ваша система получает запросы ad-hoc или подключена к системе, которая генерирует большое разнообразие запросов, анализ списка быстро усложнится в геометрической прогрессии.
Существует также проблема, связанная с тем, что запуск профилировщика сопряжен со значительными накладными расходами, и если бы вы хотели получать эти цифры в течение длительного периода времени, вы бы быстро довели системные ресурсы до неприемлемого уровня для большинства производственных систем.
Короче говоря, было бы забавно попробовать использовать profiler таким образом, но не в сценарии «реального мира».
И это говорит парень, которому нравится смотреть гонки на газонокосилках.
Ответ №3:
Используйте сбор данных изменений, который подробно описан здесь
Если CDC не подходит для вашего выбора, рассмотрите возможность размещения триггера в таблице (таблицах). В триггере захвата данных с SQL Server встроены такие функции, как
select App_name() as 'AppName', CURRENT_USER as 'CurrentUser', HOST_ID () as 'HostID', HOST_NAME () as 'HostName', SESSION_USER as 'SessionUser', SYSTEM_USER as 'SystemUser'
Затем поместите данные в таблицу истории
Комментарии:
1. Мне нужно захватить действия по изменению типа из профилировщика Sql. На самом деле меня не волнует, что будет изменено, просто было установлено некоторое соединение и внесено изменение.
2. До тех пор, пока вы используете Enterprise edition, CDC по-прежнему будет правильным решением. (это недоступно в стандартной версии)