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

Откуда:
Сообщений: 173
архитектура: прилагается рисунок

короткое описание задача:
- сделать первоначальную синхронизацию из базы данных 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]     Ответить | Цитировать Сообщить модератору
 Re: Альтернатива первоначальной синхронизации большой БД Tran Replication  [new]
startDBA
Member

Откуда:
Сообщений: 173


К сообщению приложен файл. Размер - 76Kb
17 окт 17, 17:23    [20876840]     Ответить | Цитировать Сообщить модератору
 Re: Альтернатива первоначальной синхронизации большой БД Tran Replication  [new]
invm
Member

Откуда: Москва
Сообщений: 9265
startDBA
нужно найти решение первоначальной синхронизации в любое время так что бы это не мешало работе издателю (при стандартном snapshot море блокировок)
sp_addpublication
@sync_method = concurrent | database snapshot
17 окт 17, 17:31    [20876883]     Ответить | Цитировать Сообщить модератору
 Re: Альтернатива первоначальной синхронизации большой БД Tran Replication  [new]
startDBA
Member

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

На данный момент пользуемся concurrent , с database snapshot боюсь будет тормозить БД

А мой метод получения LSN из logshipping DB и конверта в binary из NUMERIC(25,0) он корректный ?
17 окт 17, 21:29    [20877370]     Ответить | Цитировать Сообщить модератору
 Re: Альтернатива первоначальной синхронизации большой БД Tran Replication  [new]
invm
Member

Откуда: Москва
Сообщений: 9265
startDBA
На данный момент пользуемся concurrent
Тогда почему жалобы на "море блокировок"? Таблицы же целиком не блокируются.
startDBA
с database snapshot боюсь будет тормозить БД
Откуда такое предположение?
startDBA
А мой метод получения LSN из logshipping DB и конверта в binary из NUMERIC(25,0) он корректный ?
На первый взгляд - да. Но опция "initialize from lsn" предназначена для репликации peer-to-peer. У вас она?
17 окт 17, 23:04    [20877604]     Ответить | Цитировать Сообщить модератору
 Re: Альтернатива первоначальной синхронизации большой БД Tran Replication  [new]
startDBA
Member

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

OLTP CRM организации, тысячи tps, на такую ДБ snapshot будет тормозитъ систему
на сколъко я знаю transaction replication так же могжно синхронизироватъ с помошъю lsn

18 окт 17, 11:26    [20878412]     Ответить | Цитировать Сообщить модератору
 Re: Альтернатива первоначальной синхронизации большой БД Tran Replication  [new]
startDBA
Member

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

https://blogs.msdn.microsoft.com/repltalk/2010/03/16/deep-dive-on-initialize-from-backup-for-transactional-replication/
18 окт 17, 11:26    [20878414]     Ответить | Цитировать Сообщить модератору
 Re: Альтернатива первоначальной синхронизации большой БД Tran Replication  [new]
invm
Member

Откуда: Москва
Сообщений: 9265
startDBA
на сколъко я знаю transaction replication так же могжно синхронизироватъ с помошъю lsn
https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-addsubscription-transact-sql
initialize from lsn Used when you are adding a node to a peer-to-peer transactional replication topology. Used with @subscriptionlsn to make sure that all relevant transactions are replicated to the new node. Assumes that the Subscriber already has the schema and initial data for published tables. For more information, see Peer-to-Peer Transactional Replication.
18 окт 17, 11:43    [20878499]     Ответить | Цитировать Сообщить модератору
 Re: Альтернатива первоначальной синхронизации большой БД Tran Replication  [new]
startDBA
Member

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

допустим что идем по тому что написано в документации

какие еше естъ вариант длта трнзакзионнои реплицации?
18 окт 17, 13:47    [20878987]     Ответить | Цитировать Сообщить модератору
 Re: Альтернатива первоначальной синхронизации большой БД Tran Replication  [new]
invm
Member

Откуда: Москва
Сообщений: 9265
startDBA,

Если будет время, попробую поковырять вариант с "initialize from lsn"
18 окт 17, 23:16    [20880637]     Ответить | Цитировать Сообщить модератору
 Re: Альтернатива первоначальной синхронизации большой БД Tran Replication  [new]
startDBA
Member

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

буду рад, зарание благодарен!
19 окт 17, 12:13    [20881932]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить