Управление отслеживанием изменений (SQL Server)
В этом разделе описывается процесс управления отслеживанием изменений. А также процесс настройки безопасности и определение влияния отслеживания изменений на хранение данных и производительность.
Управление отслеживанием изменений
В следующих разделах перечислены представления каталога, разрешения и параметры, имеющие отношение к управлению отслеживанием изменений.
Представления каталога
Чтобы определить, для каких таблиц и баз данных включено отслеживание изменений, воспользуйтесь следующими представлениями каталога.
Кроме того, представление каталога sys.internal_tables отражает внутренние таблицы, созданные при включении отслеживания изменений для пользовательской таблицы.
Безопасность
Для доступа к данным отслеживания изменений с помощью функций отслеживания измененийучастник должен иметь следующие разрешения.
Разрешение SELECT как минимум для первичных ключевых столбцов отслеживаемой таблицы, для которой выполняется запрос.
Разрешение VIEW CHANGE TRACKING для таблицы, для которой выполняется получение данных отслеживания изменений. Это разрешение необходимо по следующим причинам.
Данные отслеживания изменений включают сведения об удаленных строках, в частности о значениях первичного ключа в них. Участнику может быть предоставлено разрешение SELECT на эту таблицу после удаления конфиденциальных данных. В этом случае участнику нужно иметь возможность доступа к удаленным данным с использованием отслеживания изменения.
Данные отслеживания изменений могут содержать сведения о столбцах, измененных в процессе выполнения инструкций обновления. Участнику можно запретить доступ к столбцу, содержащему конфиденциальные сведения. Но, поскольку доступны данные об отслеживании изменений, участник может определить, что значение столбца изменилось, но не выяснить значение этого столбца.
Основные сведения о затратах на отслеживание изменений
Включение отслеживания изменений для таблицы затрагивает некоторые операции администрирования. В следующей таблице приведен список этих операций и их воздействие, которое нужно учитывать.
Операция | При включении отслеживания изменений |
---|---|
DROP TABLE | Для удаленной таблицы удаляются и все данные отслеживания изменений |
ALTER TABLE DROP CONSTRAINT | Попытка удалить ограничение PRIMARY KEY завершится ошибкой. Перед удалением ограничения PRIMARY KEY отслеживание изменений необходимо отключить. |
ALTER TABLE DROP COLUMN | Если удаляемый столбец является частью первичного ключа, его удаление запрещено независимо от того, включено ли отслеживание изменений. Если удаляемый столбец не является частью первичного ключа, удаление завершится успешно. Однако необходимо сперва оценить эффект этой операции для любого приложения, производящего синхронизацию с этими данными. Если для таблицы включено отслеживание изменений, удаленный столбец может быть восстановлен на основе информации об отслеживании изменений. За обработку удаленного столбца отвечает приложение. |
ALTER TABLE ADD COLUMN | Если в таблицу, для которой включено отслеживание изменений, добавляется новый столбец, то добавление столбца не отслеживается. Отслеживаются только обновления и изменения, сделанные в новом столбце. |
ALTER TABLE ALTER COLUMN | Изменение типов данных непервичных ключевых столбцов не отслеживается. |
ALTER TABLE SWITCH | Переключение секции завершится ошибкой, если для одной или обеих таблиц включено отслеживание изменений. |
DROP INDEX или ALTER INDEX DISABLE | Индекс, связанный с первичным ключом, не может быть удален или отключен. |
TRUNCATE TABLE | Усечение таблицы, для которой включено отслеживание изменений, возможно. Однако удаленные в процессе этой операции строки не отслеживаются, и производится обновление минимально допустимой версии. Когда приложение проверит версию, то проверка покажет, что версия устарела и необходима повторная инициализация. То же самое произошло бы, если бы отслеживание изменений для этой таблицы было отключено, а затем снова включено. |
Использование отслеживания изменений связано с некоторыми дополнительными затратами при операциях DML из-за сведений об отслеживании затрат, сохраняемых в ходе операции.
Влияние на DML
Отслеживание изменений оптимизировано для снижения нагрузки на DML-операции. Постепенное снижение производительности для таблицы, связанной с отслеживанием изменений, сопоставимо с затратами, возникающими при создании и обслуживании индекса для таблицы.
При изменении каждой строки при выполнении операции DML во внутреннюю таблицу отслеживания изменений добавляется строка. Эффект в отношении операций DML зависит от различных факторов, в том числе перечисленных ниже.
Число первичных ключевых столбцов.
Объем изменяемых данных в строке пользовательской таблицы.
Число операций, производимых в рамках транзакции.
Изоляция моментальных снимков, если она используется, оказывает влияние на все операции DML, независимо от того, включено ли отслеживание изменений.
Влияние на хранилище данных
Данные отслеживания изменений хранятся во внутренних таблицах следующих типов.
Внутренняя таблица изменений
Для каждой пользовательской таблицы, в которой отслеживаются изменения, имеется одна внутренняя таблица изменений.
Внутренняя таблица транзакций
Для базы данных имеется одна внутренняя таблица транзакций.
Эти внутренние таблицы следующим образом влияют на требования к хранилищу.
Каждое изменение в любой из строк пользовательской таблицы приводит к добавлению строки во внутреннюю таблицу изменений. Каждая такая строка занимает небольшое фиксированное пространство плюс размер первичных ключевых столбцов. Строка может содержать дополнительные сведения о контексте, задаваемые приложением. Если включено отслеживание изменений столбцов, то каждый измененный столбец занимает 4 байта в таблице отслеживания.
Для каждой зафиксированной транзакции во внутреннюю таблицу транзакций добавляется строка.
Как для других внутренних таблиц, место, занимаемое таблицами отслеживания изменений, можно определить с помощью хранимой процедуры sp_spaceused . Названия внутренних таблиц можно определить с помощью представления каталога sys.internal_tables , как показано в следующем примере.
sp_spaceused 'sys.change_tracking_309576141'
sp_spaceused 'sys.syscommittab'
См. также:
Отслеживание измененных данных (SQL Server)
ALTER TABLE (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)