Поделиться через


Управление отслеживанием изменений (SQL Server)

В этом разделе описывается управление отслеживанием изменений. В нем также описывается настройка безопасности и определение последствий хранения и производительности при использовании отслеживания изменений.

Управление отслеживанием изменений

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

Представления каталога

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

Кроме того, в представлении каталога sys.internal_tables перечислены внутренние таблицы, созданные при включении отслеживания изменений для пользовательской таблицы.

Безопасность

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

  • Необходимо иметь разрешение SELECT хотя бы на столбцы первичного ключа в таблице, отслеживающей изменения, чтобы выполнять запросы к этой таблице.

  • Разрешение на использование функции VIEW CHANGE TRACKING для таблицы, изменения в которой отслеживаются. Разрешение VIEW CHANGE TRACKING требуется по следующим причинам:

    • Записи отслеживания изменений включают сведения о строках, которые были удалены, в частности, значения первичного ключа строк, которые были удалены. Пользователь мог получить разрешение SELECT для таблицы с отслеживанием изменений после удаления некоторых конфиденциальных данных. В этом случае вы не хотите, чтобы субъект мог получить доступ к этой удаленной информации с помощью отслеживания изменений.

    • Сведения об отслеживании изменений могут хранить сведения о том, какие столбцы были изменены операциями обновления. Доступ к столбцу, содержащему конфиденциальную информацию, может быть запрещен руководителю. Тем не менее, поскольку доступны сведения об отслеживании изменений, субъект может определить, что значение столбца было обновлено, но субъект не может определить значение столбца.

Общие сведения о затратах на отслеживание изменений

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

Операция Если отслеживание изменений включено
УДАЛИТЬ ТАБЛИЦУ Все сведения об отслеживании изменений для удаленной таблицы удаляются.
ОГРАНИЧЕНИЕ ALTER TABLE DROP Попытка удалить ограничение PRIMARY KEY завершится ошибкой. Перед удалением ограничения PRIMARY KEY необходимо отключить отслеживание изменений.
ИЗМЕНИТЬ ТАБЛИЦУ УДАЛИТЬ СТОЛБЕЦ Если удаленный столбец является частью первичного ключа, удаление столбца запрещено независимо от отслеживания изменений.

Если удаленный столбец не является частью первичного ключа, удаление столбца завершается успешно. Однако сначала следует понимать влияние на любое приложение, которое синхронизирует эти данные. Если для таблицы включено отслеживание изменений столбцов, удаленный столбец может быть возвращен как часть сведений об отслеживании изменений. Приложение несет ответственность за обработку удаленного столбца.
Изменить таблицу, добавив столбец (ALTER TABLE ADD COLUMN) Если новый столбец добавляется в измененную отслеживаемую таблицу, добавление столбца не отслеживается. Отслеживаются только обновления и изменения, внесенные в новый столбец.
ALTER TABLE ALTER COLUMN Изменения типа данных столбцов, не являющихся первичными ключами, не отслеживаются.
ALTER TABLE SWITCH Переключение раздела завершается ошибкой, если для одной или обеих таблиц включено отслеживание изменений.
"DROP INDEX" или "ALTER INDEX DISABLE" Индекс, который применяет первичный ключ, не может быть удален или отключен.
ОЧИСТИТЬ ТАБЛИЦУ Усечение таблицы можно произвести в таблице, где включено отслеживание изменений. Однако строки, удаленные операцией, не отслеживаются, а минимальная допустимая версия обновляется. Когда приложение проверяет свою версию, проверка указывает, что версия слишком старая и требуется повторная инициализация. Это то же самое, что отключение отслеживания изменений, а затем его повторное включение для таблицы.

Использование отслеживания изменений добавляет некоторые расходы на операции DML из-за сведений об отслеживании изменений, хранящихся в рамках операции.

Влияние на DML

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

Для каждой строки, измененной операцией DML, в внутреннюю таблицу отслеживания изменений добавляется строка. Влияние этого относительно операции DML зависит от различных факторов, таких как:

  • Количество столбцов первичного ключа

  • Объем измененных данных в строке таблицы пользователя

  • Количество операций, выполняемых в транзакции

Изоляция моментальных снимков, при использовании, также влияет на производительность всех операций DML, включено ли отслеживание изменений или нет.

Влияние на хранилище

Данные отслеживания изменений хранятся в следующих типах внутренних таблиц:

  • Внутренняя таблица изменений

    Существует одна внутренняя таблица изменений для каждой пользовательской таблицы с включенным отслеживанием изменений.

  • Внутренняя таблица транзакций

    Для базы данных существует одна внутренняя таблица транзакций.

Эти внутренние таблицы влияют на требования к хранилищу следующим образом:

  • Для каждого изменения каждой строки в пользовательской таблице добавляется строка во внутреннюю таблицу изменений. Эта строка имеет небольшую фиксированную нагрузку, а также переменную нагрузку, равную размеру столбцов первичного ключа. Строка может содержать необязательные сведения о контексте, заданные приложением. Если отслеживание столбцов включено, для каждого измененного столбца требуется 4 байта в таблице отслеживания.

  • Для каждой зафиксированной транзакции строка добавляется в внутреннюю таблицу транзакций.

Как и в других внутренних таблицах, можно определить пространство, используемое для таблиц отслеживания изменений с помощью хранимой процедуры sp_spaceused . Имена внутренних таблиц можно получить с помощью представления каталога sys.internal_tables , как показано в следующем примере.

sp_spaceused 'sys.change_tracking_309576141'  
sp_spaceused 'sys.syscommittab'  

См. также

Отслеживание изменений данных (SQL Server)
ИЗМЕНИТЬ ТАБЛИЦУ (Transact-SQL)
Свойства базы данных (страница "Отслеживание изменений")
Параметры ALTER DATABASE SET (Transact-SQL)
sys.change_tracking_databases (Transact-SQL)
sys.change_tracking_tables (Transact-SQL)
Отслеживание изменений данных (SQL Server)
Сведения об отслеживании изменений (SQL Server)
Работа с измененными данными (SQL Server)