9

Долгое время мы хотели создать систему управления случаями, когда история никогда не теряется. Когда происходит изменение, мы хотим записать это изменение, но имеем возможность вернуться в любой момент времени и посмотреть, как выглядит запись. Я хотел задать этот вопрос в сообществе Stack Overflow, чтобы узнать, каковы некоторые способы сделать это, существует ли уже существующая технология для достижения этой цели?Способы ведения истории данных в базе данных SQL Server 2008

ответ

8

Да, эта технология определенно существует - это немного попытка реализовать ее и сделать это правильно.

Что вы ищете называется временных баз данных - см некоторые ресурсы:

3

Я не конечно, как временная база данных, как marc_s упоминалось работает, но если вы используете SQL Server 2008 или более поздней версии, вы можете воспользоваться помощью встроенного в Capture Data Change (CDC) функциональность:

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

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

  • включить CDC,
  • создать таблицу истории, используя ту же схему, как исходная таблица, но добавив еще пару колонок для хранения информации строки версии (так же, как slowly-changing dimension в реляционном базы данных OLAP), и
  • создать работу, которая будет периодически опрашивают функции CDC для изменения с момента его последней загрузки и толкает их к столу истории

затем вы можете использовать таблицу истории в запросах, присоединившись к нему, как обычно, но с дополнительный предикат (ы), чтобы получить запись «как» любой даты, которую вы хотите.

+1

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

+0

Это правда; хотя, в зависимости от количества столбцов, это может потребовать много триггеров. В любом случае можно программировать программно, поэтому сложность не должна быть слишком большой проблемой. Оба метода имеют свои плюсы и минусы, и какой из них прав, во многом зависит от ваших требований. Вот хорошее обсуждение: http: // sqlserverplanet.com/design/triggers-service-broker-cdc-or-change-tracking/ – utexaspunk

+0

Я использую отдельные таблицы + Триггеры для управления историей записи и двумя другими таблицами для записи, когда и кто внес изменения в какую запись. +1 для триггеров! – Achilles

Смежные вопросы