Partilhar via


Tarefa de controle CDC

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

Importante

Os componentes de fluxo CDC, incluindo CDC Control Task, CDC Source e CDC Splitter, foram preteridos. Os detalhes referem-se a o anúncio.

A tarefa CDC Control é usada para controlar o ciclo de vida dos pacotes de captura de dados de alteração (CDC). Trata da sincronização de pacotes CDC com o pacote de carga inicial, o gerenciamento de intervalos LSN (Log Sequence Number) que são processados durante a execução de um pacote CDC. Além disso, a tarefa CDC Control lida com cenários de erro e recuperação.

A tarefa Controle 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 entre 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 de trickle-feed).

A tarefa CDC Control suporta dois grupos de operações. Um grupo trata da sincronização da carga inicial e do processamento de alterações, enquanto o outro gere a gama de LSNs para o processamento de alterações durante a execução de um pacote CDC e mantém um registo do que foi processado com sucesso.

As operações a seguir lidam com a sincronização da carga inicial e do processamento de alterações:

Funcionamento Descrição
ResetCdcState Esta operação é usada para redefinir o estado CDC persistente associado ao contexto CDC atual. Depois que essa operação é executada, o LSN máximo atual da tabela LSN-timestamp sys.fn_cdc_get_max_lsn torna-se o início do intervalo para o próximo intervalo de processamento. Esta operação requer uma conexão com o banco de dados de origem.
MarcarInícioCarregamento Esta operação é usada no início de um pacote de carga inicial para registrar o LSN atual no banco de dados de origem antes que o pacote de carga inicial comece a ler as tabelas de origem. Isso requer 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 CDC do SQL Server (ou seja, não no Oracle), o usuário especificado no gerenciador de conexões deverá ser db_owner ou sysadmin.
MarcarFimDaCargaInicial Esta operação é usada no final de um pacote de carga inicial para registrar o LSN atual no banco de dados de origem depois que o pacote de carga inicial terminar de ler as tabelas de origem. Esse LSN é determinado registrando a hora atual em que essa operação ocorreu e, em seguida, consultando a tabela de mapeamento de cdc.lsn_time_no banco de dados CDC procurando por uma alteração que ocorreu após esse tempo.

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

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

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

Funcionamento Descrição
ObterIntervaloDeProcessamento Esta operação é utilizada antes de invocar o fluxo de dados que utiliza a fonte CDC. Ele estabelece um intervalo de LSNs que o fluxo de dados CDC Source lê quando invocado. O intervalo é armazenado em uma variável de pacote SSIS que é usada pela Fonte CDC durante o processamento do fluxo de dados.

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

Lidando com a persistência do estado CDC

A tarefa CDC Control 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 para o pacote CDC e para detetar 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 CDC Control suporta dois tipos de persistência de estado:

  • Persistência Manual do Estado: Nesse caso, a tarefa Controle 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 CDC e, em seguida, gravá-la novamente nesse repositório persistente depois que o Controle CDC for chamado pela última vez e a execução do CDC for concluída.

  • Persistência automática de estado: o estado CDC é armazenado em uma tabela em um banco de dados. O estado é armazenado sob um nome fornecido na propriedade StateName em uma tabela na propriedade Table to Use for Storing State, 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 é que ele seja o gerenciador de conexões de destino. A tarefa CDC Control atualiza o valor do estado na tabela de estados e isso é confirmado como parte da transação ambiental.

Tratamento de erros

A tarefa CDC Control pode relatar um erro quando:

  • Ele não consegue ler o estado CDC persistente ou quando a atualização do estado persistente falha.

  • Ele não consegue ler as informações atuais da LSN do banco de dados de origem.

  • A leitura do estado do CDC não é consistente.

Em todos esses casos, a tarefa Controle CDC relata um erro que pode ser tratado da maneira padrão como o SSIS lida com erros de fluxo de controle.

A tarefa CDC Control também pode emitir um aviso quando a operação Get Processing Range é invocada diretamente após uma outra operação Get Processing Range sem que a Mark Processed Range tenha sido chamada. Esta é uma indicação de que a execução anterior falhou ou que outro pacote CDC pode estar sendo executado usando o mesmo nome de estado CDC.

Configurando a Tarefa de Controlo do CDC

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

Nesta secção

Definir uma variável de estado

Editor de tarefas de controle CDC

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

Para saber mais sobre a Tarefa de Controlo CDC, consulte Tarefa de Controlo CDC.

Para abrir o CDC Control Task Editor

  1. Nas SQL Server Data Tools, abra o pacote do SQL Server 2019 Integration Services (SSIS) que contém a tarefa de controlo CDC.

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

Opções

Gestor de Conexões ADO.NET da base de dados CDC do SQL Server
Selecione um gerenciador de conexões existente na lista ou clique em Novo para criar uma nova conexão. A conexão deve ser com um banco de dados do SQL Server habilitado para CDC e onde a tabela de alterações 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 armazenada em uma variável de pacote SSIS que armazena o estado e o passa entre os diferentes componentes do pacote.

  • Marcar início de carga inicial: Esta operação é usada ao executar uma carga inicial de um banco de dados ativo sem um instantâneo. Ele é invocado no início de um pacote de carga inicial para registrar o LSN atual no banco de dados de origem antes que o pacote de carga inicial comece a ler as tabelas de origem. Isso requer uma conexão com o banco de dados de origem.

    Se selecionar Marcar Início de Carga Inicial ao trabalhar com o CDC do SQL Server (ou seja, quando não for Oracle), o utilizador especificado no gestor de ligações tem de ser db_owner ou sysadmin.

  • Mark initial load end: Esta operação é utilizada ao executar um carregamento inicial de um banco de dados ativo sem um instantâneo. Ele é invocado no final de um pacote de carga inicial para registrar o LSN atual no banco de dados de origem depois que o pacote de carga inicial terminar de ler as tabelas de origem. Esse LSN é determinado registrando a hora atual em que essa operação ocorreu e, em seguida, consultando a tabela de mapeamento de cdc.lsn_time_no banco de dados CDC procurando por uma alteração que ocorreu após esse tempo

    Se selecionar marcar o fim da carga inicial ao trabalhar no CDC do SQL Server (ou seja, não no Oracle), o utilizador especificado no gestor de ligações deverá ser db_owner ou sysadmin.

  • Mark CDC start: Esta operação é usada quando a carga inicial é feita a partir de um banco de dados de instantâneo ou de um banco de dados em estado de quietude. Ele é invocado em qualquer ponto dentro do pacote de carga inicial. A operação aceita um parâmetro que pode ser um LSN de instantâneo, o nome de um banco de dados de instantâneo (do qual o LSN de instantâneo será derivado automaticamente) ou pode ser deixado em branco. Nesse caso, o LSN do banco de dados atual é usado como o LSN inicial para o pacote de processamento de alterações.

    Em vez das operações de Marcar Início/Fim da Carga Inicial, esta operação é utilizada.

    Se selecionar Marcar Início do CDC ao trabalhar no SQL Server CDC (ou seja, se não estiver a trabalhar no Oracle), o utilizador especificado no gestor de conexões deverá ser db_owner ou sysadmin.

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

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

  • Marcar intervalo processado: Esta operação é usada em um pacote de processamento de alterações no final de uma execução CDC (depois que o fluxo de dados CDC é concluído com êxito) para registrar o último LSN que foi totalmente processado na execução CDC. Na próxima vez que GetProcessingRange for executado, essa posição determinará o início do próximo intervalo de processamento.

  • Redefinir o estado CDC: Esta operação é usada para redefinir o estado CDC persistente associado ao contexto CDC atual. Depois que essa operação é executada, o LSN máximo atual da tabela LSN-timestamp sys.fn_cdc_get_max_lsn torna-se o início do intervalo para o próximo intervalo de processamento. Esta operação requer uma conexão com o banco de dados de origem.

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

Variável que contém o estado CDC
Selecione a variável de pacote SSIS que armazena as informações de estado para a operação da tarefa. Você deve definir uma variável antes de começar. Se você selecionar Persistência automática de estado, 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 iniciar o nome CDC/Snapshot:
Introduza o LSN da base de dados de origem atual ou o nome da base de dados de instantâneo a partir da qual a carga inicial é efetuada para determinar onde o CDC começa. Isso só estará disponível se a Operação de Controle CDC estiver definida como Marcar Início CDC.

Para obter mais informações sobre essas operações, consulte a tarefa de controle CDC

Armazenar automaticamente o estado em uma tabela de banco de dados
Marque essa caixa de seleção para a tarefa Controle CDC para lidar automaticamente com o carregamento e armazenamento do estado CDC em uma tabela de estados contida no banco de dados especificado. Quando a opção não está selecionada, o desenvolvedor deve carregar o Estado CDC quando o pacote for iniciado e salvá-lo sempre que o Estado CDC for alterado.

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

Isso só estará disponível se for selecionada a opção persistência de estado automático e for um parâmetro necessário.

Tabela a ser usada para armazenar estado
Digite o nome da tabela de estados 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).

Opcionalmente, você pode selecionar Novo para obter um script SQL que cria uma nova tabela de estado com as colunas necessárias. Quando Persistência Automática de Estado é selecionada, o desenvolvedor deve criar uma tabela de estados de acordo com os requisitos listados acima.

Isso só estará disponível se a persistência de estado automático estiver selecionada e for um parâmetro necessário.

Nome do estado
Digite um nome para associar ao estado persistente do CDC. Os pacotes de carga completa e de CDC que funcionam dentro do mesmo contexto CDC especificarão um nome de estado comum. Esse nome é usado para procurar a linha de estado na tabela de estados