Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: SQL Server 2016 (13.x) и более поздних версий
базы данных
SQL Azure Для Управляемого экземпляра
SQL Azureв Предварительной версии Microsoft Fabric
Из-за характера системного управления версиями существуют некоторые рекомендации и ограничения, которые следует учитывать при работе с темпоральными таблицами:
Темпоральная таблица должна иметь первичный ключ, чтобы сопоставить записи между текущей таблицей и таблицей журнала. В таблице журнала не может быть определен первичный ключ.
SYSTEM_TIMEСтолбцы периода, используемые для записиValidFromиValidToзначения, должны быть определены с типом данных datetime2.Темпоральный синтаксис работает с таблицами или представлениями, которые хранятся локально в базе данных. С удаленными объектами, такими как таблицы на связанном сервере или внешних таблицах, нельзя использовать
FORпредложение или предикаты периодов непосредственно в запросе.Если при создании таблицы журнала указывается ее имя, следует также указать имя схемы и таблицы.
По умолчанию таблица журнала сжимается с использованием метода
PAGE.Если текущая таблица секционирована, таблица журнала создается в файловой группе по умолчанию, так как конфигурация секционирования не реплицируется автоматически из текущей таблицы в таблицу журнала.
Таблицы темпоральных и журналов не могут использовать FileTable или FILESTREAM. FileTable и FILESTREAM позволяют управлять данными за пределами SQL Server, поэтому системное управление версиями не может быть гарантировано.
Таблицу узлов или граничную таблицу невозможно создать как темпоральную или преобразовать в нее.
Хотя темпоральные таблицы поддерживают типы данных BLOB-объектов, такие как (n)varchar(max), varbinary(max), (n)text и image, они несут значительные затраты на хранение и влияют на производительность из-за их размера. Таким образом, при проектировании системы следует использовать эти типы данных с осторожностью.
Таблицу журнала нужно создавать в той же базе данных, в которой создавалась текущая таблица. Темпоральные запросы по связанным серверам не поддерживаются.
Таблица журнала не может содержать ограничения (первичный ключ, внешний ключ, таблица или ограничения столбцов).
Индексированные представления не поддерживаются поверх темпоральных запросов (запросов, использующих
FOR SYSTEM_TIMEпредложение).Параметр Online (
WITH (ONLINE = ON) не влияет наALTER TABLE ALTER COLUMNсистемную темпоральную таблицу с версиями.ALTERСтолбец не выполняется в виде оперативной операции, независимо от того, какое значение было указано дляONLINEпараметра.INSERTиUPDATEоператоры не могут ссылаться наSYSTEM_TIMEстолбцы периода. Попытки вставки значений непосредственно в эти столбцы блокируются.TRUNCATE TABLEне поддерживаетсяSYSTEM_VERSIONINGв то время какON.Запрещено изменять данные в таблице журнала напрямую.
-
ON DELETE CASCADEиON UPDATE CASCADEне разрешены в текущей таблице. Другими словами, если темпоральная таблица ссылается на таблицу в связи внешнего ключа (соответствующаяparent_object_idsys.foreign_keyв )CASCADEпараметры не допускаются. Чтобы обойти это ограничение, используйте логику приложения или после триггеров для поддержания согласованности при удалении в таблице первичного ключа (соответствующейreferenced_object_id).sys.foreign_keyЕсли таблица первичного ключа является темпоральной, а ссылочная таблица — нет, это ограничение отсутствует.
INSTEAD OFТриггеры не разрешены в текущей или таблице журнала, чтобы избежать недопустимой логики DML.AFTERтриггеры разрешены только в текущей таблице. Эти триггеры блокируются в таблице журнала, чтобы избежать недопустимой логики DML.Использование технологий репликации ограничено.
Группы доступности: полностью поддерживается
Отслеживание изменений и отслеживания изменений: поддерживается только в текущей таблице
Моментальный снимок и репликация транзакций: поддерживается только для одного издателя без включения темпоральных данных, а один подписчик с темпоральным включенным. Использование нескольких подписчиков не поддерживается из-за зависимости от локальных системных часов, что может привести к несогласованным темпоральным данным. В этом случае издатель используется для рабочей нагрузки OLTP, а подписчик служит для разгрузки отчетов (включая
AS OFзапросы). При запуске агент распространения открывает транзакцию, которая удерживается открытой до тех пор, пока агент распространения не остановится.ValidFromиValidToзаполняются временем начала первой транзакции, запускаемой агентом распространителя. Возможно, предпочтительнее запускать агент распространителя по расписанию, а не поведение по умолчанию для его непрерывного выполнения, еслиValidFromValidToвремя, близкое к текущему системному времени, важно для приложения или организации. Дополнительные сведения см . в сценариях использования темпоральных таблиц.Репликации слиянием — не поддерживается в темпоральных таблицах.
Обычные запросы влияют только на данные в текущей таблице. Чтобы запросить данные в таблице журнала, необходимо использовать темпоральный запрос. Дополнительные сведения см. в статье "Запрос данных" в системной темпоральной таблице.
Оптимальная стратегия индексирования включает в себя индекс хранилища кластеризованных столбцов и (или) индекс хранилища строк B-дерева в текущей таблице, а также кластеризованный индекс columnstore в таблице журнала для оптимального размера хранилища и производительности. Если вы создаете или используете собственную таблицу журнала, настоятельно рекомендуется создать этот тип индекса, состоящий из столбцов периодов, начиная с конца столбца периода. Этот индекс ускоряет темпоральные запросы и ускоряет запросы, которые являются частью проверки согласованности данных. Таблица журнала по умолчанию содержит кластеризованный индекс rowstore, созданный на основе столбцов периода (с конца или с начала). Мы советуем использовать хотя бы некластеризованный индекс rowstore.
При создании таблицы журнала из текущей таблицы в нее не реплицируются следующие объекты и свойства:
- Period definition
- Identity definition
- Indexes
- Statistics
- Check constraints
- Triggers
- Partitioning configuration
- Permissions
- предикаты безопасности на уровне строк.
Таблицу журнала невозможно настроить в качестве текущей в цепочке таблиц журнала.
Note
В документации термин B-tree обычно используется в ссылке на индексы. В индексах rowstore ядро СУБД реализует дерево B+. Это не относится к индексам columnstore или индексам в таблицах, оптимизированных для памяти. Дополнительные сведения см. в руководстве по архитектуре и проектированию индексов SQL Sql Server и Azure.
Related content
- Temporal tables
- Начало работы с системными темпоральными таблицами
- Проверки согласованности систем темпоральных таблиц
- Секционирование с темпоральными таблицами
- Безопасность темпоральной таблицы
- Управление хранением исторических данных в системных темпоральных таблицах
- Системные темпоральные таблицы с оптимизированными для памяти таблицами
- Представления и функции темпоральных метаданных таблицы