Pregunta

¿Hay alguna forma de usar Profiler para determinar si las consultas acceden a una tabla?

Vi un evento llamado Object: Open (indica cuándo se ha accedido a un objeto, como para las declaraciones SELECT, INSERT o DELETE) y Object: Closed , pero estos no parecen funcionar.

En particular, creé una traza simple con Object: Open y Object: Closed sin filtros (excepto el estándar '' Nombre de la aplicación no como 'SQL Profiler' '') y ejecuté SELECT TOP 1 * FROM TableName , pero no se informaron eventos.

Entonces, ¿hay alguna manera de usar Profiler para determinar si se está SELECCIONANDO una tabla?

¿Fue útil?

Solución

Puede ser útil investigar los bloqueos que SQL está adquiriendo. Las declaraciones de selección generalmente adquirirán bloqueos compartidos (LCKMS), por lo que puede filtrar esto.

En el generador de perfiles, busque los bloqueos: evento adquirido. El ObjectID se resolverá en la tabla que puede buscar fácilmente con OBJECT_NAME (objectid) . El Modo le indicará el tipo de bloqueo que se está adquiriendo. Los bloqueos compartidos son 3. Para obtener más información, consulte aquí .

Otros consejos

Hay una manera de hacer eso con Profiler, pero tiene un gran impacto en el rendimiento.

En cambio, ¿puede aclarar su pregunta con la versión de SQL Server que está utilizando? Si está utilizando SQL Server 2008, busque el objeto Auditoría, que está diseñado para hacer exactamente eso, además tiene un impacto en el rendimiento muy bajo.

Aquí hay un artículo que explica cómo configurar una auditoría:

Implementación de auditorías de seguridad en SQL Server 2008

Otros carteles han señalado que puede filtrar TextData en el nombre del objeto, pero eso no funciona si alguien usa una vista para acceder al objeto.

He encontrado un camino a través del generador de perfiles, EventClass " Audit Schema Object Access Event " ;.

Si bien descubrí esto de forma independiente después de investigar un poco, encontré este excelente artículo;

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

Saludos,

Darren.

No los veo en SQL Server 2005.

En mi experiencia, miro SQL: StmtStarting AND SP: StmtStarting : puede filtrar TextData en % TABLE_NAME% . Esto incluso detectará cosas dentro de los SP cuando use SP: StmtStarting .

No es a prueba de balas, porque tiene que usar la sintaxis LIKE , pero puede obtener lo que está buscando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top