none
Como ativar CCD no sql server ? (acho que é esse o nome - expliquei na pergunta) RRS feed

  • Pergunta

  • Senhores, 

    Não sei se esse é o termo certo - CCD.

    Vi em um banco, as tabelas estavam todas duplicadas onde que a segunda tabela acho que tinha essa extensão, ccd. Nessa segunda tabela ficava como se fosse o logue de todas as alterações dos dados da tabela.

    Alguém sabe o nome correto desse recurso para poder pesquisar documentação? Ou sabe orientar como ativar no banco ?

    Obrigado antecipadamente,

    Daniel

    quinta-feira, 18 de junho de 2020 17:14

Todas as Respostas

  • Daniel,

    Eu conheço esta definição CCD no DB2, no SQL Server particularmente eu nunca vi!!! Eu acredito que você esta se referindo ao CDC Change Data Capture.

    Não seria isso?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quinta-feira, 18 de junho de 2020 22:33
    Moderador
  • Acho que é isso mesmo o nome correto, CDC Change Data Capture, vou pesquisar por esse nome!
    sexta-feira, 19 de junho de 2020 00:24
  • Daniel,

    Certo!!! Veja se o exemplo abaixo pode te ajudar:

    -- Habilitando o CDC para o Banco de Dados --
    Use SQLMagazine
    Go
    
    Exec sys.sp_cdc_enable_db
    Go
    
    -- Desabilitando o CDC para o Banco de Dados --
    Use SQLMagazine
    Go
    
    Exec sys.sp_cdc_disable_db
    Go
    
    -- Criando a Tabela de Exemplo --
    Create Table Produtos
     (Codigo Int Identity(1,1),
       Descricao VarChar(20))
    Go
    
    -- Adicionando a Chave Primaria --
    Alter Table Produtos
        Add Constraint [PK_Codigo_Produtos] Primary Key (Codigo)
    Go
    
    -- Inserindo a Massa de Registros para Teste --   
    Declare @ContadorRegistros Int
    Set @ContadorRegistros=1
    
    While @ContadorRegistros <=1000
     Begin
     
      If @ContadorRegistros =1
       Insert Into Produtos Values ('Produto Nº: 1')
      Else
       Insert Into Produtos Values ('Produto Nº: '+Convert(VarChar(4),@@Identity+1))
       
       Set @ContadorRegistros += 1;
     End
     
    -- Visualizando os Dados --   
    Select * from Produtos
          
    -- Habilitando o Change Data Capture para trabalhar sobre a table Produtos --
    EXECUTE sys.sp_cdc_enable_table
        @source_schema = N'dbo',
        @source_name = N'Produtos',
        @role_name = N'cdc_Admin';
    GO
    
    -- Retornando todas as linhas capturadas pelo CDC --
    DECLARE @from_lsn binary(10), 
                      @to_lsn binary(10)
    
    SET @from_lsn = sys.fn_cdc_get_min_lsn('dbo_Produtos')
    SET @to_lsn   = sys.fn_cdc_get_max_lsn()
    
    SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_Produtos
      (@from_lsn, @to_lsn, N'all')
    Go
    
    -- Inserindo novos dados --
    Insert Into Produtos Values ('Produto Nº: '+Convert(VarChar(4),@@Identity+1))
    Go
    
    -- Atualizando dados já existentes --
    Update Produtos
    Set Descricao= Descricao+' - Upd'
    Where Codigo Between 11 And 21
    Go
    
    -- Retornando todas as linhas capturadas pelo CDC com Net Changes--
    DECLARE @from_lsn binary(10), 
                      @to_lsn binary(20)
    
    SET @from_lsn = sys.fn_cdc_get_min_lsn('dbo_Produtos')
    SET @to_lsn   = sys.fn_cdc_get_max_lsn()
    
    SELECT * FROM cdc.fn_cdc_get_net_changes_dbo_Produtos
                                  (@from_lsn, @to_lsn, N'all')
    GO
    
    -- Retornando as colunas utilizadas pelo CDC para Captura --
    Execute sys.sp_cdc_get_captured_columns 
                             @capture_instance = N'dbo_Produtos';
    Go
    
    -- Retornando informações de configuração da captura de dados de alteração de uma tabela específica --
    Execute sys.sp_cdc_help_change_data_capture 
                              @source_schema = N'dbo', 
                              @source_name = N'Produtos';
    Go
    
    -- Retornando informações de configuração da captura de dados de alteração de todas as tabelas --
    EXECUTE sys.sp_cdc_help_change_data_capture;

    Tem um artigo que eu publiquei a alguns anos atrás na Revista SQL Magazine!!!


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    sexta-feira, 19 de junho de 2020 00:33
    Moderador
  • Boa tarde!

    Estou fazendo aqui, e pelo que vi habilitei o CDC.

    Observei na prática que as tabelas "clones ou de logs" conforme havia visto em outro banco com esse recurso online não apareceram.

    Temos que criar manualmente as tabelas, isso ?

    Grato,

    Daniel


    sexta-feira, 19 de junho de 2020 15:21
  • Daniel,

    Em relação a sua pergunta: "Temos que criar manualmente as tabelas, isso ?" 

    Na verdade a partir do momento em que você realiza a criação das suas tabelas, ativa do CDC, especificando quais tabelas serão utilizadas por ele, de forma automática o SQL Server vai tar início ao processo de controle de tudo que esta sendo manipulado por esta tabelas.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]


    sexta-feira, 19 de junho de 2020 17:20
    Moderador
  • Ok, obrigado.

    Falta alguma coisa para eu fazer ainda, vou revisar com calma e ver o que mais tenho fazer.

    Só ativei usando a procedure:

    Exec sys.sp_cdc_enable_db

    sexta-feira, 19 de junho de 2020 19:47
  • Ok, obrigado.

    Falta alguma coisa para eu fazer ainda, vou revisar com calma e ver o que mais tenho fazer.

    Só ativei usando a procedure:

    Exec sys.sp_cdc_enable_db

    Daniel,

    Ok, ficamos no aguardo.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    domingo, 21 de junho de 2020 16:07
    Moderador
  • Boa tarde!

    Retornei a questão do CDC, que é muito importante no banco.

    1 - habilitei no banco usando:

    Exec sys.sp_cdc_enable_db

    1.1 - após o comando:

    2 - tentei habilitar em uma tabela usando:

    use teste_cdc
    EXECUTE sys.sp_cdc_enable_table    
    @source_schema = "dbo",    
    @source_name = "nomes",    
    @role_name = "cdc";GO


    3 - gerou erros

    Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
    
    Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
    
    Msg 22832, Nível 16, Estado 1, Procedimento sp_cdc_enable_table_internal, Linha 623 [Linha de Início do Lote 0]
    
    Could not update the metadata that indicates table [dbo].[nomes] is enabled for Change Data Capture. The failure occurred when executing the command '[sys].[sp_cdc_add_job] @job_type = N'capture''. The error returned was 22836: 'Could not update the metadata for database teste_cdc to indicate that a Change Data Capture job has been added. The failure occurred when executing the command 'sp_add_jobstep_internal'. The error returned was 14234: 'The specified '@server' is invalid (valid values are returned by sp_helpserver).'. Use the action and error to determine the cause of the failure and resubmit the request.'. Use the action and error to determine the cause of the failure and resubmit the request.

    Em teoria, teria que ter dado certo, o que estou deixando passar?

    terça-feira, 10 de novembro de 2020 16:09
  • Daniel,

    Pela mensagem de erro ou warning, você esta tentando alterar permissões para server principals e database principals, os quais não temos a capacidade de realizar este tipo de alteração.

    Agora faça um teste, coloque o comando GO na linha debaixo removendo o ponto-e-vírgula.

    se teste_cdc
    EXECUTE sys.sp_cdc_enable_table    
    @source_schema = "dbo",    
    @source_name = "nomes",    
    @role_name = "cdc"
    GO


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | MTAC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 10 de novembro de 2020 21:56
    Moderador