Usuário com melhor resposta
Encontrando ultima tabela com insert de registros

Pergunta
-
Boa tarde;
Gostaria de saber se existe algum recurso onde posso verificar qual a ultima tabela que foi modificada no SQL Server;
Vou explicar minha necessidade;
Temos um sistema e necessito realizar atualizações em campos; porem esta ação (por dentro do sistema) é muito demora; então gostaria executar esta ação direto no banco, mas não sei onde esses registros são inseridos(tabela).
Respostas
-
Humm, que eu saiba o SQL Server não guarda este tipo de informação, pois é irrelevante para ele (Storage Engine).
Pode ser possível com auditoria, dê uma lida no link:
https://solutioncenter.apexsql.com/how-to-setup-and-use-sql-server-audit-feature/
Inclusive existem funções para ler arquivos e logs de auditoria.
Outra maneira mais desumana seria ler o conteúdo do transaction log com a função sys.fn_dblog, mas mesmo assim teria que implementar uma outra função para entender qual(is) coluna foi alterada na linha, pois isto não é logado explicitamente (tenho o código pronto em C# de uma ferramenta que estou desenvolvendo, mas escrever em T-SQL levaria mais tempo e poderia envolver gambiarras).
Se preferir explique detalhadamente o que deseja, quem sabe possamos sugerir algo mais viável.
- Editado André Renato Furtado quinta-feira, 15 de junho de 2017 05:11
- Marcado como Resposta Guilherme Macedo S segunda-feira, 19 de junho de 2017 17:49
Todas as Respostas
-
SELECT TOP 1 OBJECT_NAME(object_id) AS Table_Name, last_user_update AS last_update FROM sys.dm_db_index_usage_stats WHERE database_id = DB_ID('meuDB') ORDER BY last_user_update DESC
- Editado André Renato Furtado sábado, 10 de junho de 2017 01:29
- Sugerido como Resposta Junior Galvão - MVPMVP terça-feira, 13 de junho de 2017 23:33
-
Temos um sistema e necessito realizar atualizações em campos; porem esta ação (por dentro do sistema) é muito demora; então gostaria executar esta ação direto no banco, mas não sei onde esses registros são inseridos(tabela).
Wellington, cuidado com "executar esta ação direto no banco", pois pode acarretar em inconsistência nos dados. Se as regras do negócio estão no aplicativo e não no banco de dados, e se você não tiver conhecimento da estrutura do banco de dados, então a chance do banco de dados se tornar inconsistente é elevada.
Se a ação "por dentro do sistema" está demorada, e isto não ocorria antes, talvez seja o caso de analisar se não há algum problema nas tabelas (fragmentação, estatísticas desatualizadas etc). Sugiro que contacte o DBA responsável pelo banco de dados.
José Diz Belo Horizonte, MG - Brasil
Wellington,
Concordo com a análise do José Diz, isso pode ser um indicador da ausência de índices, ou até mesmo, do risco de um possível bloqueio de dados estar ocorrendo.
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
-
José,
Obrigado pela sugestão..
Não sei se fui claro em meu problema.. Na verdade quando digo que a ação é "demorada" não tem relação com o processamento do sistema e sim no fato que vou ter de executar uma ação (repetitiva) de correção de permissões manualmente (dento do sistema), pasta a pasta. Minha intenção é tentar entender como o sistema insere informações no banco para tentar agilizar este processo.
Caso eu consiga entender esse processo pretendo criar um ambiente separado para homologar.
-
-
Humm, que eu saiba o SQL Server não guarda este tipo de informação, pois é irrelevante para ele (Storage Engine).
Pode ser possível com auditoria, dê uma lida no link:
https://solutioncenter.apexsql.com/how-to-setup-and-use-sql-server-audit-feature/
Inclusive existem funções para ler arquivos e logs de auditoria.
Outra maneira mais desumana seria ler o conteúdo do transaction log com a função sys.fn_dblog, mas mesmo assim teria que implementar uma outra função para entender qual(is) coluna foi alterada na linha, pois isto não é logado explicitamente (tenho o código pronto em C# de uma ferramenta que estou desenvolvendo, mas escrever em T-SQL levaria mais tempo e poderia envolver gambiarras).
Se preferir explique detalhadamente o que deseja, quem sabe possamos sugerir algo mais viável.
- Editado André Renato Furtado quinta-feira, 15 de junho de 2017 05:11
- Marcado como Resposta Guilherme Macedo S segunda-feira, 19 de junho de 2017 17:49
-
Bom dia
Por falta de retorno esta thread esta encerrada !
Por gentileza, caso necessário abra uma nova thread.
Atenciosamente,
Guilherme Macedo S
Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita
TechNet Community Support
Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.