Tarefa Controle de CDC

Aplica-se a:SQL Server SSIS Integration Runtime no Azure Data Factory

Importante

Os componentes de fluxo do CDC, incluindo a tarefa de controle de CDC, a fonte de CDC e o divisor de CDC, estão obsoletos. Para obter detalhes, consulte o comunicado.

A tarefa Controle de CDC é usada para controlar o ciclo de vida de pacotes de captura de dados de alterações (CDC). Ela trata a sincronização de pacotes CDC com o pacote de carga inicial e o gerenciamento de intervalos de LSN (número de sequência de log) processados na execução de um pacote CDC. Além disso, a tarefa Controle de CDC lida com cenários de erro e recuperação.

A tarefa Controle de CDC mantém o estado do pacote CDC em uma variável de pacote SSIS e também pode persisti-lo em uma tabela de banco de dados para que o estado seja mantido nas ativações de pacote e entre vários pacotes que juntos executam um processo CDC comum (por exemplo, uma tarefa pode ser responsável pelo carregamento inicial e a outra pelas atualizações trickle-feed).

A tarefa Controle de CDC oferece suporte a dois grupos de operações. Um grupo trata a sincronização de carga inicial e processamento de alteração e o outro gerencia o intervalo do processamento de alteração de LSNs para uma execução de um pacote CDC e acompanha o que foi processada com êxito.

As operações seguintes tratam a sincronização da carga inicial e o processamento de alteração:

Operação Descrição
ResetCdcState Esta operação é usada para reiniciar o estado de CDC persistente associado ao contexto de CDC atual. Depois que esta operação é executada, o LSN máximo atual da tabela sys.fn_cdc_get_max_lsn do carimbo de data/hora de LSN torna-se o início do intervalo para o próximo intervalo de processamento. Esta operação exige uma conexão com o banco de dados de origem.
MarkInitialLoadStart Esta operação é usada no começo de um pacote da carga inicial para registrar o LSN atual no banco de dados de origem antes de o pacote da carga inicial começar a ler as tabelas de origem. Isso exige uma conexão com o banco de dados de origem para chamar sys.fn_cdc_get_max_lsn.

Se você selecionar MarkInitialLoadStart ao trabalhar no SQL Server CDC (ou seja, não no Oracle), o usuário especificado no gerenciador de conexões deverá ser db_owner ou sysadmin.
MarkInitialLoadEnd A operação é usada no início de um pacote da carga inicial para registrar o LSN atual no banco de dados de origem depois de o pacote da carga inicial terminar de ler as tabelas de origem. Este LSN é determinado pela gravação da hora atual quando esta operação ocorreu e, em seguida, consultando a tabela de mapeamento cdc.lsn_time_no banco de dados CDC, procurando uma alteração que ocorreu depois daquele momento

Se você selecionar MarkInitialLoadEnd ao trabalhar no SQL Server CDC (ou seja, não no Oracle), o usuário especificado no gerenciador de conexões deverá ser db_owner ou sysadmin.
MarkCdcStart Esta operação é usada quando a carga inicial é feita de um banco de dados de instantâneo. Nesse caso, o processamento de alteração deve ser iniciado imediatamente depois do LSN do instantâneo. Você pode especificar o nome do banco de dados de instantâneo a ser usado e a tarefa Controle de CDC consulta o SQL Server para obter o LSN de instantâneo. Você também tem a opção de especificar diretamente o LSN de instantâneo.

Se você selecionar MarkCdcStart ao trabalhar no SQL Server CDC (ou seja, não no Oracle), o usuário especificado no gerenciador de conexões deverá ser db_owner ou sysadmin.

As operações seguintes são usadas para gerenciar o intervalo de processamento:

Operação Descrição
GetProcessingRange Esta operação é usada antes da chamada ao fluxo de dados que usa o fluxo de dados de Origem CDC. Ele estabelece um intervalo de LSNs que o fluxo de dados de origem de CDC lê quando é invocado. O intervalo é armazenado em uma variável de pacote SSIS que é usada pela Origem de CDC durante o processamento de fluxo de dados.

Para obter mais informações sobre os armazenados, consulte Definir uma variável de estado.
MarkProcessedRange : Esta operação é executada depois de cada execução de CDC (depois que o fluxo de dados de CDC é concluído com êxito) para registrar o último LSN que foi processado completamente na execução de CDC. Da próxima vez que o GetProcessingRange for executado, essa posição será o início do intervalo de processamento.

Lidando com a persistência de estado CDC

A tarefa Controle de CDC mantém um estado persistente entre ativações. As informações armazenadas no estado CDC são usadas para determinar e manter o intervalo de processamento do pacote CDC e para detectar condições de erro. O estado persistente é armazenado como uma cadeia de caracteres. Para obter mais informações, consulte Definir uma variável de estado.

A tarefa Controle de CDC oferece suporte a dois tipos de persistência de estado

  • Persistência de Estado Manual: nesse caso, a tarefa Controle de CDC gerencia o estado armazenado em uma variável de pacote, mas o desenvolvedor do pacote deve ler a variável de um repositório persistente antes de chamar o Controle de CDC e depois gravá-lo nesse repositório persistente após o Controle de CDC ser chamado pela última vez e a execução do CDC for concluída.

  • Persistência de Estado Automática: o estado CDC é armazenado em uma tabela em um banco de dados. O estado é armazenado com um nome fornecido na propriedade StateName em uma tabela nomeada na propriedade Tabela a Ser Usada para Armazenar o Estado , localizada em um gerenciador de conexões selecionado para armazenar o estado. O padrão é o gerenciador de conexões de origem, mas a prática comum é usar o gerenciador de conexões de destino. A tarefa Controle de CDC atualiza o valor do estado na tabela de estado e isso é confirmado como parte da transação de ambiente.

Tratamento de erros

A tarefa Controle de CDC pode relatar um erro quando:

  • Não lê o estado persistente do CDC ou ao quando a atualização do estado persistente falha.

  • Não lê as informações de LSN atuais do banco de dados de origem.

  • O estado CDC lido não é consistente.

Em todos esses casos, a tarefa Controle de CDC relata um erro que pode ser tratado do modo padrão como o SSIS trata erros de fluxo de controle.

A tarefa Controle de CDC também pode relatar um aviso quando a operação Obter Intervalo de Processamento é chamada diretamente depois de outra operação do mesmo tipo sem que Marcar Intervalo Processado seja chamada. Essa é uma indicação de que a execução anterior falhou ou que outro pacote CDC pode estar sendo executado com o mesmo nome do estado CDC.

Configurando a tarefa Controle de CDC

Você pode definir as propriedades por meio do Designer SSIS ou programaticamente.

Nesta seção

Definir uma variável de estado

CDC Control Task Editor

Use a caixa de diálogo Editor da tarefa Controle CDC para configurar a tarefa Controle CDC. A configuração da tarefa Controle CDC inclui definir uma conexão para o banco de dados CDC, a operação de tarefa CDC e as informações de gerenciamento de estado.

Para obter mais informações sobre a tarefa Controle CDC, consulte CDC Control Task.

Para abrir o Editor da tarefa Controle CDC

  1. No SQL Server Data Tools, abra o pacote SQL Server 2019 Integration Services (SSIS) que tem a origem CDC.

  2. Na guia Fluxo de Controle , clique duas vezes na tarefa Controle CDC.

Opções

Gerenciador de conexões ADO.NET do banco de dados SQL Server CDC
Selecione na lista um gerenciador de conexões existente ou clique em Novo para criar uma nova conexão. A conexão deve ser a um banco de dados do SQL Server que está habilitado para CDC e onde a tabela de alteração selecionada está localizada.

Operação de Controle CDC
Selecione a operação a ser executada para esta tarefa. Todas as operações usam a variável de estado que está armazenada em uma variável de pacote SSIS que armazena o estado e passa isto entre os diferentes componentes no pacote.

  • Marcar início da carga inicial: esta operação é usada ao executar uma carga inicial de um banco de dados ativo sem um instantâneo. Ela é invocada no começo de um pacote da carga inicial para registrar o LSN atual no banco de dados de origem antes de o pacote da carga inicial começar a ler as tabelas de origem. Isto exige uma conexão com o banco de dados de origem.

    Se você selecionar Marcar Início da Carga Inicial ao trabalhar no SQL Server CDC (ou seja, não Oracle), o usuário especificado no gerenciador de conexões deverá ser db_owner ou sysadmin.

  • Marcar fim da carga inicial: esta operação é usada ao executar uma carga inicial de um banco de dados ativo sem um instantâneo. Ela é invocada no início de um pacote da carga inicial para registrar o LSN atual no banco de dados de origem depois de o pacote da carga inicial terminar de ler as tabelas de origem. Este LSN é determinado pela gravação da hora atual quando esta operação ocorreu e, em seguida, consultando a tabela de mapeamento cdc.lsn_time_no banco de dados CDC, procurando uma alteração que ocorreu depois daquele momento

    Se você selecionar Marcar Início da Carga Inicial ao trabalhar no SQL Server CDC (ou seja, não Oracle), o usuário especificado no gerenciador de conexões deverá ser db_owner ou sysadmin.

  • Marcar início do CDC: esta operação é usada quando a carga inicial é feita de um banco de dados de instantâneo ou de um banco de dados fechado para novas sessões. Ele é invocado em qualquer ponto dentro do pacote de carga inicial. A operação aceita um parâmetro que pode ser um LSN instantâneo, um nome de um banco de dados de instantâneo (do qual o LSN instantâneo será derivado automaticamente) ou pode ser deixado vazio e, nesse caso, o LSN do banco de dados atual será usado como o LSN inicial para o pacote de processamento de alteração.

    Esta operação é usada em vez das operações Marcar início/fim da carga inicial.

    Se você selecionar Mark CDC Start ao trabalhar no SQL Server CDC (ou seja, não no Oracle), o usuário especificado no gerenciador de conexões deverá ser db_owner ou sysadmin.

  • Obter intervalo de processamento: esta operação é usada em um pacote de processamento de alteração antes de invocar o fluxo de dados que usa o fluxo de dados de Origem de CDC. Ele estabelece um intervalo de LSNs que o fluxo de dados de origem de CDC lê quando é invocado. O intervalo é armazenado em uma variável de pacote SSIS que é usada pela Origem de CDC durante o processamento de fluxo de dados.

    Para obter mais informações sobre os possíveis estados de CDC que estão armazenados, consulte Definir uma variável de estado.

  • Marcar o intervalo processado: esta operação é usada em um pacote de processamento de alteração no fim de uma execução de CDC (depois que o fluxo de dados de CDC é concluído com êxito) para registrar o último LSN que foi processado completamente na execução de CDC. Da próxima vez que o GetProcessingRange é executado, esta posição determina o início do próximo intervalo de processamento.

  • Reiniciar estado de CDC: esta operação é usada para reiniciar o estado de CDC persistente associado ao contexto de CDC atual. Depois que esta operação é executada, o LSN máximo atual da tabela sys.fn_cdc_get_max_lsn do carimbo de data/hora de LSN torna-se o início do intervalo para o próximo intervalo de processamento. Esta operação exige uma conexão com o banco de dados de origem.

    Um exemplo de quando esta operação é usada é quando você deseja processar somente os registros de alteração recém-criados e ignorar todos os registros de alteração antigos.

Variável contendo o estado de CDC
Selecione a variável de pacote SSIS que armazena as informações do estado para a operação de tarefa. Você deve definir uma variável antes de começar. Se você selecionar Persistência de estado automática, a variável de estado será carregada e salva automaticamente.

Para obter mais informações sobre como definir a variável de estado, consulte Definir uma variável de estado.

LSN do SQL Server para começar o nome do CDC/instantâneo:
Digite o LSN de banco de dados de origem atual ou o nome do banco de dados de instantâneo do qual a carga inicial é realizada para determinar onde o CDC inicia. Isto só está disponível se o Operação de Controle CDC é definido como Marcar início do CDC.

Para obter mais informações sobre essas operações, consulte CDC Control Task.

Armazene o estado automaticamente em uma tabela de banco de dados
Marque esta caixa de seleção para a tarefa de Controle CDC para tratar o carregamento automaticamente e armazenar o estado de CDC em uma tabela de estado contida no banco de dados especificado. Quando não estiver selecionado, o desenvolvedor deverá carregar o Estado de CDC quando o pacote iniciar e salvá-lo sempre que o Estado de CDC for alterado.

Gerenciador de conexões para o banco de dados onde o estado está armazenado
Selecione na lista um gerenciador de conexões ADO.NET existente ou clique em Novo para criar uma nova conexão. Esta conexão é para um banco de dados do SQL Server que contém a tabela de Estado. A tabela de Estado contém as informações do estado.

Isto só estará disponível se Persistência de estado automática estiver selecionada e for um parâmetro necessário.

Tabela para usar para armazenar estado
Digite o nome da tabela de estado a ser usada para armazenar o estado CDC. A tabela especificada deve ter duas colunas chamadas nome e estado e ambas as colunas devem ser do tipo de dados varchar (256).

Você pode opcionalmente selecionar Novo para obter um script SQL que cria uma nova tabela de estado com as colunas necessárias. Quando Persistência de estado automática estiver selecionada, o desenvolvedor deverá criar uma tabela de estado de acordo com os requisitos listados acima.

Isto só estará disponível se Persistência de estado automática estiver selecionada e for um parâmetro necessário.

Nome do estado
Digite um nome para associar com o estado de CDC persistente. A carga cheia e os pacotes CDC que funcionam com o mesmo contexto de CDC especificará um nome de estado comum. Esse nome é usado para verificar a linha de estado na tabela de estado