Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: SQL Server
Remove linhas da tabela de alterações na base de dados atual com base no valor de @low_water_mark especificado. Este procedimento armazenado é fornecido para utilizadores que pretendem gerir diretamente o processo de limpeza da tabela de alterações. No entanto, deve-se ter cautela, pois o procedimento afeta todos os consumidores dos dados na tabela de alteração.
Transact-SQL convenções de sintaxe
Syntax
sys.sp_cdc_cleanup_change_table
[ @capture_instance = ] N'capture_instance'
, [ @low_water_mark = ] low_water_mark
[ , [ @threshold = ] threshold ]
[ , [ @fCleanupFailed = ] fCleanupFailed OUTPUT ]
[ ; ]
Arguments
[ @capture_instance = ] N'capture_instance'
O nome da instância de captura associada à tabela de mudanças.
@capture_instance é sysname, sem padrão, e não pode ser NULL.
@capture_instance deve nomear uma instância de captura que exista na base de dados atual.
[ @low_water_mark = ] low_water_mark
Um número de sequência logarítmica (LSN) que é usado como o novo ponto mais baixo para o @capture_instance. @low_water_mark é binário(10), sem padrão.
Se o valor não NULLfor , deve aparecer como o start_lsn valor de uma entrada atual na tabela cdc.lsn_time_mapping . Se outras entradas partilharem cdc.lsn_time_mapping o mesmo tempo de commit que a entrada identificada pela nova marca de água baixa, o menor LSN associado a esse grupo de entradas é escolhido como marca de água baixa.
Se o valor for explicitamente definido para NULL, o @low_water_mark corrente para a @capture_instance é usado para definir o limite superior para a operação de limpeza.
Note
@low_water_mark é o limiar LSN. Qualquer transação com um valor LSN inferior ao fornecido é processada, e o valor em questão é excluído.
[ @threshold = ] limiar
O número máximo de entradas eliminadas que podem ser eliminadas usando uma única instrução na limpeza. @threshold é bigint, com um padrão de 5000.
[ @fCleanupFailed = ] fCleanupFailed OUTPUT
Um parâmetro que indica se a operação de limpeza falhou OUTPUT ou não.
@fCleanupFailed é bit, com um padrão de 0.
Conjunto de resultados
Nenhum, a menos que seja usado o parâmetro opcional @fCleanupFailed OUTPUT.
Valores de código de retorno
0 (sucesso) ou 1 (fracasso).
Examples
-- Declaring a variable and Setting to zero first
SELECT @cleanup_failed_bit = 0;
-- Execute cleanup and obtain output bit
EXECUTE
@retcode = sys.sp_cdc_cleanup_change_table
@capture_instance = '<CaptureInstance>',
@low_water_mark = @LSN, --== LSN to be used for new low watermark for capture instance
@threshold = 1,
@fCleanupFailed = @cleanup_failed_bit OUTPUT;
-- Leverage @cleanup_failed_bit output to check the status.
SELECT IIF (@cleanup_failed_bit > 0, 'CLEANUP FAILURE', 'CLEANUP SUCCESS');
CLEANUP SUCCESS
Remarks
sys.sp_cdc_cleanup_change_table Executa as seguintes operações:
Se o parâmetro @low_water_mark for
NULL, ostart_lsnvalor para o @capture_instance permanece inalterado. No entanto, se a marca de água mínima atual for maior do que o valor da marca de água inferior especificado usando o parâmetro @low_water_mark para o procedimento, é lançado o Erro 22957 . A mensagem de erro para o Erro 22957 éLSN %s, specified as the new low endpoint for the change table associated with capture instance '%s', is not within the Change Data Capture timeline [%s, %s].Note
A nova marca de água baixa pode não ser a marca de água baixa especificada na chamada de procedimento armazenado. Se outras entradas na
cdc.lsn_time_mappingtabela partilharem o mesmo tempo de commit, a menorstart_lsnrepresentada no grupo de entradas é selecionada como a marca de água baixa ajustada. Se o parâmetro @low_water_mark forNULLou a marca de água mínima atual for maior do que a nova marca de água baixa, ostart_lsnvalor da instância de captura permanece inalterado.As entradas da tabela de alterações com
__$start_lsnvalores inferiores à marca de água baixa são então eliminadas. O limiar de eliminação é usado para limitar o número de linhas eliminadas numa única transação. É reportada uma falha em eliminar entradas com sucesso, mas não afeta qualquer alteração na marca de água baixa da instância de captura que possa ter sido feita com base na chamada.Se o
sys.sp_cdc_cleanup_change_tableprocedimento armazenado expirar após atualizar parastart_lsna instância de captura mas sem eliminar os dados da tabela de alteração, aumentar o valor de retenção de dados usando o procedimento armazenado sys.sp_cdc_change_job antes da próxima execução do procedimentosys.sp_cdc_cleanup_change_tablearmazenado não retém os dados para o período de retenção especificado. Ostart_lsnvalor em cdc.change_tables deve ser tratado como o novo ponto mais baixo. Osys.sp_cdc_cleanup_change_tableprocedimento armazenado não define ostart_lsnvalor para corresponder ao novo período de retenção de dados especificado. O procedimento realiza sempre a limpeza com base na marca de água baixa. Especificar um valor para o parâmetro @low_water_mark igual ou superior aostart_lsnvalor em cdc.change_tables evita gerar o Erro 22957.Se usar
sys.sp_cdc_cleanup_change_tablepara gerir o processo da tabela de limpeza e ocorrer um bloqueio entre a varredura do CDC e a limpeza do CDC quandosys.sp_cdc_cleanup_change_tableé invocado, o Erro 22852 é registado com gravidade 10 (mensagem informativa). A mensagem para o Erro 22852 é a seguinte:Could not delete change table entries made obsolete by a change in one or more low water marks for capture instances of database <DatabaseName>. The failure occurred when executing the command <CommandName>. The error returned was <ErrorInfo>. Use the action and error to determine the cause of the failure and resubmit the request.
Utilização sys.sp_cdc_cleanup_change_table nas seguintes circunstâncias:
Os relatórios de trabalho do Agente de limpeza apagam falhas.
Um administrador pode executar este procedimento armazenado explicitamente para tentar novamente uma operação falhada. Para tentar novamente a limpeza de uma dada instância de captura, execute
sys.sp_cdc_cleanup_change_table, e especifiqueNULLpara o parâmetro @low_water_mark .A política simples baseada na retenção usada pelo trabalho de agente de limpeza não é suficiente.
Como este procedimento armazenado realiza a limpeza de uma única instância de captura, pode ser usado para construir uma estratégia de limpeza personalizada que adapta as regras de limpeza à instância de captura individual.
Permissions
Requer associação à função fixa de base de dados db_owner.