Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 не нашел способа получения текущего LSN в базе. подскажите.  [new]
Dzianis
Member

Откуда:
Сообщений: 80
Собственно сабж.

Есть база с cdc процессом. И без возможности в структуру базы как то вмешиваться.

Хочется сделать снепшот нескольких таблиц на другой сервер, используя insert .. select, но с привязкой к текущему LSN.
Чтобы последовательно потом вписать скопированные данные с cdc данными.

Получается, что sys.fn_cdc_get_max_lsn() не подойдет, так как он заполняется "отложено", в процессе обработки лога транзакций, то есть идет с "опозданием" к последней зафиксированной транзакции в базе. Есть конечно вариант данные перетаскивать с Getdate(), и попозже вычислить правильный LSN по cdc.lsn_time_mapping и обновить .. но не очень нравится.

может есть другие варианты?
Заранее спасибо.
19 фев 21, 18:03    [22283671]     Ответить | Цитировать Сообщить модератору
 Re: не нашел способа получения текущего LSN в базе. подскажите.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37146
select * from sys.dm_db_log_stats(db_id())


Сообщение было отредактировано: 19 фев 21, 18:31
19 фев 21, 18:38    [22283698]     Ответить | Цитировать Сообщить модератору
 Re: не нашел способа получения текущего LSN в базе. подскажите.  [new]
Dzianis
Member

Откуда:
Сообщений: 80
Гавриленко Сергей Алексеевич
select * from sys.dm_db_log_stats(db_id())


Спасибо!
19 фев 21, 21:04    [22283782]     Ответить | Цитировать Сообщить модератору
 Re: не нашел способа получения текущего LSN в базе. подскажите.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8322
Dzianis,

почему вы не хотите сделать перенос данных на другой сервер, используя механизм сбора CDC данных? Так вы получите одну точку происхождения изменений данных и данные будут гарантированно согласованы.
19 фев 21, 21:21    [22283795]     Ответить | Цитировать Сообщить модератору
 Re: не нашел способа получения текущего LSN в базе. подскажите.  [new]
Dzianis
Member

Откуда:
Сообщений: 80
Владислав Колосов
Dzianis,

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


сложный вопрос. В двух словах и не ответить.
Заказчик придумал архитектуру и хочет наличие функции резервного "рестарта" когда в непрерывную цепочку CDC событий "вписывается" копия таблицы, как страховка на форс мажор, когда события из cdc почему то не перенесутся за другой сервер и образуется окно.
19 фев 21, 23:04    [22283834]     Ответить | Цитировать Сообщить модератору
 Re: не нашел способа получения текущего LSN в базе. подскажите.  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8322
Dzianis,

Это ни от чего не защитит, так как "железо" происхождения данных одно и то же, равно как и транспорт. Перестраховка явно избыточна и только ухудшает ситуацию. Ну да хозяин - барин.
19 фев 21, 23:25    [22283843]     Ответить | Цитировать Сообщить модератору
 Re: не нашел способа получения текущего LSN в базе. подскажите.  [new]
Dzianis
Member

Откуда:
Сообщений: 80
Владислав Колосов
Dzianis,

Это ни от чего не защитит, так как "железо" происхождения данных одно и то же, равно как и транспорт. Перестраховка явно избыточна и только ухудшает ситуацию. Ну да хозяин - барин.



Тут добавлю.
Исходная база с CDC на одном сервере, данные из cdc переносятся ssis на другой. на котором уже и идет их "обработка". Смысл обработки это по CDC собрать денормализованные объекты, которые закинуть в третью базу, на которой уже будет пахать система отчетов.
Глядя на заказчика, я, в общем, допускаю вариант, когда процесс может упасть на пару дней и никто не отреагирует на сообщения в логах. За эти пару дней "хвост" в cdc таблицах подчистится и образуется разрыв в последовательности.
20 фев 21, 09:25    [22283921]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить