SQL Server CDC - проблема, связанная с изменениями схемы

У наших клиентов есть требование отслеживать изменения данных в базе данных, кто это сделал и когда (указывается в дополнительных столбцах).

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

Функции сбора измененных данных, встроенные в SQL-сервер, кажутся очень похожими, т.е. sys.sp_cdc_enable_table.

Проблема в том, что после изменения таблицы (добавления нового столбца) нам нужно будет отключить существующее отслеживание данных, а затем снова включить его, указав на другую таблицу CDC. К сожалению, sys.sp_cdc_disable_table отбрасывает исходную таблицу отслеживания - есть ли какой-нибудь простой способ предотвратить такое поведение (в идеале я бы просто оставил его на месте)? Кажется, я не могу переименовать таблицу через SQL Server Management Studio.

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

Я понимаю, что это не совсем то, для чего был разработан CDC, но если бы мы могли заставить его работать, это упростило бы нашу систему и сэкономило бы некоторые усилия.


person Jake    schedule 22.05.2017    source источник
comment
Последнее, что я проверял, у CDC нет простого способа узнать, кто (если он еще не вставлен в сами изменения)   -  person Damien_The_Unbeliever    schedule 22.05.2017


Ответы (1)


К сожалению, я не думаю, что это возможно - CDC предназначен не для этого.

Подход CDC лучше, чем подход триггера - он более производительный и надежный, поскольку он считывается непосредственно из журнала транзакций. При нормальной работе CDC будет поддерживать историю только около 5 дней, но очистка запускается из задания агента SQL, которое вы можете отключить. Однако я думаю, что лучшим подходом для вас будет периодический экспорт из таблицы CDC в существующую таблицу аудита (что вы сказали, что, вероятно, не были готовы к этому).

person Richard Cupples    schedule 22.05.2017
comment
Спасибо, что ответили мне. У нас есть несколько вариантов, поэтому мы их оценим. - person Jake; 24.05.2017