AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 195534
Accepted
Shooter McGavin
Shooter McGavin
Asked: 2018-01-17 16:20:53 +0800 CST2018-01-17 16:20:53 +0800 CST 2018-01-17 16:20:53 +0800 CST

Instância ou estado de captura do CDC para garantir a integridade referencial

  • 772

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_TRANSACTIONem uma tabela e PARTem 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_TRANSACTIONSno data warehouse que não tenha um PARTregistro 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?

sql-server sql-server-2012
  • 1 1 respostas
  • 563 Views

1 respostas

  • Voted
  1. Best Answer
    Shooter McGavin
    2018-01-17T18:45:30+08:002018-01-17T18:45:30+08:00

    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.

    • 0

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve