powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / добавление логов к существующей базе (репликация логов)
9 сообщений из 9, страница 1 из 1
добавление логов к существующей базе (репликация логов)
    #39575845
pumpurumer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
задача: реплицировать информацию из продакшена в bi и test
ранее "репликация" выглядела как поднятие бэкапа (полный+ночной инкрементальный). Полный раз в неделю, инкремент каждую ночь.
что-то подсказывает что можно эту задачу упросить (с точки зрения нагрузки на систему, нагрузки на диск, на сеть), по средствам репликации логов транзакций.
да, знаю есть встроенная репликация в MSSQL, и один из способов её работы - как раз репликация лога транзакций.
только я не могу найти как сделать это ручками.
т.е. понятно что надо восстановится из полного бэкапа, а затем накатывать лог транзакций.
пробовал так:
RESTORE LOG [dbname] FROM DISK = '\\192.168....\...trn'
GO
говорят "Невозможно восстановить журнал или разностную резервную копию, так как нет файлов, готовых к накату."
на сколько я понимаю - данное сообщение я получаю, потому что ранее база данных была восстановлена в режиме RECOVERY (т.е. отменены все не заверенные транзакции)
если делать с параметром NORECOVERY, то данные прочитать потом нельзя.
нашел так-же хранимку sp_change_log_shipping_secondary_database - но у меня же репликация стандартная не используется, она тут не подходит, к тому-же выполняется на мастере.
подскажите в каком направлении копать? и в целом это возможно? (т.е. сегодня восстановить полный бэкап, а потом каждый день применять бэкап лога транзакций. При этом каждый раз не восстанавливать полный бэкап)
...
Рейтинг: 0 / 0
добавление логов к существующей базе (репликация логов)
    #39575846
Фотография Ennor Tiegael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pumpurumer,

Вы путаете репликацию транзакций и Log shipping. Это разные вещи, совсем.
...
Рейтинг: 0 / 0
добавление логов к существующей базе (репликация логов)
    #39575863
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pumpurumerда, знаю есть встроенная репликация в MSSQL, и один из способов её работы - как раз репликация лога транзакций.Транзакционная репликация ("встроенная") "накатывает" лог немножко другим способом, не так, как это делает команда RESTORE LOG
Так что либо используйте стандартную транзакционную репликацию, либо пишите свою, разбирая команды из лога (ИМХО малореально).
...
Рейтинг: 0 / 0
добавление логов к существующей базе (репликация логов)
    #39575879
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pumpurumerзадача: реплицировать информацию из продакшена в bi и test

А Вы действительно хотите реплицировать?
Просто, судя по названию БД, она предназначена для тестирования. Выделение БД для тестирования, подразумевает, что в ней будут происходить какие-то модификации в целях тестирования, что не допустимо на реплицируемой БД.
...
Рейтинг: 0 / 0
добавление логов к существующей базе (репликация логов)
    #39575942
pumpurumer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
из формулировки задачи убираем слова про тестовую базу.
база для аналитики, база на резервном сервере.
могут отставать от продакшена на скажем сутки. лучше - меньше.
не хочется каждый раз делать восстановление от полного бэкапа.
не хочется иметь прямую связь между серверами.
хочется как-то докатывать бэкап лога транзакций на базу ранее поднятую из полного бэкапа.
доступ к целевой базе нужен только на чтение.
варианты:
поднимать полный бэкап - медлянно.
использовать в каком-то виде версионирование (т.е. либо встроенный функционал отслеживания изменений, либо кастомный через тригеры и таблицы, либо через rowversion) - все замечательно, пока не меняется схема базы.
хочется чего-то более простого и в то-же время надежного.

т.е. если я правильно понимаю - транзакционная репликация разбирает лог и применяет его к целевой базе. ручками это сделать нельзя (без создания репликации на мастер сервере и первоначальной её настройки).
невозможно стандартными средсвами взять логи транзакций и накатить его на read-only базу данных.
все верно?
...
Рейтинг: 0 / 0
добавление логов к существующей базе (репликация логов)
    #39575961
pumpurumerхочется как-то докатывать бэкап лога транзакций на базу ранее поднятую из полного бэкапа.
доступ к целевой базе нужен только на чтение.

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

pumpurumerт.е. если я правильно понимаю...
нет неправильно понимаешь ;) выше тебе объяснили.
...
Рейтинг: 0 / 0
добавление логов к существующей базе (репликация логов)
    #39575972
Фотография ptr128
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pumpurumerбаза для аналитики, база на резервном сервере.
могут отставать от продакшена на скажем сутки. лучше - меньше.

Тогда эта задача ближе к репликации снапшотами , а не транзакциями.
...
Рейтинг: 0 / 0
добавление логов к существующей базе (репликация логов)
    #39576066
pumpurumer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
удалось сделать через восстановление полного бэкапа + логи через standby
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
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), до потери производительности. и где нужно производить очистку чего-либо после таких операций.

всем спасибо.
...
Рейтинг: 0 / 0
добавление логов к существующей базе (репликация логов)
    #39576319
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pumpurumerосталось теперь понять что лежит в файле который указывается в c:\temp\standbay и сколько раз можно так сделать (
RESTORE LOG with STANDBY), до потери производительности. и где нужно производить очистку чего-либо после таких операций.Этот файл сам удалится при следующей операции RESTORE LOG. А нужен он во время следующей операции RESTORE LOG, так что если вы его удалите, то придётся начать с RESTORE DATABASE
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / добавление логов к существующей базе (репликация логов)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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