Posso ver consultas históricas executadas em um banco de dados do SQL Server?

38

Alguém estava executando uma consulta em nosso banco de dados SQL Server remotamente e seu sistema travou.

Eles não têm backup dessa consulta e desejam ver o que foi executado no servidor.

É possível encontrar esta consulta em um log ou em um histórico em algum lugar?

user87094
fonte
Não está em um log. Entrou em um sistema de controle de versão TFS ou SourceSafe? Resultado definido como um txt para que possa ser recriado?
Jl01 22/07
2
Para um design futuro, você pode considerar adicionar gatilhos e tabelas de auditoria / histórico. Em seguida, seria capaz de utilizar o último horário / usuário atualizado.
22411 Thomas Thomas Stringer

Respostas:

40

Grant Fritchey semelhante teve o problema em que ele fechou o SSMS e perdeu a consulta em que estava trabalhando ... escreveu sobre o blog por aqui: Oh **********!

EDITAR

Para tornar isso um pouco mais detalhado de uma resposta, o Grant acima mencionado fornece uma consulta para simplesmente acessar o cache da instância e retirar a consulta que você acabou de executar (ou pelo menos tentar):

SELECT  dest.text
FROM    sys.dm_exec_query_stats AS deqs
        CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
WHERE   deqs.last_execution_time > '5/19/2011 11:00'
        AND dest.text LIKE 'WITH%';

Mais algumas opções que foram observadas nos comentários do blog de Grant:

Shawn Melton
fonte
11
Esse é um bom artigo! Obrigado! E, seguindo o artigo de Grant, Recuperar arquivos de consulta de backup no SQL Server Management Studio pode ser útil.
Marian
Essa resposta poderia ser importada se declarasse em quais versões do sqlserver ele funciona. Eu recebo este erro quando tento executá-lo: Sintaxe incorreta perto de '.'. em 2008.
Michael Potter
Pode ser importado? @MichaelPotter Copiar e colar entre o navegador e outras ferramentas geralmente altera aspas e outros textos. Não tenho controle sobre essa parte.
Shawn Melton
Desculpe, por favor, corrija a minha pergunta ... s / importadas / melhorado /
Michael Potter
16

2005+, rastreio padrão para o resgate.

O rastreamento padrão passa para 20mb, mas o SQL mantém o histórico de 5 rastreamentos. Com acesso ao servidor, você pode recuperar os arquivos * .trc do diretório MSSQL \ Log. Se você não puder acessar o servidor, o seguinte fornecerá o nome do arquivo de rastreamento padrão atual:

SELECT * FROM ::fn_trace_getinfo(default) 

Se o arquivo atual for, por exemplo, E: \ MSSQL.1 \ MSSQL \ LOG \ log_200.trc, os arquivos anteriores deverão ser log_199.trc, log_198.trc etc. Obtenha o conteúdo do rastreamento com:

SELECT * FROM fn_trace_gettable('E:\MSSQL.1\MSSQL\LOG\log_199.trc', default)
Mark Storey-Smith
fonte
13

Você pode recuperar informações de planos de consulta em cache, verificar BOL para obter informações sobre sys.dm_exec_query_stats ou executá-lo no estúdio de gerenciamento conectado ao mesmo banco de dados:

SELECT  d.plan_handle ,
        d.sql_handle ,
        e.text

FROM    sys.dm_exec_query_stats d
        CROSS APPLY sys.dm_exec_sql_text(d.plan_handle) AS e

Filtre a saída com

WHERE text like '%something%'

para restringir os resultados.

SqlACID
fonte
9

Se o banco de dados estava no modo de recuperação total, pode haver uma chance de recuperar alguns dados e obter informações sobre o que foi feito lendo o log de transações.

Infelizmente, isso não é suportado por padrão, mas existem maneiras de fazer isso.

Você pode tentar usar ferramentas de terceiros, como ApexSQL Log ou SQL Log Rescue (gratuito, mas apenas para o SQL 2000).

Outra opção é tentar usar as funções não documentadas DBCC LOG ou fn_dblog. Isso é mais complexo, mas é gratuito.

Stanley Norman
fonte
0

Se o seu banco de dados estiver definido para o modelo de recuperação completa, você poderá investigar os backups do log de transações. Veja fn_dump_dblogpara mais informações.

Matthias Elflein
fonte
0

O ApexSQL possui a funcionalidade 'Consultas executadas', que permite pesquisar e filtrar por data.

Não tenho certeza se ele extrai o histórico do cache do SSMS ou realmente o acompanha sozinho. Você pode tentar instalá-lo e esperar o melhor.

bvh9000
fonte
Isso é apenas para itens executados diretamente nas janelas de consulta e você deve ativar o salvamento.
Chris Bordeman 27/09