Estou implementando uma solução de data warehouse baseada em SSIS/CDC e tenho uma dúvida relacionada à integridade referencial no banco de dados de destino.
Como exemplo, tenho INVENTORY_TRANSACTION
em uma tabela e PART
em outra tabela cada uma com seu próprio pacote SSIS para cargas incrementais. Eu não quero ter uma situação em que eu tenha INVENTORY_TRANSACTIONS
no data warehouse que não tenha um PART
registro pai associado.
Já li bastante sobre o assunto, mas ainda não tenho certeza.
Devo usar a mesma capture_instance nas tabelas que têm dados relacionados para que todas tenham como alvo a mesma cadeia LSN? Devo usar o mesmo nome de Estado? Ou, estou perdendo algo completamente?
Dos documentos da Microsoft. Acho que eu só tinha que encontrar o documento certo ... https://learn.microsoft.com/en-us/sql/integration-services/data-flow/cdc-flow-components#grouping-tables-for-cdc- em processamento
Agrupando Tabelas para Processamento de CDC
Os projetos de banco de dados variam em tamanho de várias tabelas a muitos milhares de tabelas. Ao projetar pacotes de carregamento inicial e CDC, é benéfico agrupar tabelas em grupos muito menores para facilitar o gerenciamento e a eficiência. Esta seção lista várias considerações que afetam a classificação de tabelas em pequenos grupos, em que as tabelas em cada um são inicialmente carregadas e, em seguida, atualizadas como um grupo.
Os padrões CDC suportados pelos componentes CDC pressupõem que esse agrupamento já foi determinado. Cada grupo define um contexto CDC separado que é mantido separadamente de outros grupos. Para cada grupo, são criados pacotes de atualização de carregamento inicial e trickle-feed. As atualizações de alimentação gradual são agendadas para execuções periódicas com base na taxa de restrições de processamento de alterações (por exemplo, consumo de CPU e E/S, impacto em outros sistemas) e na latência desejada.
As tabelas são agrupadas com base nas seguintes considerações:
De acordo com o banco de dados de destino. Todas as tabelas que são gravadas em bancos de dados de destino diferentes ou que passam por processamento diferente devem ser atribuídas a grupos de CDC diferentes.
As tabelas relacionadas a restrições de integridade referencial devem ser atribuídas ao mesmo grupo para evitar problemas de integridade referencial no destino.
As tabelas para as quais a latência mais alta pode ser tolerada podem ser agrupadas para que possam ser processadas com menos frequência e reduzir a carga geral do sistema.
As tabelas para as quais há uma taxa de mudança mais alta devem estar em grupos menores, e as tabelas com uma taxa de mudança baixa podem ser agrupadas em grupos maiores.
Os dois pacotes a seguir são criados para cada grupo CDC:
Um pacote de Carregamento Inicial, que lê todo o intervalo de dados das tabelas de origem e o aplica às tabelas de destino.
Um pacote de atualização trickle-feed que lê as alterações feitas nas tabelas de origem e aplica as alterações nas tabelas de destino. Este pacote deve ser executado regularmente.
Estado do CDC
Cada grupo CDC tem um estado associado a ele, que é representado por uma string com um formato específico. Para obter mais informações, consulte Tarefa de controle do CDC. A tabela a seguir mostra os possíveis valores de estado do CDC.
StateDescription0-(INITIAL)O estado que existe antes de qualquer pacote ser executado no grupo CDC atual. Este também é o estado quando o estado do CDC está vazio.
Para obter mais informações sobre as operações da tarefa de controle do CDC, consulte Tarefa de controle do CDC.1-ILSTART (Initial-Load-Started)Este é o estado que existe quando o pacote de carregamento inicial é iniciado. Isso ocorre após a chamada MarkInitialLoadStartoperation para a tarefa de controle do CDC.
Para obter mais informações sobre as operações da tarefa de controle do CDC, consulte Tarefa de controle do CDC.2- ILEND (Initial-Load-Ended)Este é o estado que existe quando o pacote de carregamento inicial termina com êxito. Isso ocorre após a chamada de operação MarkInitialLoadEnd para a tarefa de controle do CDC.
Para obter mais informações sobre as operações da tarefa de controle do CDC, consulte Tarefa de controle do CDC.3-ILUPDATE (Atualização de carregamento inicial) Este é o estado que existe após a primeira execução do pacote de atualização após o carregamento inicial enquanto ainda processa o intervalo de processamento inicial. Isso ocorre após a chamada de operação GetProcessingRange para a tarefa de controle do CDC.
Se estiver usando a coluna _$reprocessing, ela será definida como 1 para indicar que o pacote pode estar reprocessando linhas já no destino.
Para obter mais informações sobre as operações da tarefa de controle do CDC, consulte Tarefa de controle do CDC.4-TFEND (Trickle-Feed-Update-Ended)Este é o estado esperado para execuções regulares do CDC. Indica que a execução anterior foi concluída com êxito e que uma nova execução com um novo intervalo de processamento pode ser iniciada.5-TFSTART (Trickle-Feed-Update-Started) Este é o estado que existe nas execuções subsequentes do pacote Update após a operação GetProcessingRange chamada para a tarefa de controle do CDC.
Isso indica que uma execução regular do CDC foi iniciada, mas não foi concluída ou ainda não foi concluída de forma limpa (MarkProcessedRange).
Para obter mais informações sobre as operações da tarefa de controle do CDC, consulte CDC Control Task.6-TFREDO (Reprocessing-Trickle-Feed-Updates) Este é o estado em um GetProcessingRange que ocorre após o TFSTART. Isso indica que a execução anterior não foi concluída com êxito.
Se estiver usando a coluna __$reprocessing, ela será definida como 1 para indicar que o pacote pode estar reprocessando linhas já no destino.7-ERRO O grupo CDC está em um estado ERROR.
Aqui está o diagrama de estado para os componentes do CDC. Um estado ERROR é alcançado quando um estado não esperado é alcançado. Os estados esperados são ilustrados no diagrama a seguir. No entanto, o diagrama não mostra o estado ERROR.
Por exemplo, no final de um pacote de carregamento inicial, ao tentar definir o estado como ILEND, se o estado for TFSTART, o grupo CDC estará em um estado de erro e o pacote Trickle-Feed Update não será executado (o pacote de carregamento inicial corre).
Uma vez que o pacote de Carregamento Inicial é executado com sucesso, o pacote Trickle-Feed Update é executado repetidamente em uma programação predeterminada para processar as alterações nas tabelas de origem. Cada execução do pacote Trickle-Feed Update é uma execução do CDC.