none
Visualizar Log de alterações em tabela SQL RRS feed

  • Pergunta

  • Bom dia,

    Sou novo em SQL server, estou usando o 2012 em um cliente e gostaria de saber o seguinte.

    Existe algum relatórios ou meio de extrair qual estação ou usuário do domínio fez a requisição, para alteração ou inclusão de registro em uma tabela?

    O banco é esta para modo de recuperação Cheio.

    Visualizar Log de alterações em tabela

    Desde já agradeço.


    • Editado leonardo_ck sábado, 13 de fevereiro de 2016 12:29
    sábado, 13 de fevereiro de 2016 12:28

Respostas

  • leonardo_ck,

    Não há nenhum recurso nativo do SQL Server que já venha configurado para você extrair estas informações.

    Você deve implementar a gravação deste histórico/auditoria por meio de uma trigger ou até mesmo do recurso CDC do SQL Server.

    Seguem abaixo alguns links para leitura inicial:

    https://msdn.microsoft.com/pt-br/library/ms189799(v=sql.120).aspx

    https://msdn.microsoft.com/pt-br/library/cc645937(v=sql.120).aspx


    Felipe Lauffer
    MCSA: SQL Server | MCP

    [ Blog ] - [ Profile ] - [ Wiki ] - [ Gallery ] - [ LinkedIn ]

    terça-feira, 16 de fevereiro de 2016 00:22
  • Leonardo,

    Um dos recursos de Tracking introduzidos no SQL Server a partir da versão 2008 é o Change Trancking, através dele é possível obter toda relação de manipulações e alterações sofridas por uma tabela, veja se o exemplo abaixo poderá te ajudar:

    CREATE DATABASE DB_test;
    GO
    
    ALTER DATABASE DB_test SET
    CHANGE_TRACKING = ON
     (AUTO_CLEANUP = ON,          -- automatic tracking table clean up process
      CHANGE_RETENTION = 1 HOURS  -- specify the time frame for which tracked information will be maintained -- 
    );
    GO
    
    --create test table
    USE DB_test;
    GO
    
    CREATE TABLE dbo.tb
    (id int
     CONSTRAINT PK_tb_id PRIMARY KEY,
     col1 int,
     col2 varchar(10),
     col3 nvarchar(max),
     col4 varbinary(max));
    GO
    
    ALTER TABLE dbo.tb
    ENABLE CHANGE_TRACKING
     WITH(TRACK_COLUMNS_UPDATED = ON  -- With this option, you can include columns also whose values were changed
     );
    GO
    
    SELECT CHANGE_TRACKING_CURRENT_VERSION() as Currentversion,
           CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID(N'dbo.tb')) as minvalidversion;
    GO
    
    -- testing
    
    -- a.insert data 
    INSERT dbo.tb(id, col1, col2, col3, col4)
    VALUES(1,1, 'AA', 'AAA', 0x1),
    	  (2,2, 'BB', 'BBB', 0x2),
          (3,3, 'CC', 'CCC', 0x2);
     
    SELECT CHANGE_TRACKING_CURRENT_VERSION() as Currentversion,
           CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID(N'dbo.tb')) as minvalidversion,
           *
    FROM CHANGETABLE(CHANGES dbo.tb, 0) CHG LEFT JOIN dbo.tb DATA
                                             ON DATA.id = CHG.id;
     
    -- b. update data 
    BEGIN TRAN;
    UPDATE dbo.tb SET
    col1 = 11
    WHERE id = 1;
     
    UPDATE dbo.tb SET
    col1 = 111
    WHERE id = 1;
    COMMIT TRAN;
     
    SELECT CHANGE_TRACKING_CURRENT_VERSION() as Currentversion,
           CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID(N'dbo.tb')) as minvalidversion,
           *
    FROM CHANGETABLE(CHANGES dbo.tb, 0) CHG LEFT JOIN dbo.tb DATA
                                             ON DATA.id = CHG.id;


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 18 de fevereiro de 2016 12:05
    Moderador

Todas as Respostas

  • Bom dia Leonardo,

    Voce pode utilizar uma Trigger ou também o CDC Change Data Capture, da uma lida sobre ele.

    Segue uma referencia.

    https://msdn.microsoft.com/pt-br/library/cc645937%28v=sql.120%29.aspx?f=255&MSPPError=-2147217396

    Att

    Reginaldo Silva

    segunda-feira, 15 de fevereiro de 2016 15:03
  • Leonardo,

    Nativamente não existe esse log, o que você pode fazer é criar uma DDL Trigger, para logar as alterações que vc tiver.

    Segue um documento que ensina como fazer.

    DDL Triggers


    Se a resposta foi útil por favor classifique. Tiago Neves - @tiagolneves - acesse o meu blog http://www.tiagoneves.net

    segunda-feira, 15 de fevereiro de 2016 18:13
  • leonardo_ck,

    Não há nenhum recurso nativo do SQL Server que já venha configurado para você extrair estas informações.

    Você deve implementar a gravação deste histórico/auditoria por meio de uma trigger ou até mesmo do recurso CDC do SQL Server.

    Seguem abaixo alguns links para leitura inicial:

    https://msdn.microsoft.com/pt-br/library/ms189799(v=sql.120).aspx

    https://msdn.microsoft.com/pt-br/library/cc645937(v=sql.120).aspx


    Felipe Lauffer
    MCSA: SQL Server | MCP

    [ Blog ] - [ Profile ] - [ Wiki ] - [ Gallery ] - [ LinkedIn ]

    terça-feira, 16 de fevereiro de 2016 00:22
  • Leonardo,

    Um dos recursos de Tracking introduzidos no SQL Server a partir da versão 2008 é o Change Trancking, através dele é possível obter toda relação de manipulações e alterações sofridas por uma tabela, veja se o exemplo abaixo poderá te ajudar:

    CREATE DATABASE DB_test;
    GO
    
    ALTER DATABASE DB_test SET
    CHANGE_TRACKING = ON
     (AUTO_CLEANUP = ON,          -- automatic tracking table clean up process
      CHANGE_RETENTION = 1 HOURS  -- specify the time frame for which tracked information will be maintained -- 
    );
    GO
    
    --create test table
    USE DB_test;
    GO
    
    CREATE TABLE dbo.tb
    (id int
     CONSTRAINT PK_tb_id PRIMARY KEY,
     col1 int,
     col2 varchar(10),
     col3 nvarchar(max),
     col4 varbinary(max));
    GO
    
    ALTER TABLE dbo.tb
    ENABLE CHANGE_TRACKING
     WITH(TRACK_COLUMNS_UPDATED = ON  -- With this option, you can include columns also whose values were changed
     );
    GO
    
    SELECT CHANGE_TRACKING_CURRENT_VERSION() as Currentversion,
           CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID(N'dbo.tb')) as minvalidversion;
    GO
    
    -- testing
    
    -- a.insert data 
    INSERT dbo.tb(id, col1, col2, col3, col4)
    VALUES(1,1, 'AA', 'AAA', 0x1),
    	  (2,2, 'BB', 'BBB', 0x2),
          (3,3, 'CC', 'CCC', 0x2);
     
    SELECT CHANGE_TRACKING_CURRENT_VERSION() as Currentversion,
           CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID(N'dbo.tb')) as minvalidversion,
           *
    FROM CHANGETABLE(CHANGES dbo.tb, 0) CHG LEFT JOIN dbo.tb DATA
                                             ON DATA.id = CHG.id;
     
    -- b. update data 
    BEGIN TRAN;
    UPDATE dbo.tb SET
    col1 = 11
    WHERE id = 1;
     
    UPDATE dbo.tb SET
    col1 = 111
    WHERE id = 1;
    COMMIT TRAN;
     
    SELECT CHANGE_TRACKING_CURRENT_VERSION() as Currentversion,
           CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID(N'dbo.tb')) as minvalidversion,
           *
    FROM CHANGETABLE(CHANGES dbo.tb, 0) CHG LEFT JOIN dbo.tb DATA
                                             ON DATA.id = CHG.id;


    Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 18 de fevereiro de 2016 12:05
    Moderador
  • Bom dia, Pessoal!

    Vou verificar cada informação passada aqui por vocês!

    Como se trata de um ambiente de teste, se eu conseguir atender a essas tratativas vou poder indicar ao cliente que use o SQL.

    Por enquanto ele permanece com o firebird.

    Depois coloco o resultado para vocês!

    segunda-feira, 29 de fevereiro de 2016 14:43