Изменение записи данных (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:
Необходимые компоненты
Разрешения
Роль 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 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 по запросу. Процедуры 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 и рассмотрите возможность масштабирования до более высокого уровня базы данных и позволить журналу транзакций расти в соответствии с потребностями рабочей нагрузки.
Совет
Если рабочая нагрузка требует повышения общей производительности из-за более высокой пропускной способности журнала транзакций и ускорения времени фиксации транзакций, используйте уровень служб Гипермасштабирования.
Операторы DDL в Сети неподдерживаются
Операторы DDL в Сети не поддерживаются при включении записи измененных данных в базе данных.
Настройка записи и очистки
Настройка частоты записи и процессов очистки для 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_principals
cdc user
.Рекомендация. Чтобы устранить эту проблему, необходимо отключить и повторно включить CDC для базы данных. При включении отслеживания измененных данных для базы данных он создает схему cdc, пользователя cdc, таблицы метаданных и другие системные объекты для базы данных. Вам потребуется вручную повторно включить CDC для отдельных таблиц после включения CDC для базы данных.
Примечание.
Объекты, найденные в представлении системного каталога sys.objects и is_ms_shipped=1
schema_name=cdc
не должны быть изменены или удалены.
Ошибка 1202 — субъект базы данных не существует, или пользователь не является членом
Причина. Ошибка может возникать при удалении пользователя CDC. Для правильной работы CDC не следует вручную изменять метаданные CDC, такие как
CDC schema
, таблицы изменений, системные хранимые процедуры CDC, разрешения по умолчаниюcdc user
или переименованиеsys.database_principals
cdc 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) полезно для проверки любых обнаруженных проблем, таких как ошибки 2628 и 8115.Рекомендация. Прежде чем вносить изменения в размер столбца, необходимо оценить совместимость изменения с существующими данными в таблицах изменений CDC. Чтобы устранить эту проблему, необходимо отключить и повторно включить CDC для базы данных. Дополнительные сведения о включении CDC для базы данных или таблицы см. в разделе "Включить CDC для База данных SQL Azure" и "Включить CDC" для таблиц в этой статье.
Ошибка 22830. Встроенная функция "SUSER_SNAME" в контексте олицетворения не поддерживается в этой версии SQL Server
Причина. Эта ошибка возникает во время включения CDC, если триггер пользователя существует в базе данных, в которой есть вызов
create_table
SUSER_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
пользователь либо 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';