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


Изменение записи данных (CDC) с помощью База данных SQL Azure

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

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

Обзор

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

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

Дополнительные сведения об отслеживании измененных данных в База данных SQL Azure см. в этом эпизоде предоставления данных:

Поток данных

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

Diagram of a flow chart that depicts data flow for change data capture.

Необходимые компоненты

Разрешения

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

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

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

Для баз данных в модели приобретения 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в значение, но вы можете использовать роль gating для ограничения доступа к измененным данным.

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

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

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

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

Если вы не хотите использовать роль gating, явно задайте для параметра @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 (Transact-SQL).

Совет

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

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

Отключение CDC для База данных SQL Azure удаляет все связанные метаданные отслеживания измененных данных, включая данные, а также cdc usercdc 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 по запросу. Процедуры 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 не может быть настроена.
  • continuous Значения pollinginterval заданий записи и очистки не применимы в База данных 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 по мере необходимости.

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

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

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

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

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

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

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

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

Внимание

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

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

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

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

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

  • Мониторинг частоты создания журналов см. в разделе "Потребление ресурсов" рабочими нагрузками пользователей и внутренними процессами.

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

Внимание

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

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

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

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

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

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

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

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

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

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

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

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

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

Совет

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

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

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

Отработка отказа в База данных SQL Azure

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

Microsoft Entra ID

Примечание.

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

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

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

Включение CDC завершается ошибкой, если вы создаете базу данных в База данных SQL Azure в качестве пользователя Microsoft Entra, не включите CDC и попробуйте включить 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 в восстановленной базе данных, если только она не будет восстановлена в подкорре SLO. Если восстановлено до подкормного SLO, артефакты CDC недоступны.

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

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

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

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

Примечание.

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

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

Категория Description
Измененные метаданные Содержит сведения о том, как устранять проблемы, связанные с 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=1schema_name=cdc не должны быть изменены или удалены.

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

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

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

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

  • Причина: этот тип субъекта не может быть олицетворен или у вас нет разрешения. Ошибка может возникать при удалении метаданных CDC или ее больше не является частью db_owner роли. Для правильной работы CDC не следует вручную изменять метаданные CDC, такие как CDC schema, таблицы изменений, системные хранимые процедуры CDC, разрешения по умолчанию cdc user илиsys.database_principals переименование 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, задайте предложение предиката и schema_name=cdc перечислите все объекты, связанные с is_ms_shipped=1 CDC. Если запрос не возвращает объекты, необходимо отключить и повторно включить CDC для базы данных. Включение отслеживания измененных данных для базы данных создает cdc schemaтаблицы, cdc userметаданные и другие системные объекты для базы данных. Вам потребуется вручную повторно включить CDC для отдельных таблиц после включения CDC для базы данных.

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

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

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

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

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

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

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

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

Внимание

Подробные сведения о размерах вычислений База данных SQL Azure (отдельная база данных) см. в разделе "Ограничения ресурсов" для отдельных баз данных с использованием модели приобретения виртуальных ядер и ограничений ресурсов для отдельных баз данных с помощью модели приобретения DTU — База данных SQL Azure.

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

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

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

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

Внимание

Подробные сведения о размерах вычислений База данных SQL Azure (отдельная база данных) см. в разделе "Ограничения ресурсов для эластичных пулов" с помощью модели приобретения виртуальных ядер и ограничений ресурсов для эластичных пулов с помощью модели приобретения DTU.

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

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

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

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

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

  • Причина. Эта ошибка возникает во время включения CDC, если триггер пользователя существует в базе данных, в которой есть вызовcreate_tableSUSER_SNAME(). Вы можете перечислить триггеры со следующим скриптом 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;
    
  • Рекомендация. Чтобы устранить эту проблему, выполните следующие действия для каждого триггера пользователя, полученного из предыдущего сценария.

    • Отключение триггера
    • Включение отслеживания измененных данных
    • Повторно включите триггер

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

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

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

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

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

Если он 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';

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

Чтобы проверить, принадлежит ли cdc пользователь либо sysadmindb_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';