Регистрация запросов и других T-SQL

14

Я хотел бы знать, если SQL Server 2008 R2 имеет схему ведения журналов по умолчанию для SELECTоператоров (или любой другой T-SQL в этом отношении).

Если да, где я могу это увидеть? Если нет, то как я могу это настроить?

Сиань Гарсия
источник

Ответы:

18

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

Существует четыре основных варианта отслеживания активности SELECT на сервере:

  1. Вы можете использовать SQL Server Profiler для подключения к вашему серверу и наблюдать за конкретными действиями, как это происходит.

  2. Вы можете создать трассировку на стороне сервера для регистрации активности в файле трассировки на сервере, который затем может быть прочитан SQL Server Profiler или с помощью fn_trace_gettable для загрузки его в таблицу для дальнейшего анализа.

  3. Вы можете использовать расширенные события , которые предлагают больше функциональных возможностей, чем трассировки на стороне сервера, и которые Microsoft рекомендует вместо трассировок на стороне сервера, начиная с SQL Server 2012.

  4. Вы можете использовать режим аудита C2 .

Вы можете использовать SQL Server Profiler для настройки трассировки (выберите нужные события, фильтры и т. Д.), Затем отсканировать ее с помощью меню «Файл» и выполнить на сервере для создания трассировки на стороне сервера, как описано сюда .

Натан Джолли
источник
5

Существует несколько решений и методов SQL Server для отслеживания операторов SELECT.

  1. Специально разработанные хранимые процедуры и функции - Примечание: этот метод требует глубоких знаний программирования на T-SQL и дополнительного обслуживания хранимых процедур и функций (например, в случае изменения схемы базы данных). Вы можете увидеть больше в этой статье: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html

  2. Технология трассировки SQL Server - вы можете прочитать пошаговую инструкцию в этой статье: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

  3. Использование функции аудита SQL Server. Функция аудита (представленная в SQL Server 2008) позволяет отслеживать события как сервера, так и базы данных и использует технологию расширенных событий. Но аудит на уровне базы данных поддерживается только редакциями SQL Server Developer и Enterprise.

  4. Использование сторонних инструментов, таких как ApexSQL Audit или Idera SQL Compliance Manager

Джейкоб Рид
источник
3

По умолчанию он не регистрирует операторы SELECT. Вы можете обратиться к моему ответу здесь для получения более подробной информации по аудиту операторов SELECT.

Кроме того, по умолчанию он даже не регистрирует операторы T-SQL, вместо этого он регистрирует СОБЫТИЯ, такие как изменение памяти сервера, ошибка входа в систему аудита, событие аудита Addlogin и т. Д., И вы можете найти дополнительную информацию здесь вместе со сценариями T-SQL для извлечения информации из Трассировка по умолчанию.

Кин Шах
источник
3

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

;WITH x AS
(
  SELECT 
    [text] = SUBSTRING(t.[text], 
      (s.statement_start_offset/2)+1, 
      COALESCE(NULLIF(s.statement_end_offset,-1),DATALENGTH(t.[text])*2)
       -(s.statement_start_offset/2)), 
    s.execution_count, s.last_execution_time,
    s.max_logical_reads, s.max_elapsed_time
  FROM sys.dm_exec_query_stats AS s
  CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS t
)
SELECT * FROM x
WHERE LTRIM([text]) LIKE 'SELECT%';

Возможно, вы захотите расширить шаблон - например, он проигнорирует запросы, которые начинаются с ;WITHиронии судьбы, и может захватывать SELECT INTOи даже присваивать переменные, которые не ссылаются на реальные таблицы.

Однако, если вам нужна более детальная информация, ответ Натана - хорошее начало (кроме случаев, когда вы собираетесь использовать трассировку, НЕ используйте Profiler). Просто помните, что регистрация каждого отдельного запроса в вашей системе не будет бесплатной.

Аарон Бертран
источник
Я согласен с приведенным выше утверждением. Я бы очень осторожно следил за всеми выбранными утверждениями в вашей базе данных.
Зейн
Я попробовал ваше решение - возможно ли, что он доставляет только процедуры, функции и триггеры, и ни один из adhoc не выполнял SQL-операторы?
Magier
@Magier Нет, sys.dm_exec_query_stats должен сообщать только о запросах (ad hoc или из модуля).
Аарон Бертран