Включение и отключение отслеживания измененных данных
Область применения: SQL Server Управляемый экземпляр SQL Azure
В этой статье описывается включение и отключение записи измененных данных (CDC) для базы данных и таблицы для SQL Server и Управляемый экземпляр SQL Azure. Сведения о База данных SQL Azure см. в разделе CDC с База данных SQL Azure.
Разрешения
Разрешения sysadmin
необходимы для включения или отключения записи измененных данных в SQL Server и Управляемый экземпляр SQL Azure.
Включение для базы данных
Прежде чем создать экземпляр записи для отдельных таблиц, необходимо включить запись измененных данных для базы данных.
Чтобы включить запись измененных данных, запустите хранимую процедуру sys.sp_cdc_enable_db (Transact-SQL) в контексте базы данных. Чтобы определить, включена ли база данных CDC, запросите столбец is_cdc_enabled в представлении sys.databases
каталога.
Если база данных включена, для базы данных создаются схемы cdc, пользователя cdc, таблицы метаданных и другие системные объекты. Схема cdc содержит таблицы метаданных для системы отслеживания измененных данных; после того как для исходных таблиц будет включено отслеживание измененных данных, в этой схеме также будут храниться отдельные таблицы изменений, служащие репозиторием информации об изменениях. Схема cdc также содержит связанные системные функции, используемые для выполнения запросов для получения информации об изменениях.
Система отслеживания измененных данных требует монопольного использования схемы cdc и пользователя cdc . Если в настоящее время в базе данных существует схема или пользователь базы данных с именем cdc , запись измененных данных не может быть включена для базы данных, пока схема не будет удалена или переименована пользователем.
-- ====
-- Enable Database for CDC
-- ====
USE MyDB
GO
EXEC sys.sp_cdc_enable_db
GO
Примечание.
Чтобы найти шаблоны, связанные с CDC, в SQL Server Management Studio, перейдите в представление, выберите обозреватель шаблонов и выберите шаблоны SQL Server. Запись измененных данных — это вложенная папка, содержащая шаблоны
Отключение для базы данных
Используйте sys.sp_cdc_disable_db (Transact-SQL) в контексте базы данных, чтобы отключить запись измененных данных для базы данных. Не обязательно отключить CDC для отдельных таблиц, прежде чем отключить CDC для базы данных. Отключение CDC для базы данных удаляет все связанные метаданные отслеживания изменений, включая пользователя cdc , схему и задания отслеживания измененных данных. Однако все роли gating, созданные CDC, не будут удалены автоматически и должны быть явно удалены. Чтобы определить, включена ли база данных CDC, запросите столбец is_cdc_enabled в представлении sys.databases
каталога.
Если база данных с поддержкой CDC удалена, задания отслеживания измененных данных автоматически удаляются.
-- Disable Database for change data capture
USE MyDB
GO
EXEC sys.sp_cdc_disable_db
GO
Включение для таблицы
После включения записи измененных данных члены предопределенной роли базы данных db_owner могут создать экземпляр записи для отдельных исходных таблиц с помощью хранимой процедуры sys.sp_cdc_enable_table
. Чтобы определить, была ли включена исходная таблица для отслеживания измененных данных, запросите значение столбца is_tracked_by_cdc в представлении каталога sys.tables
.
Внимание
Дополнительные сведения о аргументах хранимой процедуры см. в sys.sp_cdc_enable_table
sys.sp_cdc_enable_table (Transact-SQL).
При создании экземпляра отслеживания можно указать следующие параметры.
Столбцы исходной таблицы, которые необходимо отслеживать.
По умолчанию все столбцы исходной таблицы определяются как отслеживаемые. Если необходимо отслеживать только подмножество столбцов, например по соображениям конфиденциальности или производительности, используйте параметр @captured_column_list для указания подмножества столбцов.
Файловая группа, в которой будет содержаться таблица изменений.
По умолчанию таблица изменений расположена в файловой группе по умолчанию для базы данных. Если владельцы базы данных хотят управлять расположением отдельных таблиц изменений, то они могут использовать параметр @filegroup_name, чтобы указать файловую группу для таблицы изменений, с которой будет связан экземпляр системы отслеживания. Именованная файловая группа уже должна существовать. Как правило, рекомендуется поместить таблицы изменений в файловую группу отдельно от исходных таблиц. Пример использования параметра @filegroup_name см. в шаблоне Включение таблицы, которая указывает параметр файловой группы .
-- Enable CDC for a table specifying filegroup
USE MyDB
GO
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@role_name = N'MyRole',
@filegroup_name = N'MyDB_CT',
@supports_net_changes = 1
GO
Роль для управления доступом к таблице изменений.
Именованные роли используются для управления доступом к информации об изменениях. Указана может быть существующая предопределенная роль сервера или роль базы данных. Если указанная роль еще не существует, роль базы данных этого имени создается автоматически. Пользователи должны иметь разрешение SELECT на все захваченные столбцы исходной таблицы. Кроме того, при указании роли пользователи, не являющиеся членами роли sysadmin или db_owner , также должны быть членами указанной роли.
Если вы не хотите использовать роль gating, явно задайте для параметра @role_name значение NULL. Пример включения таблицы без шлюзовой роли см. в шаблоне Enable a Table Without Using a Gating Role .
-- Enable CDC for a table using a gating role option
USE MyDB
GO
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@role_name = NULL,
@supports_net_changes = 1
GO
Функция для запроса суммарных изменений
Экземпляр записи всегда включает табличную функцию (TVF) для возврата всех записей таблицы изменений, которые произошли в течение определенного интервала. Эта функция называется путем добавления имени экземпляра записи в "cdc.fn_cdc_get_all_changes_". Дополнительные сведения см. в статье cdc.fn_cdc_get_all_changes_<capture_instance> (Transact-SQL).
Если параметр @supports_net_changes имеет значение 1, то для экземпляра системы отслеживания также будет создаваться функция суммарных изменений. Эта функция возвращает только одно изменение для каждой отдельной строки, измененной в течение интервала, указанного в вызове. Дополнительные сведения см. в статье cdc.fn_cdc_get_net_changes_<capture_instance> (Transact-SQL).
Для поддержки запросов суммарных изменений исходная таблица должна иметь первичный ключ или уникальный индекс для идентификации строк. При использовании уникального индекса его имя должно быть указано в параметре @index_name . Для отслеживания столбцов, определенных в первичном ключе или в уникальном индексе, они должны быть включены в список исходных столбцов.
Пример создания экземпляра системы отслеживания с обеими функциями см. в шаблоне Enable a Table for All and Net Changes Queries .
-- Enable CDC for a table for all and net changes queries
USE MyDB
GO
EXEC sys.sp_cdc_enable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@role_name = N'MyRole',
@supports_net_changes = 1
GO
Примечание.
Если запись измененных данных включена в таблице с существующим первичным ключом, а параметр @index_name не используется для определения альтернативного уникального индекса, функция отслеживания измененных данных использует первичный ключ. Последующие изменения первичного ключа не допускаются без первого отключения записи измененных данных для таблицы. Это справедливо независимо от того, была ли запрошена поддержка запросов суммарных изменений при настройке системы отслеживания измененных данных. Если во время включения таблицы для отслеживания измененных данных в ней не существовало первичного ключа, то, если впоследствии он будет добавлен, он будет пропускаться системой отслеживания измененных данных. Поскольку первичный ключ, созданный после включения таблицы, не будет использоваться системой отслеживания измененных данных, то данный ключ и ключевые столбцы могут быть удалены без ограничений.
Отключение для таблицы
Члены предопределенной роли базы данных db_owner могут удалить экземпляр записи для отдельных исходных таблиц с помощью хранимой процедурыsys.sp_cdc_disable_table
. Чтобы определить, включена ли в настоящее время для исходной таблицы система отслеживания измененных данных, рассмотрите столбец is_tracked_by_cdc
в представлении каталога sys.tables
. Если после того, как имело место отключение, отсутствуют какие-либо таблицы, включенные для базы данных, также происходит удаление заданий отслеживания измененных данных.
Если удаляется информация об изменениях в таблице с включенным отслеживанием измененных данных, то автоматически удаляются метаданные системы отслеживания измененных данных, которые связаны с этой таблицей.
Пример отключения таблицы см. в шаблоне отключения экземпляра системы отслеживания для таблицы.
-- Disable a Capture Instance for a table
USE MyDB
GO
EXEC sys.sp_cdc_disable_table
@source_schema = N'dbo',
@source_name = N'MyTable',
@capture_instance = N'dbo_MyTable'
GO