Consultas de log e outros T-SQL

14

Gostaria de saber se o SQL Server 2008 R2 possui um esquema de log padrão para SELECTinstruções (ou qualquer outro T-SQL).

Se sim, onde posso vê-lo? Caso contrário, como eu poderia configurá-lo?

Xian Garcia
fonte

Respostas:

18

Por padrão, a atividade do SQL Server não é registrada da maneira esperada. Algumas atividades de gravação são registradas no log de transações , mas isso também depende de como seus bancos de dados são configurados.

Existem quatro opções principais para rastrear a atividade SELECT em um servidor:

  1. Você pode usar o SQL Server Profiler para conectar-se ao servidor e observar atividades específicas à medida que elas acontecem.

  2. Você pode criar um rastreamento do lado do servidor para registrar a atividade em um arquivo de rastreamento no servidor, que pode ser lido pelo SQL Server Profiler ou usando fn_trace_gettable para carregá-lo em uma tabela para análise posterior.

  3. Você pode usar os Eventos Estendidos , que oferecem mais funcionalidade do que os rastreamentos do servidor e que a Microsoft recomenda em vez dos rastreamentos do servidor que começam no SQL Server 2012.

  4. Você pode usar o modo de auditoria C2 .

Você pode usar o SQL Server Profiler para configurar seu rastreamento (escolha os eventos, filtros, etc. específicos que deseja) e, em seguida, faça um script usando o menu Arquivo e execute-o no servidor para criar um rastreamento do lado do servidor, conforme descrito aqui .

Nathan Jolly
fonte
5

Existem várias soluções e técnicas do SQL Server para rastrear instruções SELECT

  1. Procedimentos e funções armazenados especialmente desenvolvidos - Nota: esse método requer conhecimentos avançados de programação T-SQL e manutenção adicional dos procedimentos e funções armazenados (por exemplo, no caso de alteração do esquema do banco de dados). Você pode ver mais neste artigo: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html

  2. Tecnologia de rastreamento do SQL Server - você pode ler uma instrução passo a passo neste artigo: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

  3. Usando o recurso Auditoria do SQL Server - O recurso Auditoria (introduzido no SQL Server 2008) pode rastrear os eventos do servidor e do banco de dados e está usando a tecnologia Extended Events. Porém, a auditoria no nível do banco de dados é suportada apenas pelas edições SQL Server Developer e Enterprise.

  4. Usando ferramentas de terceiros, como ApexSQL Audit ou Idera SQL Compliance Manager

Jaycob Read
fonte
3

Por padrão, ele não registra instruções SELECT. Você pode consultar minha resposta aqui para obter mais detalhes para auditar as instruções SELECT.

Além disso, por padrão, ele nem registra instruções T-SQL; em vez disso, registra EVENTOS como Alteração de Memória do Servidor, Falha no Login de Auditoria, Evento de Addlogin de Auditoria, etc. e você pode encontrar mais informações aqui junto com os Scripts T-SQL para extrair informações de Rastreio padrão.

Kin Shah
fonte
3

Desde que você não se importe com quem executou as consultas, existem algumas maneiras de ver métricas sobre as consultas que estão sendo executadas no seu sistema. Isso é limitado aos dados desde a última reinicialização e, potencialmente, pela pressão do cache do plano (ou outra memória), dependendo de quanto mais você estender a 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%';

Você pode estender o padrão - por exemplo, isso ignora as consultas que começam com ;WITH, ironicamente, e pode capturar SELECT INTOe até atribuições de variáveis ​​que não fazem referência a tabelas reais.

No entanto, se você precisar de informações mais detalhadas, a resposta de Nathan é um bom começo (exceto se você usar o rastreamento, NÃO use o Profiler). Lembre-se de que o registro de todas as consultas no seu sistema não será gratuito.

Aaron Bertrand
fonte
Concordo com a declaração acima. Seria incrivelmente cauteloso ao monitorar todas as instruções selecionadas em seu banco de dados.
Zane
Eu tentei sua solução - é possível que isso ofereça apenas procedimentos, funções e gatilhos e nenhuma das instruções sql adhoc executadas?
Magier 19/05
@ Magier Não, sys.dm_exec_query_stats deve reportar apenas declarações de consulta (ad hoc ou de um módulo).
Aaron Bertrand