Сбор данных изменений SQL Server - это функция, которая считывает исторические данные из журналов транзакций SQL Server и сохраняет их в специальной таблице.
Благодаря использованию специальных функций табличных значений (TVF) он позволяет пользователю запрашивать эти данные, делая возможным либо получить все изменения в конкретной таблице, либо только чистые изменения, которые произошли в результате изменений в течение определенного времени.
CDC имеет определенные преимущества
- Его можно настроить для отслеживания только определенных таблиц или столбцов.
- Он способен обрабатывать изменения модели в определенной степени.
- Это не влияет на производительность так сильно, как триггеры, потому что он работает с журналами транзакций.
- Он легко включается / отключается и не требует дополнительных столбцов в таблице, которые должны отслеживаться.
У этого также есть некоторые недостатки:
- Количество исторических данных может стать огромным быстро.
- Вы не можете отследить, кто внес изменения (по крайней мере, для удалений).
- Данные истории требуют некоторого времени, чтобы наверстать упущенное, поскольку они основаны на журналах транзакций.
- Это зависит от агента SQL Server. Если агент не работает или аварийно завершает работу, история не отслеживается.
Я много читал о CDC, и хотя теперь я знаю, как его использовать, я все еще не уверен, является ли это правильным инструментом для меня.
- Для каких задач / сценариев CDC является правильным инструментом? (Например, разрешить пользователям восстанавливать объект данных до определенного момента времени? Аудит? Отображение полной истории данных?)
- Когда вам лучше не использовать CDC, а прибегнуть к индивидуальному триггерному решению?
- Можно ли использовать CDC в оперативной базе данных и использовать данные CDC в оперативном приложении? (например, показывать его конечному пользователю) Или это явно неправильное использование этой функции?
Я часто слышу, что CDC является инструментом аудита, но разве для этого не предназначен SQL Server Audit ? Они оба разные инструменты для одной и той же задачи? Или CDC может использоваться для других вещей?
Мой текущий сценарий состоит в том, что меня просят создать надежную структуру данных, которая должна стать основой для нескольких будущих приложений. Точные требования размыты, но одно из них заключается в том, что он должен иметь возможность отслеживать историю данных и восстанавливать более старые записи вместе со всеми связанными данными из других таблиц. Сейчас я оцениваю CDC как вариант, но не уверен, стоит ли идти этим путем, потому что я не могу найти ни одного рекомендованного варианта использования.
Хотя я ценю советы для моего конкретного сценария, ответы должны давать общие советы о том, когда и когда не следует использовать сбор данных изменений.