sys.sp_cdc_cleanup_change_table (Transact-SQL)
Область применения: SQL Server
Удаляет строки из таблицы изменений в текущей базе данных на основе указанного значения @low_water_mark . Данная хранимая процедура используется для прямого управления процессом очистки таблицы изменений. Данную процедуру необходимо использовать с большой осторожностью, так как ее выполнение затрагивает всех потребителей данных таблицы изменений.
Соглашения о синтаксисе Transact-SQL
Синтаксис
sys.sp_cdc_cleanup_change_table [ @capture_instance = ] 'capture_instance'
, [ @low_water_mark = ] low_water_mark
, [ @threshold = ] 'delete threshold'
, [ @fCleanupFailed = ] 'cleanup failed' OUTPUT
[ ; ]
Аргументы
[ @capture_instance = ] 'capture_instance'
Имя экземпляра записи, связанного с таблицей изменений. @capture_instance — sysname, без значения по умолчанию и не может бытьNULL
.
capture_instance необходимо указать экземпляр записи, существующий в текущей базе данных.
[ @low_water_mark = ] low_water_mark
Номер последовательности журнала (LSN), используемый в качестве нового нижнего водяного знака для @capture_instance. @low_water_mark является двоичным(10), без значения по умолчанию.
Если значение не NULL
равно, оно должно отображаться как start_lsn
значение текущей записи в таблице cdc.lsn_time_mapping . Если другие записи в cdc.lsn_time_mapping
общей папке совпадают с временем фиксации, что и запись, определяемая новым низким подложкой, то наименьший LSN, связанный с этой группой записей, выбирается как низкий водяной знак.
Если значение явно заданоNULL
, текущий @low_water_mark для @capture_instance используется для определения верхней границы операции очистки.
Примечание.
@low_water_mark является пороговым значением LSN. Все транзакции со значением LSN ниже указанного значения обрабатываются, а указанное значение исключается.
[ @threshold = ] 'delete порог'
Максимальное количество записей удаления, которые можно удалить с помощью одной инструкции при очистке. @threshold является bigint, с значением по умолчанию 5000.
[ = ] @fCleanupFailed "очистка завершилась сбоем" ВЫХОДНЫЕ ДАННЫЕ
Параметр OUTPUT, указывающий, не выполнена ли операция очистки. @fCleanupFailed бит с значением по умолчанию0
.
Результирующий набор
Нет, если не используется необязательный параметр @fCleanupFailed OUTPUT.
Значения кода возврата
0
(успешно) или 1
(сбой).
Примеры
-- Declaring a variable and Setting to zero first
SELECT @cleanup_failed_bit = 0;
-- Execute cleanup and obtain output bit
EXEC @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
Замечания
sys.sp_cdc_cleanup_change_table
выполняет следующие действия.
Если параметр @low_water_mark имеет значение
NULL
,start_lsn
значение @capture_instance остается неизменным. Однако если текущий низкий водяной знак больше значения низкой подложки, указанного с помощью параметра @low_water_mark для процедуры, возникает ошибка 22957 . Сообщение об ошибке для ошибки 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].
Примечание.
Новая нижняя конечная точка может не являться точкой, указанной в вызове хранимой процедуры. Если другие записи в
cdc.lsn_time_mapping
таблице используют одно и то же время фиксации, то наименьшийstart_lsn
из представленных в группе записей выбирается в качестве скорректированного нижнего водяного знака. Если параметр @low_water_mark илиNULL
текущий низкий водяной знак больше нового нижнего водяного знака,start_lsn
значение для экземпляра записи остается неизменным.Затем удаляются записи таблицы со значениями
__$start_lsn
меньше низкого водяного знака. Пороговое значение удаления используется для ограничения количества строк, удаляемых в одной транзакции. Сообщается о неудачном удалении записей, но не влияет на изменение экземпляра записи с низкой водяной знак, который, возможно, был сделан на основе вызова.Если хранимая
sys.sp_cdc_cleanup_change_table
процедура истекает после обновленияstart_lsn
экземпляра записи, но без удаления данных таблицы изменений, увеличение значения хранения данных с помощью хранимой процедуры sys.sp_cdc_change_job до следующего выполнения хранимой процедурыsys.sp_cdc_cleanup_change_table
не сохраняет данные за указанный период хранения. Значениеstart_lsn
в cdc.change_tables должно рассматриваться как новое низкое водяное знак. Хранимаяsys.sp_cdc_cleanup_change_table
процедура не задаетstart_lsn
значение, соответствующее только что указанному периоду хранения данных. Процедура всегда выполняет очистку на основе низкой водяной знак. Указание значения для параметра @low_water_mark , равного или вышеstart_lsn
значения в cdc.change_tables, избегает создания ошибки 22957.Если вы используете
sys.sp_cdc_cleanup_change_table
для управления процессом очистки таблицы и взаимоблокировкой между сканированием CDC и очисткой CDC приsys.sp_cdc_cleanup_change_table
вызове, ошибка 22852 регистрируется с серьезностью 10 (информационное сообщение). Сообщение об ошибке 22852 выглядит следующим образом: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.
Используйте sys.sp_cdc_cleanup_change_table
в следующих обстоятельствах:
Задание агента очистки сообщает о неудачном удалении.
Администратор может запустить данную хранимую процедуру явным образом, чтобы повторно выполнить эту операцию. Чтобы повторить очистку для данного экземпляра записи, выполните
sys.sp_cdc_cleanup_change_table
и укажитеNULL
для параметра @low_water_mark .Простая политика на основе хранения, используемая заданием агента очистки, не является достаточной.
Так как эта хранимая процедура выполняет очистку для одного экземпляра записи, ее можно использовать для создания пользовательской стратегии очистки, которая настраивает правила очистки для отдельного экземпляра записи.
Разрешения
Требуется членство в предопределенной роли базы данных db_owner.