Usando o Sql Server Change Data Capture com um esquema que muda frequentemente


10

Estamos pensando em habilitar o Sql Server Change Data Capture para um novo subsistema que estamos construindo.

Não é exatamente porque precisamos, mas estamos sendo pressionados por ter uma rastreabilidade completa do histórico, e o CDC resolveria esse requisito com o mínimo esforço possível de nossas peças.

Estamos seguindo um processo de desenvolvimento ágil, que neste caso significa que frequentemente fazemos alterações no esquema do banco de dados, por exemplo, adicionando novas colunas, movendo dados para outras colunas etc.

Fizemos um pequeno teste em que criamos uma tabela, ativamos o CDC para essa tabela e adicionamos uma nova coluna à tabela. As alterações na nova coluna não estão registradas na tabela CDC.

Existe um mecanismo para atualizar a tabela CDC para o novo esquema e existem práticas recomendadas para lidar com os dados capturados ao migrar o esquema do banco de dados?


Você pode obter uma resposta melhor / mais rápida se postou esta pergunta em dba.stackexchange.com
TimG:

2
@TimG A multipostagem de uma pergunta é desencorajada, a migração seria uma opção - mas tem uma recompensa e não pode ser migrada enquanto a recompensa estiver ativa. Dito isto, a pergunta e sua recompensa foram mencionadas na sala de bate-papo do dba.SE e chamaram a atenção.

Respostas:


5

Também recentemente começamos a analisar o CDC. Não sou especialista no assunto, mas acho que tenho algumas respostas para suas perguntas.

Na maioria das vezes, o CDC o ajudará a atingir seu objetivo de uma história completamente rastreável, mas não acho que isso o levará até lá.

Primeiramente:

freqüentemente fazemos alterações no esquema do banco de dados ... Existe um mecanismo para atualizar a tabela CDC para o novo esquema

E é aqui que acho que o CDC falhará com você. A documentação do MSDN na seção "Noções básicas sobre a sobrecarga do acompanhamento de alterações" é bastante clara: ela não acompanhará as alterações de esquema para você. Por exemplo, com Alter Table Add Column:

Se uma nova coluna for adicionada à tabela rastreada por alterações, a adição da coluna não será rastreada. Somente as atualizações e alterações feitas na nova coluna são rastreadas.

Drop Column é um pouco mais complexo.

No entanto, você deve usar scripts de banco de dados para alterar seu esquema, para não precisar necessariamente confiar no CDC aqui. Isso permite que você tenha consistência entre seus esquemas de controle de qualidade e produção. E a alteração no controle de qualidade deve ser realizada por script, para que as mesmas alterações exatas possam ser aplicadas ao Prod. Não deve ser muito difícil extrair as alterações de esquema desses scripts. Isso pode significar que a dimensão "tempo" do seu histórico seja direcionada pela versão, e não pelo tempo real, mas o resultado final será o mesmo.

Se você ainda não possui uma, crie uma tabela para rastrear a versão do seu esquema de banco de dados. Em seguida, coloque a tabela de versão do esquema do banco de dados no CDC para poder alinhar as alterações macroscópicas ao esquema contra as alterações microscópicas em uma tabela específica.

Para meu entendimento, você ainda deve ver os dados adicionados à (s) nova (s) coluna (s), independentemente do CDC não mostrar a alteração do esquema. E a migração de dados de tabela para tabela também deve ser escolhida pelo CDC.

existem práticas recomendadas para lidar com os dados capturados ao migrar o esquema do banco de dados?

Trate-o como você trataria uma auditoria. Você precisa entender o que está examinando, por que está examinando e por quanto tempo precisa manter essas informações por perto. Escopo e retenção são os dois maiores erros quando se trata de uma tarefa como esta.

As ferramentas de relatório do CDC são compreensivelmente austeras, então você precisa conhecer o contexto das mudanças. É muito fácil dizer "acompanhar tudo !" e acabe com nada que seja utilizável como resultado. Da mesma forma, você pode dobrar o tamanho do seu banco de dados mantendo uma cópia de cada alteração. Em uma tabela de alta rotatividade com muitas inserções e exclusões, você terá um crescimento astronômico. Isso não é ruim por si só, mas você precisa fazer um orçamento para esse crescimento e ter um meio de examinar todos os dados gerados.

Portanto, você volta a entender por que está sendo pressionado a ter rastreabilidade completa. Certamente existem razões válidas para esse requisito. Mas você não poderá estruturar sua auditoria eficaz do banco de dados até saber por que deve atender a esse requisito.


1

Você pode acompanhar a adição de colunas com gatilhos DDL.

CREATE TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH <ddl_trigger_option> [ ,...n ] ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS { sql_statement [ ; ] [ ,...n ] |
EXTERNAL NAME < method specifier > [ ; ] }

Você pode usar o grupo de eventos DDL_TABLE_EVENTS para disparar para CREATE, DROP ou ALTER de uma tabela.

No entanto, você pode dar uma olhada no SQL Server Audit , se estiver usando a empresa> 2008, pois ele "combina todos os recursos de auditoria em uma especificação de auditoria". Este link msdn possui um artigo detalhado sobre o assunto: http://msdn.microsoft.com/en-us/library/dd392015(v=sql.100).aspx .

CREATE SERVER AUDIT audit_name
TO { [ FILE (<file_options> [, ...n]) ] |
APPLICATION_LOG | SECURITY_LOG }
[ WITH ( <audit_options> [, ...n] ) ] }[ ; ]

<file_options>::=
{FILEPATH = 'os_file_path'
[, MAXSIZE = { max_size { MB | GB | TB } | UNLIMITED } ]
[, MAX_ROLLOVER_FILES = integer ]
[, RESERVE_DISK_SPACE = { ON | OFF } ] }

<audit_options>::=
{ [ QUEUE_DELAY = integer ]
[, ON_FAILURE = { CONTINUE | SHUTDOWN } ]
[, AUDIT_GUID = uniqueidentifier ]}

Em seguida, você cria especificações de servidor ou banco de dados.


0

O Simple-Talk tem um ótimo artigo sobre captura de dados alterados e um guia completo do CDC, além da documentação do MSDN , explica os vários métodos, dependendo dos requisitos. Mas ambos podem ajudá-lo com seus requisitos específicos.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.