Журнал доступа к таблице с использованием SQL Server Profiler - PullRequest
4 голосов
/ 18 ноября 2008

Есть ли способ использовать Profiler для определения того, осуществляется ли доступ к таблице по запросам?

Я видел событие с именем Object:Opened (указывает, когда к объекту обращались, например, для операторов SELECT, INSERT или DELETE) и Object:Closed, но, похоже, оно не работает.

В частности, я создал простую трассировку с Object: Opened и Object: Closed без фильтров (кроме стандартного фильтра «Имя приложения не похоже на« SQL Profiler »)» и запустил SELECT TOP 1 * FROM TableName, но о событиях не сообщалось .

Итак, есть ли способ использовать Profiler для определения того, из какой таблицы ВЫБИРАЕТСЯ?

Ответы [ 4 ]

4 голосов
/ 23 ноября 2008

Это может помочь исследовать блокировки, которые получает SQL. Операторы выбора обычно имеют общие блокировки (LCKMS), поэтому вы можете отфильтровать их.

В профилировщике ищите событие Locks: Acquired. ObjectID преобразуется в таблицу, которую вы можете легко найти с помощью OBJECT_NAME(objectid). Режим сообщит вам, какие типы блокируемых блокировок устанавливаются: 3. Для получения дополнительной информации смотрите здесь .

3 голосов
/ 07 марта 2011

Я нашел способ через профилировщик, EventClass «Событие доступа к объекту схемы аудита».

Хотя я обнаружил это самостоятельно после некоторого раскопок, я нашел эту превосходную статью;

http://www.databasejournal.com/features/mssql/article.php/3887996/Determining-Object-Access-Using-SQL-Server-Profiler.htm

С уважением,

Даррен.

3 голосов
/ 29 ноября 2008

Есть способ сделать это с помощью Profiler, но он чертовски сильно влияет на производительность.

Вместо этого, вы можете уточнить свой вопрос с версией SQL Server, которую вы используете? Если вы используете SQL Server 2008, посмотрите на объект Audit, который предназначен именно для этого, плюс он имеет очень низкое влияние на производительность.

Вот статья, объясняющая, как настроить аудит:

Реализация аудита безопасности в SQL Server 2008

Другие авторы отмечают, что вы можете фильтровать TextData по имени объекта, но это не работает, если кто-то использует представление для доступа к объекту.

0 голосов
/ 18 ноября 2008

Я не вижу их в SQL Server 2005.

По своему опыту, я смотрю на SQL:StmtStarting И SP:StmtStarting - вы можете фильтровать TextData на %TABLE_NAME%. Это даже поймает вещи внутри SP, когда вы используете SP:StmtStarting.

Это не пуленепробиваемый, потому что он должен использовать синтаксис LIKE, но он может получить то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...