Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Change Data Capture - отслеживание измения данных  [new]
tangueros
Member

Откуда:
Сообщений: 14
Кто использовал фичу Change Data Capture (CDC)?
Что лучше использовать его, или триггеры на изменение базы данных? Ваше мнение?

Инфа о CDC http://msdn.microsoft.com/en-us/library/bb522489.aspx

Более подробно:

есть таблица, над которой производятся всякие изменения данных (insert, update, delete). Нужно организовать отслеживание изменений (чтобы все изменения логировались в текую историческую таблицу с кодом операции, датой и новым значением). Также нужно иметь возможность получать срез таблицы на определенную дату.
6 окт 09, 16:24    [7749076]     Ответить | Цитировать Сообщить модератору
 Re: Change Data Capture - отслеживание измения данных  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
А это уже вам решать, и тот и другой способ в вашем случае подойдёт,
плюс CDC-асинхронная работа
6 окт 09, 16:39    [7749207]     Ответить | Цитировать Сообщить модератору
 Re: Change Data Capture - отслеживание измения данных  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
На мой взгляд у CDC есть два существенных минуса (да, конечно их можно обойти, но тем не менее)
1. не возможность добавить к сохраняемым метаданным доп. информацию (например suser_sname)
2. не возможность секционировать таблицу CDC

--------------------------------------------------------------
Дьявол кроется в деталях.
6 окт 09, 16:45    [7749237]     Ответить | Цитировать Сообщить модератору
 Re: Change Data Capture - отслеживание измения данных  [new]
Denis Reznik
Member

Откуда: Киев
Сообщений: 156
tangueros,

Думаю лучше CDC так как изменения вносятся асинхронно (анализируется transaction log) и не замедляют скорости изменения данных. Ещё один плюс - скорость настройки.
Кроме приведённых минусов есть ещё один - неоходимость отключать CDC во время перестройки индекса, соответственно все данные хранящиеся в cdc таблицах теряются.
7 окт 09, 00:45    [7750939]     Ответить | Цитировать Сообщить модератору
 Re: Change Data Capture - отслеживание измения данных  [new]
tangueros
Member

Откуда:
Сообщений: 14
Спасибо всем!

Про минусы не знал, нетривиальные вещи однако выснились (особенно про индексы).

Плхоже все-таки триггеры (после инфы про индексы решение однозначно в моем случае)
7 окт 09, 11:33    [7752202]     Ответить | Цитировать Сообщить модератору
 Re: Change Data Capture - отслеживание измения данных  [new]
ftpuser
Member

Откуда:
Сообщений: 9
Дедушка
На мой взгляд у CDC есть два существенных минуса (да, конечно их можно обойти, но тем не менее)
1. не возможность добавить к сохраняемым метаданным доп. информацию (например suser_sname)
2. не возможность секционировать таблицу CDC

--------------------------------------------------------------
Дьявол кроется в деталях.


я может чего до конца не понимаю, но есть классные процедуры, которые и дергает джоб, когда пишет изменения в таблицу cdc.<capture instance>_CT

cdc.sp_batchinsert
cdc.sp_batchinsert_lsn_time_mapping

cdc.sp_update
cdc.sp_insdel

cdc.sp_ins_lsn_time_mapping
cdc.sp_ins_dummy_lsn_time_mapping

и т.д.

туда можно дописать нужные строки - сохранение какого-нибудь контекста, например.
2 дек 09, 10:30    [8006492]     Ответить | Цитировать Сообщить модератору
 Re: Change Data Capture - отслеживание измения данных  [new]
Павел-П
Guest
ftpuser,

Есть еще особенности CDC.
Если вы добавили новую колонку в таблицу и хотите отслеживать изменение данных по этой колонке, вам прийдется переконфигурировать CDC для этой таблицы.
По-умолчанию, данные этой колонки в CDC не попадут.
2 дек 09, 15:44    [8009172]     Ответить | Цитировать Сообщить модератору
 Re: Change Data Capture - отслеживание измения данных  [new]
Павел-П
Guest
ftpuser

я может чего до конца не понимаю, но есть классные процедуры, которые и дергает джоб, когда пишет изменения в таблицу cdc.<capture instance>_CT

cdc.sp_batchinsert
cdc.sp_batchinsert_lsn_time_mapping

cdc.sp_update
cdc.sp_insdel

cdc.sp_ins_lsn_time_mapping
cdc.sp_ins_dummy_lsn_time_mapping

и т.д.

туда можно дописать нужные строки - сохранение какого-нибудь контекста, например.


1. Не думаю, что данный подход одобрен фирмой Microsoft. Тем более, что это системные процедуры.
2. Не уверен, что вы сможете отлавить suser_sname, даже изменив эти процедуры

Вы пробовали реализовать в реальной жизни этот вариант?
2 дек 09, 15:51    [8009232]     Ответить | Цитировать Сообщить модератору
 Re: Change Data Capture - отслеживание измения данных  [new]
Павел-П
Guest
Denis Reznik
tangueros,

Думаю лучше CDC так как изменения вносятся асинхронно (анализируется transaction log) и не замедляют скорости изменения данных. Ещё один плюс - скорость настройки.
Кроме приведённых минусов есть ещё один - неоходимость отключать CDC во время перестройки индекса, соответственно все данные хранящиеся в cdc таблицах теряются.


Я не вижу необходимости отключать CDC во время перестройки индексов.
"alter index rebuild/reorganize" прекрасно работает.

Вот еще ссылочка в подтверждение слов.
http://www.sqlservercentral.com/Forums/Topic590277-1408-3.aspx#bm712008
2 дек 09, 15:57    [8009305]     Ответить | Цитировать Сообщить модератору
 Re: Change Data Capture - отслеживание измения данных  [new]
ftpuser
Member

Откуда:
Сообщений: 9
признаться, меня не очень волнует, что они там одобряют...
Во всяком случае, текст этих процедур можно изменить. Хочу заметить, что текст не всех процедур можно менять и не все процедуры даже видны в Object Explorer вкладке Management Studio...

Что до контекстов - это я чушь, конечно, написал, ибо по механизму работы CDC никакие там контексты не доживут.
3 дек 09, 08:49    [8011806]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить