Вручную удалить записи отслеживания изменений в SQL Server

Я не могу найти никаких средств для ручного выполнения очистки таблицы отслеживания изменений после обновления клиента. Кажется, это серьезное ограничение отслеживания изменений в SQL Server, если я чего-то не упускаю.

Возможно, я что-то упускаю из виду, но я пытаюсь выполнить успешное обновление клиента с SQL Server, чтобы удалить эти записи изменений в таблице изменений. На этом этапе они не нужны.

Единственная конфигурация, о которой я знаю, - это период хранения в 2 дня ... и т. Д. Поскольку разные клиенты / люди будут синхронизироваться с ОЧЕНЬ разными интервалами, кажется, что мой единственный выбор - установить очень большой период хранения: например, 365 дней. Но это приведет к раздутию без возможности очистки после обновления всех клиентов.

Таким образом, похоже, что единственная работа - это вручную создавать триггеры и поддерживать свои собственные таблицы удаления, таблицы обновления и т. Д.

Кто-нибудь нашел лучший способ справиться с этим, а не просто не использовать реализованную функцию отслеживания изменений?


person frigon    schedule 22.06.2015    source источник


Ответы (2)


Установите разумный и функциональный срок хранения. Если клиент пытается выполнить синхронизацию, используя версию с истекшим сроком действия (менее min_valid_version в sys.change_tracking_tables), он должен повторно синхронизировать всю таблицу. Надеюсь, у вас не так много клиентов, которые месяцами ждут синхронизации. Если так ... по крайней мере, они делают это не очень часто.

person Brian Pressler    schedule 22.06.2015
comment
Да, я думаю, если клиент отправляет изменения до полной загрузки, это может быть приемлемо. Я просто хотел бы, чтобы над конфигурацией этого был немного больше контроля. - person frigon; 24.06.2015

У меня нет идеального решения, но для серверов, занимающих много места, я отбросил таблицу и воссоздал ее из копии, а затем снова включил отслеживание изменений. Это удалило все записи отслеживания изменений для этой таблицы. Я сделал это в рамках регулярного технического обслуживания.

Я использовал sys.sp_cdc_disable_db, чтобы отключить отслеживание изменений во время обслуживания, чтобы облегчить этот процесс.

До этого метода у меня была реализована собственная система отслеживания. Но из-за проблем с репликацией, удаленным сервером и отказоустойчивым сервером стало очень сложно отслеживать все эти изменения. Это неприятно, особенно если у вас есть функции автоматического восстановления. Накладные расходы того не стоили.

Надеюсь это поможет.

person Emacs User    schedule 22.06.2015
comment
Спасибо ... да, я не хочу накладных расходов на начальную загрузку. - person frigon; 24.06.2015