Збір даних про зміни SQL Server - це функція, яка зчитує історичні дані з журналів транзакцій SQL Server та зберігає їх у спеціальній таблиці.
За допомогою використання спеціальних функцій значень таблиці (TVF) він дозволяє користувачеві запитувати ці дані, що дозволяє або отримати всі зміни в певній таблиці, або лише чисті зміни, що були наслідком змін протягом певного часу.
CDC має певні переваги
- Він може бути налаштований лише для відстеження певних таблиць або стовпців.
- Він здатний певною мірою обробляти зміни моделі.
- Це не впливає на продуктивність настільки сильно, як тригери, оскільки працює з журналами транзакцій.
- Він легко вмикається / вимикається і не потребує додаткових стовпців на таблиці, які слід відстежувати.
Він також має деякі недоліки:
- Обсяг даних історії може швидко стати величезним.
- Ви не можете відстежити, хто вніс зміни (принаймні, не для видалень).
- Дані історії потребують певного часу, оскільки вони базуються на журналах транзакцій.
- Це залежить від агента SQL Server. Якщо Агент не працює або виходить з ладу, історія не відстежується.
Я читав досить багато про CDC, і хоча зараз знаю, як ним користуватися, я все ще не впевнений, чи це правильний інструмент для мене.
- Для яких завдань / сценаріїв CDC є правильним інструментом? (наприклад, Дозволити користувачам відновити об'єкт даних до певного моменту? Аудит? Показ усієї історії даних?)
- Коли вам краще не використовувати CDC, а вдатися до користувацького рішення на основі тригера?
- Чи нормально використовувати CDC в операційній базі даних та використовувати дані CDC в операційній програмі? (наприклад, показ її кінцевому користувачеві) Або це явно неправильне використання цієї функції?
Я часто чую, що CDC є інструментом аудиту, але хіба це те, для чого призначений аудит SQL Server ? Вони обидва різні інструменти для одного завдання? Або CDC можна використовувати для інших речей?
Мій поточний сценарій полягає в тому, що мене просять створити надійний фреймворк даних, який повинен бути основою для декількох майбутніх додатків. Точні вимоги розмиті, але одна полягає в тому, що вона повинна мати можливість відслідковувати історію даних та відновлювати старі записи разом із усіма пов'язаними даними з інших таблиць. Я зараз оцінюю CDC як варіант, але я не впевнений, чи це шлях, тому що я не можу знайти жодних рекомендованих випадків використання.
Хоча я ціную поради щодо мого конкретного сценарію, у відповідях слід надати загальну пораду щодо того, коли або коли не використовувати Змінити захоплення даних.