Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Instância Gerenciada de SQL do Azure
Este artigo explica limitações, problemas e erros conhecidos com a captura de dados de alteração (CDC) no SQL Server e na Instância Gerenciada do Azure SQL .
Para o Banco de Dados SQL do Azure, veja Problemas conhecidos com o CDC no Banco de Dados SQL do Azure.
Modificar metadados
Para que o CDC funcione corretamente, você não deve modificar manualmente os metadados CDC, como CDC schema, tabelas de alterações, procedimentos armazenados do sistema CDC, permissões de cdc user padrão (sys.database_principals) ou renomear o cdc user.
Nenhum dos objetos em sys.objects com a propriedade is_ms_shipped definida como 1 deve ser modificado.
SELECT name AS object_name
,SCHEMA_NAME(schema_id) AS schema_name
,type_desc
,is_ms_shipped
FROM sys.objects
WHERE is_ms_shipped= 1 AND SCHEMA_NAME(schema_id) = 'cdc'
Diferenças de ordenação
É importante estar ciente de uma situação em que você tem agrupamentos diferentes entre o banco de dados e as colunas de uma tabela configurada para a captura de dados de alterações. A CDA usa um armazenamento provisório para popular tabelas laterais. Se uma tabela tiver char ou varchar colunas com ordenações diferentes da ordenação de banco de dados e se essas colunas armazenarem caracteres não ASCII (como caracteres DBCS de bytes duplos), o CDC poderá não ser capaz de persistir os dados alterados consistentes com os dados nas tabelas base. Isso ocorre porque as variáveis de armazenamento intermediário não podem ter agrupamentos associados a elas.
Considere uma das seguintes abordagens para garantir que os dados de alterações capturados sejam consistentes com as tabelas base:
Use o tipo de dados nchar ou nvarchar para colunas que contêm dados não ASCII.
Ou, use a mesma ordenação para colunas e para o banco de dados.
Por exemplo, se você tiver um banco de dados que usa a ordenação SQL_Latin1_General_CP1_CI_AS, considere a tabela a seguir:
CREATE TABLE T1(
C1 INT PRIMARY KEY,
C2 VARCHAR(10) collate Chinese_PRC_CI_AI)
A CDA poderá não capturar os dados binários para a coluna C2, porque sua ordenação é diferente (Chinese_PRC_CI_AI). Use nvarchar para evitar esse problema:
CREATE TABLE T1(
C1 INT PRIMARY KEY,
C2 NVARCHAR(10) collate Chinese_PRC_CI_AI --Unicode data type, CDC works well with this data type
)
Recuperação acelerada de banco de dados (ADR) e CDC (captura de dados de alteração)
Não há suporte para habilitar a CDC (captura de dados de alteração) e a ADR (recuperação acelerada de banco de dados) para o mesmo banco de dados no SQL Server 2019 (15.x). A habilitação do CDC e da ADR tem suporte em versões posteriores do SQL Server começando com a Atualização Cumulativa 18 do SQL Server 2022 (16.x).
Quando você habilita a CDA, o recurso de truncamento de log agressivo da ADR é desabilitado. Isso ocorre porque a verificação CDC acessa o log de transações do banco de dados. Transações ativas continuam a manter a truncação do arquivo de alterações até que a transação seja confirmada e a digitalização do CDA seja concluída ou a transação seja abortada. Se você habilitar o CDC em um banco de dados em que a ADR está habilitada, você poderá observar uma utilização mais alta do log de transações. Verifique se o espaço de log de transações suficiente está disponível para as necessidades de todas as suas cargas de trabalho.
Habilitar CDC falhará se o esquema ou o usuário nomeado cdc já existir
Quando você habilita o CDC em um banco de dados, ele cria um novo esquema e um usuário chamado cdc. Portanto, não é recomendável criar manualmente um esquema personalizado ou um usuário chamado cdc, pois ele é reservado para uso do sistema.
Se você definiu manualmente um esquema personalizado ou um usuário chamado cdc em seu banco de dados que não está relacionado ao CDC, o procedimento armazenado do sistema sys.sp_cdc_enable_db falha ao habilitar o CDC no banco de dados com a seguinte mensagem de erro.
The database <database_name> cannot be enabled for change data capture because a database user named 'cdc' or a schema named 'cdc' already exists in the current database. These objects are required exclusively by CDC. Drop or rename the user or schema and retry the operation.
Para resolver o problema:
- Remova manualmente o esquema
cdce o usuáriocdcvazios. Em seguida, o CDC pode ser habilitado com sucesso no banco de dados.
A CDA falha depois de ALTER COLUMN
Quando o tipo de dados de uma coluna em uma tabela com CDC habilitado é alterado para uma conversão sem suporte, a verificação do CDC pode resultar em erros após a atualização.
Veja a seguir exemplos de alterações de tipo de ALTER COLUMN dados que não têm suporte quando o CDC está habilitado em uma tabela:
- bigint para int
- char(x), nvarchar(x)ou nvarchar(x) para uniqueidentifier, DATE ou INT
Alterar o tipo de dados de uma coluna em uma tabela habilitada para CDC pode resultar nos seguintes erros:
- Erro 241 – Falha na conversão de data e/ou hora da cadeia de caracteres.
- Erro 245 – Falha na conversão do valor.
- Erro 8169 – Falha na conversão de uma cadeia de caracteres em uniqueidentifier.
Alterar o tamanho das colunas de uma tabela habilitada para CDC usando instruções DDL pode causar problemas com o processo de captura subsequente do CDC, o que pode resultar nos seguintes erros:
- Erro 2628 – A cadeia de caracteres ou os dados binários seriam truncados na tabela.
- Erro 8115 – Erro de estouro aritmético convertendo o tipo de dados de bigint para int
Lembre-se de que os dados nas tabelas de mudanças do CDC são retidos com base nas definições configuradas pelo usuário. Portanto, antes de fazer qualquer alteração no tamanho da coluna, você deve avaliar se a alteração é compatível com os dados existentes nas tabelas de alteração da CDA.
Se o sys.dm_cdc_errors indicar que as verificações estão falhando devido ao erro 2628 ou erro 8115 para tabelas de alterações, você deve primeiro consumir os dados de alteração nas tabelas afetadas. Depois disso, você precisa desabilitar e, em seguida, reabilitar o CDC na tabela para resolver o problema com eficiência.
A habilitação do CDC falha quando existem gatilhos CREATE OBJECT
Quando você habilita o CDC, um cdc user é criado para gerenciar o processo de criação do CDC. O cdc user executa uma série de procedimentos armazenados para habilitar o CDC e alguns desses procedimentos armazenados criam objetos que disparam gatilhos de CREATE OBJECT existentes. Como o cdc user não tem permissão para gravar no banco de dados master, esses procedimentos armazenados CDC falham com o erro 22830.
Desabilite todos os gatilhos CREATE OBJECT antes de habilitar a CDA em um banco de dados. Reative esses gatilhos depois de o CDC ser configurado.
Importar banco de dados usando operações de importação/exportação e extração/publicação da camada de dados
Para bancos de dados SQL habilitados para CDA, ao usar o SqlPackage, SSDT ou outras ferramentas SQL para Importar/Exportar ou Extrair/Publicar, o esquema e o usuário cdc são excluídos no novo banco de dados. Outros objetos CDC não incluídos nas operações Importar/Exportar e Extrair/Implantar incluem as tabelas marcadas como is_ms_shipped=1 em sys.objects.
Mesmo que o CDC não esteja habilitado e você tenha definido um esquema personalizado ou um usuário chamado cdc no seu banco de dados, ele também será excluído nas operações de Importação/Exportação e Extração/Implantação para importar/configurar um novo banco de dados.
Alternância de partição com variáveis
Não há suporte para o uso de variáveis com alternância de partição em bancos de dados ou tabelas com captura de dados de alterações (CDA) para a instrução ALTER TABLE ... SWITCH TO ... PARTITION .... Consulte as limitações de troca de partição para obter mais informações.
Operações online
Não há suporte para as instruções de DDL online
Na Instância Gerenciada do Azure SQL e nas versões do SQL Server anteriores ao SQL Server 2025 (17.x), as instruções DDL online ALTER TABLE não têm suporte quando a captura de dados de alteração está habilitada em um banco de dados.
As operações de índice online não têm suporte
As operações de índice online não têm suporte quando a captura de dados de alteração está habilitada em um banco de dados. Você pode encontrar o Erro 18773, "Não foi possível localizar registros de informações de texto para a coluna "%.*ls", ID %d durante a construção do comando.".
Restrições padrão em colunas adicionadas
Quando o CDC estiver habilitado em uma tabela e uma coluna não anulável com uma restrição padrão for adicionada, os dados de linha existentes terão o valor da restrição padrão. No entanto, o CDC usará NULL em vez do valor padrão para linhas existentes . Isso se aplica somente aos dados presentes antes da ADL ser aplicada. Como solução alternativa, emita instruções que não alteram UPDATE para linhas existentes ou execute um ALTER INDEX ... REBUILD no índice clusterizado da tabela. Use ALTER TABLE ... REBUILD no heap se nenhum índice clusterizado estiver presente.
Resolução de problemas
Esta seção descreve as etapas para solucionar problemas referentes a erros associados à CDC no SQL Server e à Instância Gerenciada de SQL do Azure. Erros relacionados ao CDC podem obstruir o funcionamento adequado do processo de captura e levar à expansão do log de transações do banco de dados.
Para examinar esses erros, você pode consultar a exibição de gerenciamento dinâmico sys.dm_cdc_errors. Se sys.dm_cdc_errors exibição de gerenciamento dinâmico retornar erros, examine as seguintes informações de solução de problemas.
Observação
Para obter mais informações sobre um código de erro específico, consulte Eventos e erros do mecanismo de banco de dados.
Estas são as diferentes categorias de solução de problemas incluídas nesta seção:
| Categoria | Descrição |
|---|---|
| Metadados modificados | Inclui informações sobre como mitigar problemas relacionados ao CDA quando a tabela rastreada foi modificada ou removida. |
| Gerenciamento de espaço de banco de dados | Inclui informações sobre como mitigar problemas quando o espaço do banco de dados se esgotou. |
| Limitações de CDC | Inclui informações sobre como mitigar problemas causados por limitações da CDA. |
Metadados modificados
Erro 200/208 – nome de objeto inválido
Causa: o erro pode ocorrer quando os metadados do CDA foram removidos. Para que o CDC funcione corretamente, você não deve modificar manualmente os metadados CDC, como
CDC schema, tabelas de alterações, procedimentos armazenados do sistema CDC, permissões decdc userpadrão (sys.database_principals) ou renomear ocdc user.Recomendação: para resolver esse problema, você precisa desabilitar e reabilitar o CDA para seu banco de dados. Ao habilitar uma captura de dados de alterações para um banco de dados, o esquema cdc, usuário cdc, as tabelas de metadados e outros objetos de sistema são criados para o banco de dados.
Observação
Os objetos encontrados na exibição do catálogo do sistema sys.objects com is_ms_shipped=1 and schema_name='cdc' não devem ser alterados ou descartados.
Erro 1202 - A entidade de segurança do banco de dados não existe ou o usuário não é um membro
Causa: o erro pode ocorrer quando
cdc userfoi descartado. Para que o CDC funcione corretamente, você não deve modificar manualmente os metadados CDC, comoCDC schema, alterar tabelas, procedimentos armazenados do sistema CDC, permissões padrãocdc userou renomear ocdc user.Recomendação: verifique se o usuário
cdcexiste em seu banco de dados e também tem a funçãodb_owneratribuída. Para criar o usuáriocdc, consulte o exemplo Criar usuário cdc e atribuir função.
Erro 15517 – Não é possível executar como a entidade de banco de dados porque a entidade de segurança não existe
Causa: esse tipo de entidade de segurança não pode ser representado ou você não tem permissão. O erro pode ocorrer quando os metadados da CDA foram descartados ou não fazem mais parte da função
db_owner. Para que o CDC funcione corretamente, você não deve modificar manualmente os metadados CDC, comoCDC schema, alterar tabelas, procedimentos armazenados do sistema CDC, permissões padrãocdc userou renomear ocdc user.Recomendação: verifique se o usuário
cdcexiste em seu banco de dados e também tem a funçãodb_owneratribuída. Para criar o usuáriocdc, consulte o exemplo Criar usuário cdc e atribuir função.
Erro 18807 – não é possível encontrar uma ID de objeto para a tabela do sistema de replicação
Causa: esse erro ocorre quando o SQL Server não consegue localizar ou acessar a tabela do sistema de replicação '%s'. Isso pode acontecer porque a tabela está ausente ou inacessível. Para que o CDC funcione corretamente, você não deve modificar manualmente os metadados CDC, como
CDC schema, alterar tabelas, procedimentos armazenados do sistema CDC, permissões padrãocdc userou renomear ocdc user.Recomendação: verifique se a tabela do sistema existe e se pode ser acessada consultando a tabela diretamente. Consulte o catálogo do sistema sys.objects , defina a cláusula predicado para
is_ms_shipped=1 and schema_name='cdc'listar todos os objetos relacionados ao CDC. Se a consulta não retornar nenhum objeto, você deverá desabilitar e reabilitar o CDA para seu banco de dados. Habilitar uma captura de dados de alterações para um banco de dados cria o esquema cdc, o usuário cdc, as tabelas de metadados e outros objetos de sistema para o banco de dados.
Erro 21050 – Somente membros da função de servidor fixa sysadmin ou db_owner podem executar essa operação
Causa: o
cdc userfoi removido da função de banco de dadosdb_ownerou da função de servidorsysadmin.Recomendação: verifique se o
cdc usertem a funçãodb_owneratribuída. Para criar o usuáriocdc, consulte o exemplo Criar usuário cdc e atribuir função.
Erro 22830 – Não foi possível atualizar os metadados que indicam que o banco de dados <database name> está habilitado para o Change Data Capture. A falha ocorreu ao executar o comando <CDC stored procedure name>.
Causa: esse erro ocorre quando existe um
CREATE OBJECTgatilho no banco de dados ou no servidor. Quando você habilita o CDC, umcdc useré criado para gerenciar o processo de criação do CDC. Ocdc userexecuta uma série de procedimentos armazenados para habilitar o CDC e alguns desses procedimentos armazenados criam objetos que disparam gatilhos deCREATE OBJECTexistentes. Como ocdc usernão tem permissão para gravar no banco de dadosmaster, esses procedimentos armazenados CDC falham com o erro 22830.Recomendação: antes de habilitar o CDA em um banco de dados, desabilite todos os gatilhos
CREATE OBJECT. Reinsabilite esses gatilhos novamente após a configuração do CDC.
Gerenciamento de espaço de banco de dados
Erro 1105 - Não foi possível alocar espaço para o objeto no banco de dados porque o grupo de arquivos está cheio
Causa: esse erro ocorre quando o grupo de arquivos primário de um banco de dados fica sem espaço e o SQL Server não consegue alocar mais espaço para um objeto (como uma tabela ou índice) dentro desse grupo de arquivos.
Recomendação: para resolver esse problema, exclua todos os dados desnecessários em seu banco de dados para liberar espaço. Identifique tabelas, índices ou outros objetos não utilizados no grupo de arquivos que possam ser removidos com segurança. Monitore a utilização do espaço de perto. Para obter mais informações, confira Gerenciar espaço de arquivo para bancos de dados no Banco de Dados SQL do Azure
Caso não seja viável descartar objetos de dados desnecessários, considere alocar mais espaço para o log de transações do banco de dados. Para obter mais informações sobre o gerenciamento de log de transações, confira o Guia de arquitetura e gerenciamento de log de transações do SQL Server).
Limitações de CDC
Erro 241 – Falha na conversão de data e/ou hora da cadeia de caracteres
Causa: esse erro ocorre quando a ALTER COLUMN é executada em um tipo de dados de data e a tabela tem CDC habilitado. Por exemplo, se uma tabela tiver uma coluna nvarchar e você alterar o tipo de dados até a data (por exemplo,
ALTER TABLE table_name ALTER COLUMN [column_name] DATE NULL), poderá ver esse erro no sys.dm_cdc_errors DMV. O erro 241 ocorre devido a uma conversão de dados sem suporte na tabela de alterações, mesmo que oALTERcomando na tabela de origem seja bem-sucedido.Recomendação: para resolver esse problema, desabilite e habilite novamente o CDC para sua tabela depois de alterar a coluna. Como alternativa, desabilite CDC antes de alterar a coluna e, em seguida, reenable CDC após a
ALTER COLUMNalteração.
Erro 245 – Falha na conversão do valor de cadeia de caracteres para int
Causa: esse erro ocorre quando o comando ALTER COLUMN é emitido para alterar o tipo de dados de uma coluna quando a tabela tem CDC habilitado. Por exemplo, se uma tabela tiver uma coluna nvarchar e você alterar o tipo de dados para int (por exemplo,
ALTER TABLE table_name ALTER COLUMN [column_name] INT NULL), você poderá ver esse erro no sys.dm_cdc_errors DMV. O erro 245 ocorre devido a uma conversão de dados sem suporte na tabela de alterações, mesmo que oALTERcomando na tabela de origem seja bem-sucedido.Recomendação: para resolver esse problema, desabilite e habilite novamente o CDC para sua tabela depois de alterar a coluna. Como alternativa, desabilite CDC antes de alterar a coluna e, em seguida, reenable CDC após a
ALTER COLUMNalteração.
Erro 913 – Falha no trabalho de captura cdc ao processar alterações para uma tabela com o tipo de dados CLR do sistema
Causa: esse erro ocorre ao habilitar o CDC em uma tabela com o tipo de dados CLR do sistema, fazer alterações de DML e fazer alterações de DDL na mesma tabela enquanto o trabalho de captura CDC está processando alterações relacionadas a outras tabelas.
Recomendação: as etapas recomendadas são fechar para novas sessões DML para a tabela, executar um trabalho de captura para processar as alterações, executar DDL para a tabela, executar um trabalho de captura para processar alterações de DDL e reabilitar o processamento de DML. Para obter mais informações, consulte o trabalho de captura cdc falha ao processar alterações para uma tabela com tipo de dados CLR do sistema (geometria, geografia ou hierarchyid).
Erro 2628 – cadeia de caracteres ou dados binários seriam truncados na tabela
Motivo: alterar o tamanho das colunas de uma tabela com CDA habilitado usando instruções DDL pode causar problemas no processo de captura de CDA subsequente. O sys.dm_cdc_errors, Visualização de Gerenciamento Dinâmico (DMV), é útil para verificar qualquer CDC por problemas relatados, como os erros número 2628 e 8115.
Recomendação: antes de fazer qualquer alteração no tamanho da coluna, você deve avaliar se a alteração é compatível com os dados existentes nas tabelas de alteração da CDA. Para resolver esse problema, desabilite e reative o CDC para o seu banco de dados. Para obter mais informações sobre como habilitar o CDC para um banco de dados ou uma tabela, consulte Habilitar CDC para um banco de dados e Habilitar CDC para uma tabela.
Erro 8115 – Erro de transbordo aritmético convertendo o tipo de dados de bigint para int
Causa: esse erro ocorre quando uma DDL ALTER COLUMN é executada em uma tabela habilitada para CDC que resulta em uma diminuição na precisão da coluna (como alterar o tipo de dados da coluna de bigint para int). A coluna de precisão reduzida não consegue manter os valores presentes na tabela de alterações.
Recomendação: para resolver esse problema, desabilite e habilite novamente o CDC para sua tabela depois de alterar a coluna. Como alternativa, desabilite o CDC antes de executar o comando
ALTER COLUMN, e, em seguida, reabilite o CDC após a alteraçãoALTER COLUMN.
Erro 8169 – Falha na conversão de uma cadeia de caracteres para uniqueidentifier
Causa: esse erro ocorre quando um comando ALTER COLUMN é emitido para alterar o tipo de dados de uma coluna quando a tabela tem CDC habilitado. Por exemplo, se uma tabela tiver uma coluna char(x),nvarchar(x), nvarchar(x) e você alterar o tipo de dados para uniqueidentifier (como:
ALTER TABLE table_name ALTER COLUMN [column_name] uniqueidentifier), você poderá ver esse erro no sys.dm_cdc_errors DMV (Modo de Exibição de Gerenciamento Dinâmico). O erro 8169 indica uma conversão de dados sem suporte na tabela de alterações, mesmo que o comando ALTER na tabela de origem tenha êxito.Recomendação: para resolver esse problema, desabilite e habilite novamente o CDC para sua tabela depois de alterar a coluna. Como alternativa, desabilite o CDC antes de executar o comando
ALTER COLUMN, e, em seguida, reabilite o CDC após a alteraçãoALTER COLUMN.
Criar usuário e atribuir função
Se cdc user foi removido, você pode adicionar o usuário de volta manualmente.
Use o script T-SQL a seguir, para criar um usuário (cdc) e atribuir a função adequada para o mesmo (db_owner).
IF NOT EXISTS
(
SELECT *
FROM sys.database_principals
WHERE NAME = 'cdc'
)
BEGIN
CREATE USER [cdc]
WITHOUT LOGIN WITH DEFAULT_SCHEMA = [cdc];
END
EXEC sp_addrolemember 'db_owner', 'cdc';
Verificar e adicionar subscrição de função
Para verificar se o usuário cdc pertence à função sysadmin ou db_owner, execute a seguinte consulta T-SQL:
EXECUTE AS USER = 'cdc';
SELECT is_srvrolemember('sysadmin'), is_member('db_owner');
Se o usuário cdc não pertencer a nenhuma das funções, execute a seguinte consulta T-SQL para adicionar a função db_owner ao usuário cdc.
EXEC sp_addrolemember 'db_owner' , 'cdc';