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

Откуда:
Сообщений: 11
задача: реплицировать информацию из продакшена в bi и test
ранее "репликация" выглядела как поднятие бэкапа (полный+ночной инкрементальный). Полный раз в неделю, инкремент каждую ночь.
что-то подсказывает что можно эту задачу упросить (с точки зрения нагрузки на систему, нагрузки на диск, на сеть), по средствам репликации логов транзакций.
да, знаю есть встроенная репликация в MSSQL, и один из способов её работы - как раз репликация лога транзакций.
только я не могу найти как сделать это ручками.
т.е. понятно что надо восстановится из полного бэкапа, а затем накатывать лог транзакций.
пробовал так:
RESTORE LOG [dbname] FROM DISK = '\\192.168....\...trn'
GO
говорят "Невозможно восстановить журнал или разностную резервную копию, так как нет файлов, готовых к накату."
на сколько я понимаю - данное сообщение я получаю, потому что ранее база данных была восстановлена в режиме RECOVERY (т.е. отменены все не заверенные транзакции)
если делать с параметром NORECOVERY, то данные прочитать потом нельзя.
нашел так-же хранимку sp_change_log_shipping_secondary_database - но у меня же репликация стандартная не используется, она тут не подходит, к тому-же выполняется на мастере.
подскажите в каком направлении копать? и в целом это возможно? (т.е. сегодня восстановить полный бэкап, а потом каждый день применять бэкап лога транзакций. При этом каждый раз не восстанавливать полный бэкап)
26 дек 17, 09:13    [21062097]     Ответить | Цитировать Сообщить модератору
 Re: добавление логов к существующей базе (репликация логов)  [new]
Ennor Tiegael
Member

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

Вы путаете репликацию транзакций и Log shipping. Это разные вещи, совсем.
26 дек 17, 09:16    [21062099]     Ответить | Цитировать Сообщить модератору
 Re: добавление логов к существующей базе (репликация логов)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
pumpurumer
да, знаю есть встроенная репликация в MSSQL, и один из способов её работы - как раз репликация лога транзакций.
Транзакционная репликация ("встроенная") "накатывает" лог немножко другим способом, не так, как это делает команда RESTORE LOG
Так что либо используйте стандартную транзакционную репликацию, либо пишите свою, разбирая команды из лога (ИМХО малореально).
26 дек 17, 09:42    [21062147]     Ответить | Цитировать Сообщить модератору
 Re: добавление логов к существующей базе (репликация логов)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
pumpurumer
задача: реплицировать информацию из продакшена в bi и test

А Вы действительно хотите реплицировать?
Просто, судя по названию БД, она предназначена для тестирования. Выделение БД для тестирования, подразумевает, что в ней будут происходить какие-то модификации в целях тестирования, что не допустимо на реплицируемой БД.
26 дек 17, 10:15    [21062237]     Ответить | Цитировать Сообщить модератору
 Re: добавление логов к существующей базе (репликация логов)  [new]
pumpurumer
Member

Откуда:
Сообщений: 11
из формулировки задачи убираем слова про тестовую базу.
база для аналитики, база на резервном сервере.
могут отставать от продакшена на скажем сутки. лучше - меньше.
не хочется каждый раз делать восстановление от полного бэкапа.
не хочется иметь прямую связь между серверами.
хочется как-то докатывать бэкап лога транзакций на базу ранее поднятую из полного бэкапа.
доступ к целевой базе нужен только на чтение.
варианты:
поднимать полный бэкап - медлянно.
использовать в каком-то виде версионирование (т.е. либо встроенный функционал отслеживания изменений, либо кастомный через тригеры и таблицы, либо через rowversion) - все замечательно, пока не меняется схема базы.
хочется чего-то более простого и в то-же время надежного.

т.е. если я правильно понимаю - транзакционная репликация разбирает лог и применяет его к целевой базе. ручками это сделать нельзя (без создания репликации на мастер сервере и первоначальной её настройки).
невозможно стандартными средсвами взять логи транзакций и накатить его на read-only базу данных.
все верно?
26 дек 17, 11:28    [21062525]     Ответить | Цитировать Сообщить модератору
 Re: добавление логов к существующей базе (репликация логов)  [new]
человек_ниоткуда
Guest
pumpurumer
хочется как-то докатывать бэкап лога транзакций на базу ранее поднятую из полного бэкапа.
доступ к целевой базе нужен только на чтение.

Вот тебе пути поиска:
Поднять один раз бекап с norecovery, и потом догнать бекап логами с STANBY. Потом можно догнать его diff (вот не уверен, но по логике это можно) - бекапом и снова логами со STANDBY.
Настроить acync mirroring на сервер аналитики и периодически делать snapshot - который и будет для аналитиков.
Настроить alwaysOn.

pumpurumer
т.е. если я правильно понимаю...

нет неправильно понимаешь ;) выше тебе объяснили.
26 дек 17, 11:43    [21062585]     Ответить | Цитировать Сообщить модератору
 Re: добавление логов к существующей базе (репликация логов)  [new]
ptr128
Member

Откуда: Moscow
Сообщений: 398
pumpurumer
база для аналитики, база на резервном сервере.
могут отставать от продакшена на скажем сутки. лучше - меньше.

Тогда эта задача ближе к репликации снапшотами, а не транзакциями.
26 дек 17, 11:48    [21062616]     Ответить | Цитировать Сообщить модератору
 Re: добавление логов к существующей базе (репликация логов)  [new]
pumpurumer
Member

Откуда:
Сообщений: 11
удалось сделать через восстановление полного бэкапа + логи через standby
RESTORE DATABASE [dbname] FROM 
		DISK='.....7203500.full.bak'
        WITH 
		REPLACE,
        	NORECOVERY,
        	MOVE 'dbname' TO 'F:\dev-db\dbname.mdf',
        	MOVE 'dbname_log' TO 'F:\dev-db\dbname_log.ldf';
			
		RESTORE DATABASE [dbname] FROM 
        DISK='.....7606787.diff.bak'
        WITH 
    	   NORECOVERY;
go

-- на этом этапе база данных не доступна

RESTORE LOG [dbname]
	FROM DISK = '.....2017_12_26_092451_5463353.trn'
	with STANDBY = N'c:\temp\standbay_......tuf'
GO

-- Приехал первый бэкап лога, база стала доступной

RESTORE LOG [dbname]
	FROM DISK = '.......2017_12_26_141358_4239175.trn'
	with STANDBY = N'c:\temp\standbay_.......tuf'
GO

-- Приехал второй бэкап лога, база вновь доступна на чтение и в ней свежие данные.


наверное если на первом этапе вместо NORECOVERY добавить STANDBY = N'c:\temp\standbay_.......tuf' - можно будет сразу получить доступную на чтение базу.

осталось теперь понять что лежит в файле который указывается в c:\temp\standbay и сколько раз можно так сделать (
RESTORE LOG with STANDBY), до потери производительности. и где нужно производить очистку чего-либо после таких операций.

всем спасибо.
26 дек 17, 13:28    [21063006]     Ответить | Цитировать Сообщить модератору
 Re: добавление логов к существующей базе (репликация логов)  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31354
pumpurumer
осталось теперь понять что лежит в файле который указывается в c:\temp\standbay и сколько раз можно так сделать (
RESTORE LOG with STANDBY), до потери производительности. и где нужно производить очистку чего-либо после таких операций.
Этот файл сам удалится при следующей операции RESTORE LOG. А нужен он во время следующей операции RESTORE LOG, так что если вы его удалите, то придётся начать с RESTORE DATABASE
26 дек 17, 17:36    [21064240]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить