Exibindo resultados de consulta anteriores do SQL Server Management Studio

1

Eu deixei meu computador na noite passada executando uma exclusão de lote no Editor de Consultas do Sql Server Management Studio. Eu estava executando isso para testar a velocidade da exclusão em um banco de dados grande antes de usarmos o script em nosso banco de dados ativo. Durante a noite meu computador reiniciou para uma atualização. Eu estou querendo saber se há alguma maneira de ver um log das declarações anteriores executadas e ver o tempo que levou para executar. Estava apagando do SQL Server 2000. Obrigado!

    
por user27240 10.12.2009 / 14:21

2 respostas

2

A única maneira de fazer isso é configurando alguma forma de processo de monitoramento antes (e durante) da operação. Por exemplo. a ferramenta Profiler permite que você registre a duração (e quaisquer declarações, mas não os resultados) de qualquer lote, ou pode emitir um SELECT ou PRINT mostrando os resultados de getdate() antes e depois da instrução .

Com operações de modificação como DELETE , haverá um registro no log de transações (supondo que ele não tenha sido truncado desde então, com um backup de log ou um ponto de verificação no modo de recuperação simples), mas meros mortais não podem inspecione o log de transações com ferramentas internas. No entanto, os inspetores de log de terceiros estão disponíveis, mas o log de transações mostra a hora em que uma operação ocorreu, ela não contém informações sobre sua duração:)

Eu percebo que isso está fechando o portão depois que o cavalo é aparafusado, mas não há nenhum registro embutido de coisas como essa que sobreviverão a uma reinicialização, desculpe!

    
por 10.12.2009 / 15:06
2

Talvez meros mortais não possam ver os arquivos de log, mas um DBA pode coletar todos os tipos de informações. Aqui estão algumas perguntas para você começar.

-- Run this query to get the transaction ID
USE YourDatabase
GO
SELECT 
    [Transaction ID],
    Operation,
    Context,
    AllocUnitName    
FROM 
    fn_dblog(NULL, NULL) 
WHERE 
    Operation = 'LOP_DELETE_ROWS'
    and AllocUnitName like '%YourTableName%'
ORDER by [transaction ID] desc

-- Run this query to find the transaction SID
SELECT
    Operation,
    [Transaction ID],
    [Begin Time],
    [End Time],
    [Transaction Name],
    [Transaction SID]
FROM
    fn_dblog(NULL, NULL)
WHERE
    [Transaction ID] = 'TransactionID from above'

-- or use below to search using time instead of transaction ID

    [Begin Time] between 'starttime' and 'endtime'
AND
    [Operation] = 'LOP_BEGIN_XACT'

-- Run this to determine who ran the delete
USE MASTER
GO   
SELECT SUSER_SNAME([Transaction SID from above])
    
por 09.06.2016 / 16:13