Подтвердить что ты не робот

SQL Server 2008 изменяет сбор данных и триггеры в контрольном журнале

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

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

Любой совет будет полезен.

Изменить: - http://technet.microsoft.com/en-us/magazine/2008.11.sql.aspx?pr=blog

4b9b3361

Ответ 1

Я использую CDC в своем приложении WPF. Работает очень хорошо, но я обнаружил три проблемы:

  • Вам часто нужно резервировать таблицы изменений (я использую оператор MERGE для добавления записей в исторические таблицы). Потому что запись остается в таблице изменений только около 2-3 дней, как я узнал. Не забудьте создать резервную копию таблицы cdc.lsn_time_mapping.
  • Вы не можете обрезать таблицы с включенным CDC.
  • Проблема с отключением cdc и повторным подключением (должна быть решена в новом пакете обновлений, как указано в MS). У меня есть эта проблема только один раз, так что это не так раздражает.

    http://blogs.technet.com/b/claudia_silva/archive/2010/06/04/cdc-cdc-hangs-when-i-try-to-disable-it.aspx

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

Ответ 2

Всего в SQL Server найдено четыре решения: далее:

  • Отслеживание изменений SQL Server [CTC]
  • SQL Server Change Data Capture [CDC]
  • Аудит аудита SQL Server с триггерами [Generic - Manual]
  • Аудит SQL Server

Отслеживание изменений SQL Server [CTC]

Pros

  • Работает со всеми выпусками SQL Server
  • DML Триггеры и дополнительные таблицы не требуются, поскольку одна временная таблица создается CTC с именем CHANGETABLE
  • Минимальные затраты на дисковое пространство
  • Пакетные функции, доступные для запроса данных
  • Конфигурируемая политика хранения и автоматическая очистка CHANGETABLE, также автоматическая очистка может быть отключена при необходимости
  • Не нужно обращаться к LDF файлу этой конкретной базы данных
  • Очистка/усечение возможно при включении CTC

против

  • Необходимо включить как в базе данных, так и в каждой требуемой таблице
  • Механизм синхронного отслеживания
  • Данные отслеживания всех таблиц хранятся в одной временной таблице с именем CHANGETABLE
  • Невозможно получить исторические данные, а также не дать точную информацию о предыдущих и новые данные в столбцах отслеживания
  • Проблема с композитными ключами
  • Требуется первичный ключ
  • Поддерживает только текущее состояние работы w.r.t данных я = Вставка, U = Обновить, D = Удалить
  • Пользовательская группа SQL Server 'sysadmin' может включать только CTC

SQL Server Change Data Capture [CDC]

Pros

  • Эти функции предоставляют пошаговое решение, после включения уровня базы данных.
  • Эффективный и быстрый механизм асинхронного отслеживания
  • Можно получить исторические данные, а также дать точную информацию о предыдущие и новые данные в теневой таблице
  • Триггеры DML не требуются, так как новая таблица создается CDC с префикс 'dbo_' и суффикс '_CT' для каждой таблицы.
  • Все таблицы и функции, относящиеся к CDC, будут передаваться с помощью 'cdc' схема.
  • Все хранимые процедуры, связанные с CDC, будут передаваться с помощью "sys" или Схема 'cdc'

против

  • Информация о пользователе, внесшем изменение, не записывается, для что вам может понадобиться создать несколько дополнительных столбцов, существующих в каждой таблице требуется отслеживать, столбцы выглядят следующим образом:

    CreatedAt datetime default (getdate()),  CreatedBy nvarchar (100) default (suser_sname()),  Обновлено по умолчанию datetime (getdate()),  Обновлено: nvarchar (100) default (suser_sname())

  • Агент SQL Server должен быть включен для CDC, также CDC не может работать правильно, когда служба Database Engine или агент SQL Server служба работает под учетной записью NETWORK SERVICE.
  • Необходимо включить как в базе данных, так и в каждой требуемой таблице
  • Работает только с выпуском Enterprise, Developer и DataCenter
  • Необходимо получить доступ к LDF файлу этой конкретной базы данных
  • Агент SQL Server должен быть включен для захвата данных.
  • Очистка/усечение невозможно на главной таблице при включении CDC, Автоматическая очистка теневой таблицы не может быть отключена после включения.
  • Для журнала транзакций (файл LDF) требуется дополнительное пространство
  • Группа пользователей Db 'db_owner' или роль сервера 'sysadmin' может только включить CDC
  • Существуют ограничения при отслеживании изменений в столбцах, содержащих XML, Sparse, Timestamp, CLOB и BLOB.
  • Когда у вызывающего абонента нет разрешения на просмотр исходных данных, функция возвращает ошибку 229

Аудит трейла с триггерами [Общее решение]

Pros

  • Можно получить исторические данные, а также дать точную информацию о предыдущие и новые данные в теневой таблице
  • Хорошо управляемый w.r.t выбор столбцов, операций [I = Вставка, U = Обновить, D = Удалить]
  • Процесс может быть автоматизирован из-за сложности, процесса аудита может управляться какой-то рутиной или службой.
  • Очистка/усечение, а также автоматическая очистка также могут быть автоматизированы.

против

  • Точная копия таблицы с некоторыми дополнительными столбцами требуется как Тень Таблицы
  • Комплексный процесс разработки w.r.t, управления данными и очистки.
  • Производительность попадает, когда данные становятся огромными в теневых таблицах, Purging - это требуется
  • Занимает много времени, чтобы автоматизировать процесс, учитывая все важные аспекты надежности, безопасности и производительности. Который в родном решение, DB Engine по умолчанию.