powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перестало работать cdc
15 сообщений из 15, страница 1 из 1
Перестало работать cdc
    #40083650
Шамиль Фаридович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
На одной из тестовых сред перестала работать система отслеживания изменений,
сервер
Код: sql
1.
2.
3.
4.
Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) 
	Aug 22 2017 17:04:49 
	Copyright (C) 2017 Microsoft Corporation
	Developer Edition (64-bit) on Windows Server 2019 Datacenter 10.0


База compatibility_level = 100 (2008R2), is_cdc_enabled = 1

Такой запрос
Код: sql
1.
exec sys.sp_cdc_help_change_data_capture 'ac', 'Address'


тоже отрабатывает без ошибки, но вот
Код: sql
1.
2.
select max(sys.fn_cdc_map_lsn_to_time(__$start_lsn))
from cdc.ac_address_ct ct


выдает аж 3 июня, ну и после новых изменений в ac.Address в таблицу cdc.ac_Address_ct ничего не пишется.

Ну и вообще,
Код: sql
1.
2.
select max(sys.fn_cdc_map_lsn_to_time(start_lsn)) max_start_lsn_time
from cdc.lsn_time_mapping


тоже выдает 3 июня.

Меня интересует несколько вопросов:
1. Как понять, что CDC отвалилось без "ручной" проверки. То есть в какие таблицы залезть и какие поля посмотреть.
2. Как перезапустить, желательно без потери данных в таблицах изменений.
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40083660
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шамиль Фаридович
Доброго времени суток!
На одной из тестовых сред перестала работать система отслеживания изменений,
сервер
Код: sql
1.
2.
3.
4.
Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) 
	Aug 22 2017 17:04:49 
	Copyright (C) 2017 Microsoft Corporation
	Developer Edition (64-bit) on Windows Server 2019 Datacenter 10.0



а другие тестовые среды тоже на RTM версиях?
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40083661
Шамиль Фаридович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sys.sp_cdc_help_jobs выдает значения по умолчанию типа
pollinginterval = 5 для capture,
и
retention=4320 (72 часа), theshhold = 5000 для cleanup

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

В логе сервера много сообщения типа

Код: sql
1.
AppDomain 6579 (mssqlsystemresource.dbo[runtime].6581) unloaded.
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40083663
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шамиль Фаридович,

джоб по сбору не должен простаивать, если стоял более 4-х суток и сработает джоб очистки, то потеряете данные. А джоб очистки у вас тоже стоит, судя по всему. Возможно, у вас мало изменений, иначе бы журнал транзакций заметно вырос.
Проверьте, не сбросил ли кто настройку базы разрешения для CDC. Хотя джобы тогда удаляются, по-моему.
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40083664
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шамиль Фаридович,

авторAppDomain 6579 (mssqlsystemresource.dbo[runtime].6581) unloaded. Выгрузка может произойти из-за простоя.
Это норм, вот если будет написано что-то вроде due to memory pressure, то принимайте меры, памяти не хватает.
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40083775
Шамиль Фаридович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов,
Код: sql
1.
due to memory pressure


Вот именно с такой фомулировкой постоянно происходит выгрузка.
Поэтому и отвалился cdc, не смотря на то, что все известные мне его настройки включены?
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40083905
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шамиль Фаридович,

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

CDC ещё создает триггер базы данных для отслеживания изменений в таблицах.
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40100560
Шамиль Фаридович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В прошлый раз мы рефрешнули базу из бэкапа и заново настроили на ней CDC.
Но вот она проявилась вновь, на другой базе, но на обновленном сервере:

Код: sql
1.
2.
3.
4.
Microsoft SQL Server 2019 (RTM-CU12) (KB5004524) - 15.0.4153.1 (X64) 
	Jul 19 2021 15:37:34 
	Copyright (C) 2019 Microsoft Corporation
	Developer Edition (64-bit) on Windows Server 2019 Datacenter 10.0 <X64> (Build 17763: ) (Hypervisor)



Владислав Колосов
Простой перезапуск джоба восстанавливает работу.

Я что-то не соображу как это сделать?
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40100788
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шамиль Фаридович,

джоб имеется CDC - чего-то там с названием базы. Если он не выполняется, то его надо стартовать вручную.
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40100822
Шамиль Фаридович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда я пытаюсь остановить задание прямо из обозревателя студии,
я получаю сообщение, что задание сейчас не выполняется:

Код: sql
1.
SQLServerAgent Error: Request to stop job cdc.my_db_capture (from User my_user) refused because the job is not currently running. (Microsoft SQL Server, ошибка: 22022)



После запуска задания появляется окошко с 2мя пунктами:

запустить задание cdc.my_db_capture... Успешно
выполнить задание cdc.my_db_capture... Выполняется

Параллельное обновление строк в одной из отслеживаемых таблиц ничего не добавляет в ее cdc-лог.
Зато в журнале сервера периодически появляются новые сообщения вида:
Код: sql
1.
2.
AppDomain ... is marked for unload due to memory pressure
AppDomain ... unloaded



Я неправильно запускаю задание?
Подскажите пожалуйста, как правильно это сделать.
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40100833
Mr. X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шамиль Фаридович,

Для cdc создаётся 2-а джоба: один для удаления старых записей (запускается раз в сут, по дефолту), второй для захвата изменений (работает постоянно, стартует при старте sql агента). В названии этих джобов есть слова 'cdc' и 'имя базы'. Нужно остановить и запустить джоб для захвата изменений. Контролируйте статус лога базы, что мешает ему усекаться бэкапами лога. Если в статусе написано 'репликация' то, при отсутствии на сервере настроенный репликации для этой базы, это значит что не работает cdc.
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40100846
Шамиль Фаридович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mr. X
Нужно остановить и запустить джоб для захвата изменений.

А вы сами пробовали так делать?
Я ради интереса попробовал на той базе, где работает cdc.
Выключил
Код: sql
1.
EXEC msdb.dbo.sp_stop_job 'cdc.another_db_capture'


Убедился на одной из таблиц, что ее логгирование больше не ведется.
Включил:
Код: sql
1.
EXEC msdb.dbo.sp_start_job 'cdc.another_db_capture'


В cdc-логе тут же появилась вся цепочка изменений.

Но на проблемной базе попытка выключить выдает:
Код: sql
1.
SQLServerAgent Error: Request to stop job cdc.my_db_capture (from User my_user) refused because the job is not currently running.


Команда на включение отрабатывает без ошибок:
Код: sql
1.
Job 'cdc.my_db_capture' started successfully.


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

Mr. X
Контролируйте статус лога базы, что мешает ему усекаться бэкапами лога.

Как это сделать?
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40100869
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте пересоздать джобы:
Код: sql
1.
2.
3.
4.
5.
EXEC [sys].[sp_cdc_drop_job] @job_type = N'capture';
EXEC [sys].[sp_cdc_drop_job] @job_type = N'cleanup';
EXEC sys.sp_cdc_add_job @job_type = N'capture'; 
EXEC sys.sp_cdc_add_job @job_type = N'cleanup';
GO
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40101431
boltnik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И мониторьте работу CDC запросом

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
USE [db];  
GO 
SELECT session_id, start_time, end_time, duration, scan_phase,  
    error_count,last_commit_time, last_commit_cdc_time,tran_count, start_lsn, current_lsn, end_lsn,   
    last_commit_lsn,  log_record_count, schema_change_count,  
    command_count, first_begin_cdc_lsn, last_commit_cdc_lsn,   
    latency, empty_scan_count, failed_sessions_count  
FROM sys.dm_cdc_log_scan_sessions  
WHERE session_id = (SELECT MAX(b.session_id) FROM sys.dm_cdc_log_scan_sessions AS b);  
GO 



Смотрите на сколько last_commit_time, last_commit_cdc_time отличаются.
...
Рейтинг: 0 / 0
Перестало работать cdc
    #40106213
Шамиль Фаридович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Гладченко
Попробуйте пересоздать джобы

После пересоздания джобы стали "поживее" в том плане, что их уже можно было отключить командой
Код: sql
1.
msdb.dbo.sp_stop_job


Но они по-прежнему не работали)

Помогло в итоге выключение/включение CDC на всей базе
Код: sql
1.
2.
sys.sp_cdc_disable_db
sys.sp_cdc_enable_db


с последующим включением CDC на всех нужных таблицах.

boltnik
И мониторьте работу CDC запросом
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
USE [db];  
GO 
SELECT session_id, start_time, end_time, duration, scan_phase,  
    error_count,last_commit_time, last_commit_cdc_time,tran_count, start_lsn, current_lsn, end_lsn,   
    last_commit_lsn,  log_record_count, schema_change_count,  
    command_count, first_begin_cdc_lsn, last_commit_cdc_lsn,   
    latency, empty_scan_count, failed_sessions_count  
FROM sys.dm_cdc_log_scan_sessions  
WHERE session_id = (SELECT MAX(b.session_id) FROM sys.dm_cdc_log_scan_sessions AS b);  
GO 


Смотрите на сколько last_commit_time, last_commit_cdc_time отличаются.


Какой-то у вас странный запрос, особенно часть с подзапросом, не проще ли написать

Код: sql
1.
2.
3.
SELECT top 1 session_id, last_commit_time, last_commit_cdc_time
FROM sys.dm_cdc_log_scan_sessions  
ordre by session_id desc



А вообще полезное представление, спасибо.
И на сколько по хорошему должны отличаться last_commit_time от last_commit_cdc_time?

Кажется я понял, откуда вы взяли свой запрос:
https://docs.microsoft.com/en-us/sql/relational-databases/system-dynamic-management-views/change-data-capture-sys-dm-cdc-log-scan-sessions?f1url=?appId=Dev15IDEF1&l=RU-RU&k=k(dm_cdc_log_scan_sessions_TSQL);k(sql13.swb.tsqlresults.f1);k(sql13.swb.tsqlquery.f1);k(DevLang-TSQL)&rd=true&view=sql-server-ver15#examples

Ну там тоже люди, иногда ошибаются:)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перестало работать cdc
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]