Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
startDBA Member Откуда: Сообщений: 174 |
архитектура: прилагается рисунок короткое описание задача: - сделать первоначальную синхронизацию из базы данных log shipping - база данных издателя размером 3ТБ, OLTP CRM организации, из нее реплицируется 35 таблиц, из каждой таблицы ограниченное кол столбцов, в общем размере 100ГБ и все это на 3 подписчика (рис). - нужно найти решение первоначальной синхронизации в любое время так что бы это не мешало работе издателю (при стандартном snapshot море блокировок) - синхронизация из бекапа невозможна (очень много storage), одно из решений это синхронизация из ДБ logshippig с последующим созданием подписчика с параметром 'initialize from lsn' проблема: на издателе есть 2 статьи (рис), вовремя синхронизации и создании 1 подписчика , вторая статья выходит из синхронизации , то есть теряет транзакции. процесс: - написан на SSIS, описание процесса: 1. drop subscriber 2. drop logshipping backup job on publisher 3. restore all logs on logshipping 4. BCP export from logshipping 5. truncate tables on subscriber 6. drop indexes 7. BCP import on subscriber 8. create indexes 9. Get Last LSN from LogShipping DB SELECT TOP 1 b.last_lsn FROM msdb..restorehistory a INNER JOIN msdb..backupset b ON a.backup_set_id = b.backup_set_id WHERE a.destination_database_name = ? ORDER BY restore_date DESC 10. Create Subscription DECLARE @numericlsn NUMERIC(25,0) = ?, @v_publication VARCHAR(255) = ?, @v_subscriber VARCHAR(255) = ?, @v_subscriberDB VARCHAR(255) = ?, @v_subscription_type NVARCHAR(4) = ?, @v_subscriptionlsn BINARY(10), @v_publisherdb VARCHAR(255) = ? DECLARE @high4bytelsncomponent bigint, @mid4bytelsncomponent bigint, @low2bytelsncomponent int SELECT @high4bytelsncomponent = convert(bigint, floor(@numericlsn / 1000000000000000)) SELECT @numericlsn = @numericlsn - convert(numeric(25,0), @high4bytelsncomponent) * 1000000000000000 SELECT @mid4bytelsncomponent = convert(bigint,floor(@numericlsn / 100000)) SELECT @numericlsn = @numericlsn - convert(numeric(25,0), @mid4bytelsncomponent) * 100000 SELECT @low2bytelsncomponent = convert(int, @numericlsn) SELECT @v_subscriptionlsn = CONVERT(binary(4), @high4bytelsncomponent) + convert(binary(4), @mid4bytelsncomponent) + CONVERT(binary(2), @low2bytelsncomponent) EXEC sp_addsubscription @publication = @v_publication, @subscriber = @v_subscriber, @article = 'all', @destination_db = @v_subscriberDB, @sync_type = 'initialize from lsn', @subscriptionlsn = @v_subscriptionlsn, @subscription_type = @v_subscription_type, @update_mode = 'read only', @subscriber_type = 0; EXEC sp_addpushsubscription_agent @publication = @v_publication, @subscriber = @v_subscriber, @subscriber_db = @v_subscriberDB, @job_login = null, @job_password = null, @subscriber_security_mode = 1, @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20170703, @active_end_date = 99991231, @enabled_for_syncmgr = N'False', @dts_package_location = N'Distributor'; 11. enable LS jobs |
17 окт 17, 14:49 [20876224] Ответить | Цитировать Сообщить модератору |
startDBA Member Откуда: Сообщений: 174 |
К сообщению приложен файл. Размер - 76Kb |
17 окт 17, 17:23 [20876840] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
@sync_method = concurrent | database snapshot |
||
17 окт 17, 17:31 [20876883] Ответить | Цитировать Сообщить модератору |
startDBA Member Откуда: Сообщений: 174 |
invm, На данный момент пользуемся concurrent , с database snapshot боюсь будет тормозить БД А мой метод получения LSN из logshipping DB и конверта в binary из NUMERIC(25,0) он корректный ? |
17 окт 17, 21:29 [20877370] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
|
||||||
17 окт 17, 23:04 [20877604] Ответить | Цитировать Сообщить модератору |
startDBA Member Откуда: Сообщений: 174 |
invm, OLTP CRM организации, тысячи tps, на такую ДБ snapshot будет тормозитъ систему на сколъко я знаю transaction replication так же могжно синхронизироватъ с помошъю lsn |
18 окт 17, 11:26 [20878412] Ответить | Цитировать Сообщить модератору |
startDBA Member Откуда: Сообщений: 174 |
startDBA, https://blogs.msdn.microsoft.com/repltalk/2010/03/16/deep-dive-on-initialize-from-backup-for-transactional-replication/ |
18 окт 17, 11:26 [20878414] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
|
||||
18 окт 17, 11:43 [20878499] Ответить | Цитировать Сообщить модератору |
startDBA Member Откуда: Сообщений: 174 |
invm, допустим что идем по тому что написано в документации какие еше естъ вариант длта трнзакзионнои реплицации? |
18 окт 17, 13:47 [20878987] Ответить | Цитировать Сообщить модератору |
invm Member Откуда: Москва Сообщений: 9646 |
startDBA, Если будет время, попробую поковырять вариант с "initialize from lsn" |
18 окт 17, 23:16 [20880637] Ответить | Цитировать Сообщить модератору |
startDBA Member Откуда: Сообщений: 174 |
invm, буду рад, зарание благодарен! |
19 окт 17, 12:13 [20881932] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |