Таблицы состояния: машина времени SQL Server 2016
Одна из самых интересных функций, добавленных Microsoft в SQL Server 2016, — таблицы состояния. Они были реализованы в рамках стандарта ISO/ANSI SQL:2011. С помощью таблиц состояния можно увидеть таблицу такой, какой она была в тот или иной момент времени. В сущности, таблицы состояния представляют собой таблицы с системным управлением версиями.
Таблица без системного управления версиями содержит только текущий набор строк. Вы можете направить запрос в таблицу в ее нынешнем виде, но не можете запрашивать предшествующие версии или получить доступ к удаленным строкам. Благодаря таблицам состояния SQL Server может сохранить историю данных в таблице, если включено системное управление версиями. Когда оно включено, SQL Server хранит как текущее, так и предыдущие состояния измененных строк. Во временных таблицах SQL Server есть два явно определенных столбца datetime2, которые называются столбцами периода. Эти столбцы используются для записи периода действия для каждой строки. SQL Server хранит различные версии строк, основываясь на времени, когда пользователь изменил данные.
Таблицы состояния обеспечивают несколько новых возможностей, в том числе:
• Аудит данных. Вы можете использовать таблицы состояния, чтобы увидеть, какие значения имел тот или иной столбец.
• Отслеживание медленно меняющихся измерений. Одно из применений таблиц состояния — отслеживание медленно меняющихся значений, в которых отражаются изменения в конкретном фрагменте данных в течение периода его существования.
• Восстановление испорченных данных после ошибок. С помощью таблиц состояния можно восстанавливать информацию путем извлечения данных из исторической таблицы и наложения их на испорченные данные в основной таблице.
Разработчики Microsoft добавили новые предложения FOR SYSTEM_TIME, что позволяет возвращать данные из временной таблицы для конкретного периода. У предложения FOR SYSTEM_TIME имеется несколько вложенных предложений, с помощью которых можно извлекать различные наборы данных.
• AS OF — возвращает значения для конкретной даты и времени.
• FROM ТО — возвращает диапазон значений между указанными датами и временем.
• BETWEEN AND — возвращает диапазон значений между указанными датами и временем.
• CONTAINED IN (, ) — возвращает диапазон значений на основе значений указанных даты и времени.
• ALL — возвращает все значения.
Требования и ограничения
В SQL Server 2016 существует ряд обязательных требований к таблицам состояния:
• должен быть определен первичный ключ;
• параметру таблицы SYSTEM^ VERSIONING должно быть присвоено значение ON;
• два столбца DATETIME2 должны быть определены для записи начальной и конечной даты.
Существуют также некоторые ограничения:
• нельзя использовать выполняющуюся в памяти систему OLTP;
• таблица состояния и таблица журнала не могут быть типа FILETABLE;
• триггеры INSTEAD OF не разрешены, а триггеры AFTER разрешены только в текущей таблице;
• таблица журнала не может иметь никаких ограничений;
• данные в таблице журнала нельзя изменять.
Назад во времени
С помощью таблиц состояния SQL Server автоматически отслеживает историю данных. Чем же таблицы состояния отличаются от функции записи изменения данных (Change Data Capture, CDC)? Функция CDC предназначена для сбора сведений об изменениях в таблице для внешних процессов, таких как задание извлечения, преобразования и загрузки (ETL). Она не служит для хранения данных в течение длительного времени. Таблицы состояния спроектированы для аудита и могут хранить исторические данные очень долго. Если вы используете таблицы состояния в сочетании с большими таблицами, то полезно рассмотреть вопрос об использовании баз данных типа Stretch или секционированных таблиц, чтобы упростить управление хранилищами данных.
Вы - опытный специалист по SQL Server, но, несмотря на это, получаете за свою работу сущие копейки. И именно поэтому я спешу сообщить вам, что азартные игры игровые автоматы тут вполне могут помочь вам поправить ваше материальное благосостояние. Дело в том, что джекпоты в слотах могут в тысячи раз превышать сумму ставки. Так что, если вам улыбнется удача, то вы в один миг сможете стать миллионером.