Consultas de registro y otros T-SQL

14

Me gustaría saber si SQL Server 2008 R2 tiene un esquema de registro predeterminado para las SELECTdeclaraciones (o cualquier otro T-SQL para el caso).

En caso afirmativo, ¿dónde puedo verlo? Si no, ¿cómo podría configurarlo?

Xian Garcia
fuente

Respuestas:

18

De forma predeterminada, la actividad de SQL Server no se registra de la manera esperada. Alguna actividad de escritura se registra en el Registro de transacciones , pero esto también depende de cómo estén configuradas sus bases de datos.

Existen cuatro opciones principales para rastrear la actividad SELECT en un servidor:

  1. Puede usar SQL Server Profiler para conectarse a su servidor y observar la actividad específica a medida que sucede.

  2. Puede crear una traza del lado del servidor para registrar la actividad en un archivo de traza en el servidor, que luego puede leer el SQL Server Profiler, o usando fn_trace_gettable para cargarlo en una tabla para un análisis posterior.

  3. Puede usar Extended Events , que ofrece más funcionalidades que los rastreos del lado del servidor, y que Microsoft recomienda en lugar de los rastreos del lado del servidor que comienzan con SQL Server 2012.

  4. Puede usar el modo de auditoría C2 .

Puede usar el Analizador de SQL Server para configurar su rastreo (elija los eventos específicos, filtros, etc. que desee), luego escribirlo usando el menú Archivo y ejecutarlo en el servidor para crear un rastreo del lado del servidor, como se describe aquí .

Nathan Jolly
fuente
5

Existen varias soluciones y técnicas de SQL Server para el seguimiento de las instrucciones SELECT

  1. Procedimientos y funciones almacenados especialmente desarrollados - Nota: este método requiere un conocimiento avanzado de la programación T-SQL y un mantenimiento adicional de los procedimientos y funciones almacenados (por ejemplo, en caso de cambio del esquema de la base de datos). Puede ver más en este artículo: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html

  2. Tecnología de rastreo de SQL Server: puede leer una instrucción paso a paso en este artículo: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

  3. Uso de la función de Auditoría de SQL Server: la función de Auditoría (introducida en SQL Server 2008) puede rastrear eventos tanto del servidor como de la base de datos, y está utilizando la tecnología Extended Events. Pero, la auditoría de nivel de base de datos solo es compatible con las ediciones SQL Server Developer y Enterprise.

  4. Uso de herramientas de terceros como ApexSQL Audit o Idera SQL Compliance Manager

Jaycob Read
fuente
3

Por defecto, no registra las instrucciones SELECT. Puede consultar mi respuesta aquí para obtener más detalles para auditar las declaraciones SELECT.

Además, de forma predeterminada, ni siquiera registra las declaraciones T-SQL, en su lugar registra EVENTOS como Cambio de memoria del servidor, Error de inicio de sesión de auditoría, Evento de inicio de sesión de auditoría, etc. y puede encontrar más información aquí junto con los Scripts T-SQL para extraer información de Rastreo predeterminado.

Kin Shah
fuente
3

Mientras no le importe quién ejecutó las consultas, hay algunas formas de ver las métricas sobre las consultas que se ejecutan en su sistema. Esto se limita a los datos desde el último reinicio y, potencialmente, por la presión de la memoria caché del plan (u otra memoria) dependiendo de cuánto más se extienda la consulta.

;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%';

Es posible que desee extender el patrón; por ejemplo, esto ignorará las consultas que comienzan ;WITH, irónicamente, y puede capturar SELECT INTOe incluso asignaciones variables que no hacen referencia a tablas reales.

Sin embargo, si necesita más información granular que esa, la respuesta de Nathan es un buen comienzo (excepto si va a usar el rastreo, NO use Profiler). Solo recuerda que registrar cada consulta en tu sistema no será gratis.

Aaron Bertrand
fuente
Estoy de acuerdo con la declaración anterior, sería increíblemente cauteloso al monitorear todas las declaraciones seleccionadas en su base de datos.
Zane
Probé su solución: ¿es posible que esto solo proporcione procedimientos, funciones y activadores y ninguna de las sentencias SQL ejecutadas adhoc?
Magier
@Magier No, sys.dm_exec_query_stats solo debe informar sobre declaraciones de consulta (ad hoc o de un módulo).
Aaron Bertrand