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


Отслеживание изменений данных (CDC) с помощью Azure SQL Database

Применимо к: База данных SQL Azure

Из этой статьи вы узнаете, как в базе данных SQL Azure реализована функция захвата изменений данных (CDC) для фиксации изменений в таблицах и строках. Дополнительные сведения о функции CDC, в том числе о том, как она реализована в SQL Server и Управляемом экземпляре SQL Azure, см. в Что такое запись измененных данных (CDC)?

Обзор

В базе данных SQL Azure планировщик захвата изменённых данных заменяет задания Агента SQL Server, которые захватывают и очищают изменённые данные для исходных таблиц. Планировщик выполняет процессы захвата и очистки автоматически в контексте базы данных, обеспечивая надежность и производительность без внешних зависимостей. Пользователи сохраняют возможность вручную инициировать процессы отслеживания и очистки по мере необходимости.

Хорошим примером потребителя данных, используемого этой технологией, является приложение извлечения, преобразования и загрузки (ETL). Приложение ETL постепенно загружает измененные данные из исходных таблиц SQL Server в хранилище данных или витрину данных. Хотя представление исходных таблиц в хранилище данных должно отражать изменения в исходных таблицах, сквозная технология, которая обновляет реплику источника, не подходит. Вместо этого необходим надежный поток информации об изменениях, структурированный таким образом, чтобы клиенты могли применить его к другим целевым предоставлениям данных. Технология захвата изменений данных предоставляется SQL Server.

Дополнительные сведения об отслеживании изменения данных в Azure SQL Database можно узнать в этом выпуске программы Data Exposed.

Поток данных

На следующем рисунке показан основной поток данных для отслеживания измененных данных с помощью База данных SQL Azure:

Диаграмма блок-схемы, отображающая поток данных для фиксации изменений данных.

Предпосылки

Разрешения

Роль db_owner необходима, чтобы включить запись измененных данных для База данных SQL Azure.

База данных SQL Azure требования к вычислительным ресурсам

Вы можете включить CDC на базе данных SQL Azure для любого уровня обслуживания в модели приобретения на основе vCore как для отдельных баз данных, так и для эластичных пулов.

Для баз данных в модели приобретения DTU CDC поддерживается для баз данных уровня S3 или выше. Уровни подкордера (Базовый, S0, S1, S2) не поддерживаются для CDC.

Включение CDC для SQL базы данных Azure

Прежде чем создать экземпляр фиксации для отдельных таблиц, необходимо активировать CDC для SQL-базы данных Azure.

Чтобы включить CDC, подключитесь к База данных SQL Azure через Azure Data Studio или SQL Server Management Studio (SSMS). Откройте новое окно запроса, а затем включите CDC, выполнив следующую команду T-SQL:

EXEC sys.sp_cdc_enable_db;
GO

Примечание.

Чтобы определить, включена ли база данных, выполните запрос к столбцу is_cdc_enabled в представлении каталога sys.databases.

При включении отслеживания измененных данных для базы данных создаются cdc schema, cdc user, таблицы метаданных и другие системные объекты. cdc schema содержит таблицы метаданных для отслеживания изменений данных, и после включения cdc для исходных таблиц, отдельные таблицы изменений служат репозиторием для данных об изменениях. В cdc schema также содержатся связанные системные функции, используемые для получения данных об изменениях.

Внимание

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

Включение CDC для таблицы

После включения CDC для База данных SQL Azure можно включить CDC на уровне таблицы, выбрав одну или несколько таблиц для отслеживания изменений данных. Создайте экземпляр записи для отдельных исходных таблиц с помощью хранимой процедуры sys.sp_cdc_enable_table.

Чтобы включить CDC для таблицы, выполните следующую команду T-SQL:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL;
GO

Совет

В предыдущем примере не используется явный @role_name , задав параметр NULLв значение, но можно использовать роль gating для ограничения доступа к измененным данным.

Столбцы в исходной таблице для записи

По умолчанию все столбцы исходной таблицы определяются как отслеживаемые. Если необходимо отслеживать только подмножество столбцов, например по соображениям конфиденциальности или производительности, используйте параметр @captured_column_list для указания подмножества столбцов.

Чтобы включить CDC для определенного списка столбцов в таблице, выполните следующую команду T-SQL:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @captured_column_list = N'Column1, Column2, Column3';
GO

Совет

Обратите внимание, что в предыдущем примере не используется явный @role_name, и параметр не задан с использованием NULL, но вы можете использовать роль, ограничивающую доступ, для ограничения доступа к измененным данным.

Роль для управления доступом к таблице изменений

Именованные роли используются для управления доступом к информации об изменениях. Указана может быть существующая предопределенная роль сервера или роль базы данных. Если указанная роль еще не существует, то автоматически создается роль базы данных с таким именем. Пользователи должны иметь разрешение SELECT на все захваченные столбцы исходной таблицы. Кроме того, при указании роли пользователи, не являющиеся членами роли sysadmin или db_owner , также должны быть членами указанной роли.

Чтобы включить CDC для таблицы, указав роль ограничивающую доступ, выполните следующую команду T-SQL:

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = N'RoleName'
GO

Если вы не хотите использовать ограничивающую роль, явно задайте параметру @role_name значение NULL.

Функция для запроса чистых изменений

Экземпляр захвата всегда включает табличную функцию для возврата всех записей таблицы изменений, произошедших в течение определенного интервала. Эта функция называется путем добавления имени экземпляра захвата к cdc.fn_cdc_get_all_changes_. Дополнительные сведения см. в cdc.fn_cdc_get_all_changes.

Если параметр @supports_net_changes имеет значение 1, то для экземпляра системы отслеживания также будет создаваться функция суммарных изменений. Эта функция возвращает только одно изменение для каждой отдельной строки, измененной в течение интервала, указанного в вызове. Дополнительные сведения см. в cdc.fn_cdc_get_net_changes.

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

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

EXEC sys.sp_cdc_enable_table
    @source_schema = N'SchemaName',
    @source_name = N'TableName',
    @role_name = NULL,
    @supports_net_changes = 1
GO

Если запись измененных данных включена в таблице с существующим первичным ключом, а параметр @index_name не используется для идентификации альтернативного уникального индекса, функция отслеживания измененных данных использует первичный ключ. Последующие изменения первичного ключа не допускаются без первого отключения записи измененных данных для таблицы. Это справедливо независимо от того, была ли запрошена поддержка запросов суммарных изменений при настройке системы отслеживания измененных данных.

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

Дополнительные сведения о аргументах хранимой процедуры sys.sp_cdc_enable_table см. в sys.sp_cdc_enable_table.

Совет

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

Отключение CDC для База данных SQL Azure

Отключение CDC для базы данных SQL Azure удаляет все связанные метаданные отслеживания измененных данных, включая cdc user, cdc schema, а также процессы захвата и очистки внешнего планировщика. Однако все роли gating, созданные с помощью отслеживания измененных данных, не удаляются автоматически и должны быть явно удалены.

Примечание.

Чтобы определить, включена ли база данных cdc, выполните запрос к столбцу is_cdc_enabled в представлении каталога sys.databases.

Не обязательно отключить CDC для отдельных таблиц перед отключением CDC на уровне базы данных.

Чтобы отключить CDC на уровне базы данных, выполните следующую команду T-SQL:

EXEC sys.sp_cdc_disable_db;
GO

Совет

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

Управление CDC

В База данных SQL Azure CDC является важной функцией для отслеживания изменений в таблицах базы данных и управления ими. В отличие от традиционных сред SQL Server, База данных SQL Azure использует планировщик захвата изменений для обработки задач захвата изменений (CDC) вместо использования заданий Агента SQL Server. Этот планировщик автоматически инициирует периодические процессы отслеживания и очистки таблиц CDC в базе данных, обеспечивая надежность и производительность без внешних зависимостей.

Автоматический захват и очистка CDC

Задание записи CDC в База данных SQL Azure работает легко, выполняя каждые 20 секунд для эффективного отслеживания изменений. Одновременно задача очистки выполняется каждый час, обеспечивая, что ваши таблицы CDC остаются оптимизированными. Пользователи могут убедиться, что управление CDC происходит автоматически без вмешательства вручную.

Внимание

Если в бессерверной базе данных включена функция CDC и она находится в приостановленном состоянии, CDC не запускается. Проверка CDC не повлияет на функцию автопаузы.

Ручное управление CDC

Хотя CDC выполняется автоматически, пользователи имеют возможность выполнять ручные операции CDC по запросу. Процедуры sp_cdc_scan и sp_cdc_cleanup_change_tables позволяют запускать задачи записи и очистки по мере необходимости.

Мониторинг CDC

База данных SQL Azure предоставляет ценные средства для мониторинга действий CDC. Два динамических административных представления, sys.dm_cdc_log_scan_sessions и sys.dm_cdc_errors, предоставляют аналитические сведения о процессах CDC, обеспечивая полную видимость изменений данных.

Настройка CDC

Хотя База данных SQL Azure упрощает управление CDC, существуют некоторые ограничения:

  • Частота выполняемых заданий записи и очистки CDC не может быть настроена.
  • pollinginterval и continuous значения заданий захвата и очистки не применимы в базе данных SQL Azure.
  • Удаление записи захвата задания из cdc.cdc_jobs таблицы не останавливает фоновую задачу захвата.
  • Удаление записи задания очистки останавливает задание очистки.
  • Таблица cdc.cdc_jobs находится в схеме cdc , а не msdb.

Несмотря на эти ограничения, вы по-прежнему можете настроить следующие параметры:

  • Сделайте запрос к таблице cdc.cdc_jobs, чтобы получить сведения о текущей конфигурации.
  • Настройте параметры maxtrans и maxscans с помощью хранимой процедуры sp_cdc_change_job.
  • Управляйте заданиями, используя sp_cdc_drop_job и sp_cdc_add_job по мере необходимости.

Соображения и рекомендации по производительности

Включение отслеживания изменений данных для Azure SQL Database оказывает влияние на производительность, сопоставимое с включением CDC для SQL Server или Azure SQL Managed Instance. Однако некоторые факторы влияют на производительность при включении CDC, в том числе:

  • Количество таблиц с поддержкой CDC в База данных SQL Azure.

  • Частота изменений в отслеживаемых таблицах или объема транзакций. Активные транзакции препятствуют усечению журнала до тех пор, пока транзакция не зафиксирована и процесс сканирования CDC не догонит, или транзакция будет прервана. Это может привести к заполнению журнала транзакций больше, чем обычно, и следует отслеживать, чтобы журнал транзакций не заполнялся.

  • Убедитесь, что в исходной базе данных есть свободное место, так как артефакты CDC (например, таблицы CT, cdc_jobs и т. д.) хранятся в той же базе данных.

  • Есть ли у вас одна база данных или она является частью эластичного пула.

  • Базы данных в эластичном пуле совместно используют ресурсы (например, дисковое пространство), поэтому включение функции CDC на нескольких базах данных может привести к достижению максимального размера дискового пространства эластичного пула. Отслеживайте такие ресурсы, как ЦП, память и пропускная способность журналов. Дополнительные сведения см. в разделе "Управление ресурсами" в плотных эластичных пулах.

  • При работе с базами данных в эластичных пулах важно учитывать количество таблиц с поддержкой CDC и количество баз данных, к которым относятся эти таблицы. Мы рекомендуем оценить рабочую нагрузку и принять необходимые меры, например масштабирование эластичного пула. Дополнительные сведения см. в разделе "Масштабирование ресурсов эластичного пула" в База данных SQL Azure.

Внимание

Эти рекомендации являются общими рекомендациями. Для точного руководства по оптимизации производительности для конкретной рабочей нагрузки обратитесь в службу поддержки Майкрософт.

При использовании CDC с База данных SQL Azure следует учитывать следующие рекомендации.

  • Тщательно протестируйте рабочую нагрузку перед активацией CDC в базах данных в промышленной среде, чтобы помочь вам определить подходящий уровень обслуживания (SLO) для рабочей нагрузки. Дополнительные сведения о размерах вычислительных ресурсов Azure SQL Database см. в разделе Уровни служб.

  • Рассмотрите возможность масштабирования количества виртуальных ядер или перехода на более высокий уровень базы данных, например гипермасштабирование, чтобы сохранить предыдущий уровень производительности после включения CDC в базе данных SQL Azure. Дополнительные сведения см. в статье о модели приобретения виртуальных ядер, База данных SQL Azure и гипермасштабируемом уровне обслуживания.

  • Внимательно отслеживайте использование пространства. Дополнительные сведения см. в статье "Управление пространством файлов для баз данных в База данных SQL Azure".

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

  • Процессы сканирования и очистки CDC являются частью обычной рабочей нагрузки базы данных (также используют ресурсы). В зависимости от объема транзакций снижение производительности может быть существенным из-за того, что процессы сканирования и очистки не успевают за рабочей нагрузкой, так как полные строки добавляются в таблицы изменений, а для операций обновления также включается исходное изображение. Мы рекомендуем оценить рабочую нагрузку и принять необходимые меры в соответствии с предыдущими рекомендациями. Дополнительные сведения см. в разделе управления CDC в этой статье.

Внимание

Планировщик автоматически выполняет запись и очистку внутри базы данных SQL. Задание записи CDC выполняется каждые 20 секунд, и задание очистки выполняется каждый час.

  • Чтобы предотвратить увеличение задержки, убедитесь, что количество баз данных с поддержкой CDC не превышает количество виртуальных ядер, выделенных эластичному пулу. Дополнительные сведения см. в статье "Управление ресурсами" в плотных эластичных пулах.

  • Учитывая вашу рабочую нагрузку и уровень производительности, рассмотрите возможность изменения периода хранения CDC на меньшее число, чем значение по умолчанию в три дня, чтобы процесс очистки мог идти в ногу с изменениями в таблице изменений. Поддержание более низкого срока хранения при мониторинге размера базы данных рекомендуется.

  • Соглашение об уровне обслуживания (SLA) не предоставляется при заполнении изменений в таблицах изменений. Задержка подсекунда также не поддерживается.

Известные проблемы и ограничения

Агрессивное усечение журнала

Когда вы включаете захват изменений данных (CDC) в Базе данных Azure SQL, функция агрессивного усечения журнала ускоренного восстановления базы данных (ADR) отключается. Это связано с тем, что при проверке CDC выполняется обращение к журналу транзакций базы данных. Активные транзакции препятствуют усечению журнала транзакций до тех пор, пока транзакция не завершится подтверждением, и проверка CDC не догонит, или пока транзакция не завершится.

При включении CDC рекомендуется использовать параметр возобновляемого индекса при создании или перестроении индекса. Возобновляемые индексы не удерживают длительно выполняющуюся транзакцию открытой и позволяют усекать транзакционный лог во время операции для улучшения управления его пространством. Дополнительные сведения см. в статье Рекомендации по операциям с онлайн-индексами — соображения по возобновляемым индексам.

уровень службы базы данных Azure SQL

Хотя CDC поддерживается для баз данных и эластичных пулов в любом уровне службы в модели приобретения на основе виртуальных ядер, базы данных, уровень которых ниже S3 (например, Basic, S0, S1, S2), не поддерживаются в модели приобретения DTU.

ограничения журнала Azure SQL Базы данных

Ускоренное восстановление базы данных и CDC совместимы. Однако агрессивное сокращение журнала в ADR отключается при включении CDC. Это связано с тем, что механизм CDC активно обращается к журналу транзакций базы данных и взаимодействует с ним, что предотвращает агрессивное усечение журнала транзакций, характерное для ADR.

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

Совет

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

Операторы DDL в режиме онлайн не поддерживаются

Онлайн операторы DDL не поддерживаются при включении отслеживания изменений данных в базе данных.

Настройка записи и очистки

Настройка частоты записи и процессов очистки для CDC в База данных SQL Azure невозможно. Планировщик автоматически выполняет сбор данных и их очистку.

Переключение на резерв в базе данных Azure SQL

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

Microsoft Entra ID

Примечание.

Microsoft Entra ID ранее был известен как Azure Active Directory (Azure AD).

Если вы создаете базу данных в Azure SQL в качестве пользователя Microsoft Entra и включаете в нее CDC, пользователь SQL (например, даже тот, который в роли sysadmin) не может отключить или внести изменения в артефакты CDC. Однако другой пользователь Microsoft Entra может включить или отключить CDC в той же базе данных.

Аналогичным образом, если вы создаете базу данных в качестве пользователя SQL, включение и отключение записи измененных данных в качестве пользователя Microsoft Entra не работает.

Включение CDC завершается ошибкой, если вы создаёте её в базе данных SQL Azure в качестве пользователя Microsoft Entra, не включаете CDC, а затем пытаетесь включить его после восстановления базы данных.

Чтобы устранить эту проблему, подключитесь к базе данных с учетной записью администратора Microsoft Entra и выполните следующую команду T-SQL:

ALTER AUTHORIZATION ON DATABASE::[<restored_db_name>] TO [<azuread_admin_login_name>];

EXEC sys.sp_cdc_enable_db;

Восстановление до точки во времени (PITR)

Если вы включили CDC в Базе данных SQL Azure как SQL-пользователь, точечное восстановление во времени (PITR) сохраняет CDC в восстановленной базе данных, если только она не восстановлена до уровня subcore SLO. Если восстановление было выполнено на субкоре SLO, артефакты CDC недоступны.

Если вы активируете CDC на базе данных, будучи пользователем Microsoft Entra, восстановление на определенный момент времени (PITR) до субъядра SLO невозможно. Восстановите базу данных до того же или более высокого уровня SLO, что и источник, а затем отключите CDC при необходимости.

Устранение неполадок

В этом разделе приведены инструкции и действия по устранению неполадок, связанные с CDC на База данных SQL Azure. Ошибки, связанные с CDC, могут препятствовать надлежащему функционированию процесса захвата и привести к расширению журнала транзакций базы данных.

Чтобы изучить эти ошибки, можно запросить динамическое управляемое представление sys.dm_cdc_errors. Если динамическое sys.dm_cdc_errors представление управления возвращает любые ошибки, ознакомьтесь со следующим разделом, чтобы понять действия по устранению рисков.

Примечание.

Дополнительные сведения об определенном коде ошибки см. в событиях и ошибках системы управления базами данных (СУБД).

Это различные категории устранения неполадок, включенные в этот раздел:

Категория Описание
Измененные метаданные Содержит сведения о том, как устранять проблемы, связанные с CDC при изменении или удалении отслеживаемой таблицы.
Управление пространством базы данных Содержит сведения о том, как устранять проблемы при исчерпании пространства базы данных.
Ограничение CDC Содержит сведения о том, как устранять проблемы, вызванные ограничениями CDC.

Измененные метаданные

Ошибка 200/208 — недопустимое имя объекта

  • Причина. Ошибка может возникать при удалении метаданных CDC. Для правильной работы CDC не следует вручную изменять метаданные CDC, такие как CDC schema таблицы изменений, системные хранимые процедуры CDC, разрешения по умолчанию cdc user или переименовывать sys.database_principalscdc user.

  • Рекомендация. Чтобы устранить эту проблему, необходимо отключить и повторно включить CDC для базы данных. При включении отслеживания изменений данных для базы данных создаются схема cdc, пользователь cdc, таблицы метаданных и другие системные объекты для базы данных. Вам потребуется вручную повторно включить CDC для отдельных таблиц после включения CDC для базы данных.

Примечание.

Объекты, найденные в представлении системного каталога sys.objects, с is_ms_shipped=1 и schema_name=cdc, не должны быть изменены или удалены.

Ошибка 1202 — субъект базы данных не существует, или пользователь не является членом

  • Причина. Ошибка может возникать при удалении пользователя CDC. Для правильной работы CDC не следует вручную изменять метаданные CDC, такие как CDC schema, таблицы изменений, системные хранимые процедуры CDC, разрешения по умолчанию (cdc user), или переименовывать cdc user.

  • Рекомендация: Убедитесь, что cdc пользователь существует в вашей базе данных и ему назначена роль db_owner. Чтобы создать cdc пользователя, см. пример создания пользователя cdc и назначения роли.

Ошибка 15517. Не удается выполнить в качестве субъекта базы данных, так как субъект не существует

  • Причина: этот тип субъекта не может быть олицетворен или у вас нет разрешения. Ошибка может возникать, если метаданные CDC были удалены или больше не являются частью db_owner роли. Для правильной работы CDC не следует вручную изменять метаданные CDC, такие как CDC schema, таблицы изменений, системные хранимые процедуры CDC, разрешения по умолчанию (cdc user) или переименовывать cdc user.

  • Рекомендация: Убедитесь, что cdc пользователь существует в базе данных и ему назначена db_owner роль. Чтобы создать cdc пользователя, смотрите пример создания пользователя cdc и назначения роли.

Ошибка 18807. Не удается найти идентификатор объекта для таблицы системы репликации

  • причина. Эта ошибка возникает, когда ядро СУБД SQL Server не может найти или получить доступ к таблице системы репликации%s.' Таблица может быть недостающей или недоступной. Для правильной работы CDC не изменяйте метаданные CDC вручную, например, CDC schema, таблицы изменений, системные хранимые процедуры CDC, разрешения по умолчанию cdc user (sys.database_principals) и не переименовывайте cdc user.

  • Рекомендация. Убедитесь, что системная таблица существует и доступна, запрашивая таблицу напрямую. Сделайте запрос к системному каталогу sys.objects, используя is_ms_shipped=1 и schema_name=cdc для установки предикатного условия, чтобы перечислить все объекты, связанные с CDC. Если запрос не возвращает объекты, необходимо отключить и повторно включить CDC для базы данных. Включение отслеживания изменений для базы данных создает таблицы метаданных cdc schema, cdc user, и другие системные объекты для базы данных. Вам потребуется вручную повторно включить CDC для отдельных таблиц после включения CDC для базы данных.

Ошибка 21050. Только члены предопределенных ролей сервера sysadmin или db_owner могут выполнять эту операцию.

  • Причина: cdc пользователь был удален из db_owner роли базы данных или из sysadmin роли сервера.

  • Рекомендация: Убедитесь, что пользователю назначена роль db_owner. Чтобы создать cdc пользователя, см. пример Создание пользователя cdc и назначение роли.

Управление пространством базы данных

Ошибка 1105. Не удалось выделить пространство для объекта в базе данных, так как файловая группа заполнена

  • Причина. Эта ошибка возникает, когда основная файловая группа базы данных не имеет места, и База данных SQL не может выделить больше места для объекта (например, таблицы или индекса) в этой файловой группе.

  • Рекомендация. Чтобы устранить эту проблему, удалите ненужные данные в базе данных, чтобы освободить место. Определите неиспользуемые таблицы, индексы или другие объекты в файловой группе, которые можно безопасно удалить. Внимательно отслеживайте использование пространства, дополнительные сведения см. в статье "Управление файловыми пространствами для баз данных в База данных SQL Azure".

    Если удаление ненужных данных или объектов не является вариантом, рассмотрите возможность масштабирования до более высокого уровня базы данных.

Ошибка 1132. Эластичному пулу достигнуто ограничение хранилища.

  • Причина: Эта ошибка возникает, когда использование хранилища в вашем эластичном пуле превысило выделенное ограничение.

  • Рекомендация. Чтобы устранить эту проблему, реализуйте стратегии архивации и очистки данных, чтобы сохранить только необходимые данные в базах данных, которые являются частью эластичного пула. Внимательно отслеживайте использование пространства. Дополнительные сведения см. в статье "Управление пространством файлов для баз данных в База данных SQL Azure".

    Если архивирование данных или удаление ненужных данных или объектов не является вариантом, рассмотрите возможность масштабирования до более высокого уровня базы данных.

Ограничение CDC

Ошибка 2628 — строковые или двоичные данные будут усечены в таблице

  • Причина: Изменение размера столбцов таблицы с поддержкой CDC с помощью инструкций DDL может вызвать проблемы с последующим процессом захвата CDC. Динамическое представление управления данными (DMV) полезно для проверки любого CDC на наличие зарегистрированных проблем, таких как ошибки 2628 и 8115.

  • Рекомендация. Прежде чем вносить изменения в размер столбца, необходимо оценить совместимость изменения с существующими данными в таблицах изменений CDC. Чтобы устранить эту проблему, необходимо отключить и повторно включить CDC для базы данных. Дополнительные сведения о включении CDC для базы данных или таблицы см. в разделе "Включить CDC для База данных SQL Azure" и "Включить CDC" для таблиц в этой статье.

Ошибка 22830. Встроенная функция "SUSER_SNAME" в контексте олицетворения не поддерживается в этой версии SQL Server

  • Причина: Эта ошибка возникает во время включения CDC, если триггер пользователя существует в базе данных, в которой есть вызов SUSER_SNAME()create_table. Вы можете перечислить триггеры со следующим скриптом Transact-SQL. Эта команда содержит сведения о триггере объекта и соответствующем object_id:

    SELECT name,
        object_id
    FROM sys.triggers
    WHERE parent_class_desc = 'DATABASE'
        AND is_disabled = 0;
    

    Получив определения триггеров, вы можете искать вызовы, которые совершаются к SYSTEM_USER, с помощью следующего скрипта:

    SELECT OBJECT_DEFINITION(object_id) AS trigger_definition;
    
  • Рекомендация. Чтобы устранить эту проблему, выполните следующие действия для каждого триггера пользователя, полученного из предыдущего сценария.

    • Отключение триггера
    • Включение CDC
    • Повторно включите триггер

Дополнительные сведения см. в разделе DISABLE TRIGGER.

Ошибка 913. Задание записи CDC завершается сбоем при обработке изменений таблицы с типом данных system CLR

  • Причина: Эта ошибка возникает при включении CDC в таблице с типом данных system CLR, когда сначала вносятся изменения DML, а затем в той же таблице вносятся изменения DDL, в то время как процесс захвата CDC обрабатывает изменения, связанные с другими таблицами.

  • Рекомендация: Рекомендуемые действия — приостановить DML для таблицы, выполнить задание отслеживания для обработки изменений, запустить DDL для таблицы, выполнить задание отслеживания для обработки изменений DDL, а затем повторно включить обработку DML. Дополнительные сведения см. в разделе сбой задания захвата данных CDC при обработке изменений для таблицы с типом данных системы CLR (geometry, geography или hierarchyid).

Создание пользователя и назначение роли

Если cdc user был удалён, вы можете вручную добавить пользователя обратно.

Используйте следующий скрипт T-SQL, чтобы создать пользователя (cdc) и назначить соответствующую роль (db_owner).

IF NOT EXISTS (
    SELECT *
    FROM sys.database_principals
    WHERE NAME = 'cdc'
)
BEGIN
    CREATE USER [cdc] WITHOUT LOGIN
    WITH DEFAULT_SCHEMA = [cdc];
END

EXEC sp_addrolemember 'db_owner', 'cdc';

Проверка и добавление членства в роли

Чтобы проверить, принадлежит ли пользователь либо к sysadmin роли, либо к db_owner роли, выполните следующий запрос T-SQL:

EXECUTE AS USER = 'cdc';

SELECT is_srvrolemember('sysadmin'), is_member('db_owner');

cdc Если пользователь не принадлежит ни к той или иной роли, выполните следующий запрос T-SQL, чтобы добавить db_owner роль пользователюcdc.

EXEC sp_addrolemember 'db_owner' , 'cdc';