none
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).


    sexta-feira, 9 de junho de 2017 18:02

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.


    quinta-feira, 15 de junho de 2017 05:07

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


    sábado, 10 de junho de 2017 01:28
  • 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 estiverem 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.


    e-mail       José Diz     Belo Horizonte, MG - Brasil


    • Editado José Diz quinta-feira, 15 de junho de 2017 13:45
    terça-feira, 13 de junho de 2017 11:55
  • 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.


    e-mail       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]

    terça-feira, 13 de junho de 2017 23:34
  • 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. 

    quarta-feira, 14 de junho de 2017 11:53
  • Obrigado.

    Consigo pegar esta informação por tabela\coluna?

    quarta-feira, 14 de junho de 2017 11:55
  • 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.


    quinta-feira, 15 de junho de 2017 05:07
  • 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.

    segunda-feira, 19 de junho de 2017 17:49
    Moderador