Бөлісу құралы:


Соображения и ограничения реестра

Применимо к: SQL Server 2022 (16.x) и более поздних версий База данных Azure SQLУправляемый экземпляр Azure SQL

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

Общие рекомендации и ограничения

При работе с реестром нужно принимать во внимание указанное ниже.

  • База данных реестра является базой данных с включенным свойством реестра, которую невозможно преобразовать в обычную базу данных с выключенным свойством реестра.
  • Автоматическое создание и хранение дайджестов баз данных доступно в Базе данных SQL Azure и SQL Server 2022. В SQL Server можно настроить автоматическое дайджест-хранилище с помощью ALTER DATABASE SCOPED CONFIGURATION. Дополнительные сведения см. в части Включение автоматического хранилища дайджестов.
  • Автоматическое управление дайджестами с помощью реестровых таблиц и неизменяемых двоичных объектов в службе Azure Storage не позволяет пользователям использовать учетные записи локально резервируемого хранилища (LRS).
  • При создании базы данных реестра все новые таблицы, созданные по умолчанию (без указания APPEND_ONLY = ON предложения) в базе данных являются обновляемыми таблицами реестра. Чтобы создать таблицы только для добавления данных, используйте APPEND_ONLY = ON клауза в инструкциях CREATE TABLE (Transact-SQL).
  • Транзакция способна обновлять до 200 таблиц реестра.

Учет факторов и ограничения для таблицы бухгалтерского учета

  • Имеющиеся таблицы в базе данных, которые не являются учетными таблицами, нельзя преобразовать в учетные таблицы. Дополнительные сведения см. на странице Перенос данных из обычных таблиц в таблицы реестра.
  • Созданная таблица реестра не может быть преобразована в таблицу, которая не является таблицей реестра.
  • Удаление старых данных из таблиц реестра только для добавления или таблицы истории обновляемых таблиц реестра не поддерживается.
  • TRUNCATE TABLE не поддерживается.
  • При создании обновляемой таблицы реестра в нее добавляется четыре ВСЕГДА СОЗДАВАЕМЫХ столбца. В случае таблицы реестра только для добавления в нее добавляются два столбца. Эти новые столбцы создаются с учетом максимального поддерживаемого количества столбцов в Базе данных SQL Azure (1,024).
  • Таблицы в памяти не поддерживаются.
  • Наборы разреженных столбцов не поддерживаются.
  • Разделы SWITCH IN/OUT не поддерживаются.
  • DBCC CLONEDATABASE не поддерживается.
  • Таблицы реестра не могут иметь полнотекстовых индексов.
  • Таблицы реестра не могут быть таблицей графов.
  • Таблицы журнала не могут быть таблицами FileTable.
  • В таблицах реестра не может быть некластеризованного индекса rowstore, если в них есть кластеризованный индекс columnstore.
  • Отслеживание изменений запрещено в таблице журнала, но разрешено в таблицах реестра.
  • Запись измененных данных не разрешена в таблице журнала, но разрешена в таблицах реестра.
  • Репликация транзакций не поддерживается для таблиц реестра.
  • Зеркальное отображение базы данных не поддерживается.
  • Azure Synapse Link поддерживается, но только для таблицы реестра, а не для таблицы журнала.
  • Измените путь хэша вручную после стандартного восстановления резервной копии базы данных на Управляемый экземпляр Azure SQL.
  • Измените путь дайджеста вручную после создания ссылки на Управляемый экземпляр SQL Azure.
  • Синхронизация данных SQL не поддерживается в таблицах реестра.

Неподдерживаемые типы данных

  • XML
  • SqlVariant
  • Определяемый пользователем тип данных
  • FILESTREAM
  • Вектор

Ограничения темпоральной таблицы

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

  • Если при создании исторической таблицы указывается ее имя, следует указать имя схемы и таблицы, а также имя представления журналирования.
  • По умолчанию таблица истории сжимается с использованием компрессии PAGE.
  • Если текущая таблица секционирована, таблица журнала создается в файловой группе по умолчанию, так как конфигурация секционирования не реплицируется автоматически из текущей таблицы в таблицу журнала.
  • Темпоральные таблицы и таблицы журнала не могут быть таблицами FILETABLE и могут содержать столбцы любого поддерживаемого типа данных, кроме FILESTREAM. FILETABLE и FILESTREAM позволяют управлять данными за пределами SQL Server, поэтому управление версиями системы не гарантируется.
  • Таблицу узлов или граничную таблицу невозможно создать как темпоральную или преобразовать в нее. Graph не поддерживается в реестре.
  • Хотя временные таблицы поддерживают типы данных больших двоичных объектов, такие как (n)varchar(max), varbinary(max), (n)text и image, они приведут к значительным затратам на хранилище и будут иметь последствия для производительности из-за их размера. Таким образом, при проектировании системы следует использовать эти типы данных с осторожностью.
  • Таблицу журнала нужно создавать в той же базе данных, в которой создавалась текущая таблица. Запросы с использованием временных данных через Linked Server не поддерживаются.
  • Таблица истории не может иметь ограничений (первичного ключа, внешнего ключа, ограничений таблиц или столбцов).
  • Параметр ONLINE (WITH (ONLINE = ON) не влияет на ALTER TABLE ALTER COLUMN при использовании системно-версионированной темпоральной таблицы. ALTER COLUMN не выполняется в оперативном режиме независимо от того, какое значение указано для параметра ONLINE.
  • Операторы INSERT и UPDATE не могут ссылаться на столбцы GENERATED ALWAYS. Попытки вставки значений непосредственно в эти столбцы блокируются.
  • UPDATETEXT и WRITETEXT не поддерживаются.
  • Триггеры в исторической таблице не допускаются.
  • Использование технологий репликации ограничено:
    • Всегда включено — полностью поддерживается.
    • Моментальный снимок, слияние и репликация транзакций не поддерживаются для темпоральных таблиц
  • Таблицу истории невозможно настроить в качестве текущей в цепочке исторических таблиц.
  • Следующие объекты или свойства не реплицируются из текущей таблицы в таблицу журнала при создании таблицы журнала:
    • определение периода;
    • определение идентичности
    • Индексы
    • Статистика
    • Ограничения проверок
    • Триггеры
    • конфигурация секционирования;
    • Разрешения
    • предикаты безопасности на уровне строк.

Рассмотрение изменений в схеме

Добавление столбцов

Поддерживается возможность добавления столбцов, допускающих значение NULL. Добавление столбцов, не допускающих значение NULL, не поддерживается. Реестр предназначен для пропуска значений NULL при вычислении хэша версии строки. На основе этого при добавлении столбца, допускающего значение NULL, реестр изменяет схему таблиц реестра и журналов для включения нового столбца, однако это не влияет на хэши существующих строк. Добавление столбцов в таблицы реестра фиксируется в sys.ledger_column_history.

Удаление столбцов и таблиц

Как правило, при удалении столбца или таблицы полностью удаляются базовые данные, что принципиально несовместимо с функциями реестра, требующими неизменяемости данных. Вместо удаления данных реестр просто переименовывает удаляемые объекты, чтобы логически удалить их из пользовательской схемы, но оставить физические экземпляры в базе данных. Все удаленные столбцы также скрыты из схемы таблицы реестра, поэтому они невидимы для пользовательского приложения. Однако данные таких удаленных объектов остаются доступными для процесса проверки реестра и позволяют пользователям проверять любые исторические данные с помощью соответствующих представлений реестра. Удаление столбцов в таблице реестра захватывается в sys.ledger_column_history. Удаление таблицы реестра регистрируется в sys.ledger_table_history. Таблицы реестра, которые помечены как удалённые, и их зависимые объекты отмечаются как удалённые в представлениях системного каталога и переименовываются.

  • Удаленные таблицы реестра помечаются путем установки is_dropped_ledger_table в sys.tables и переименовываются в следующем формате: MSSQL_DroppedLedgerTable_<dropped_ledger_table_name>_<GUID>.
  • Удаленные таблицы журнала для обновляемых таблиц реестра переименовываются в следующем формате: MSSQL_DroppedLedgerHistory_<dropped_history_table_name>_<GUID>.
  • Удаленные представления реестра помечаются как удаленные путем установки is_dropped_ledger_view в sys.views и переименовываются по следующему формату: MSSQL_DroppedLedgerView_<dropped_ledger_view_name>_<GUID>.

Примечание.

Имя удаленных таблиц реестра, таблиц журнала и представлений реестра может быть усечено, если длина переименованной таблицы или представления превышает 128 символов.

Изменение столбцов

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

  • изменение допустимости значений NULL;
  • системы сравнения для строк Юникода
  • длину столбцов переменной длины.

Однако любые операции, которые могут повлиять на формат имеющихся данных, например изменение типа данных, не поддерживаются.