powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите про репликацию транзакцией.
25 сообщений из 30, страница 1 из 2
Подскажите про репликацию транзакцией.
    #39866976
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем добрый день.
Собственно возникли вопросы по принципу работы данного типа репликации.
Есть два сервера, на сервере А есть таблица с 1.2млрд записей, на сервере Б есть копия этой таблицы, но без части полей из таблицы на сервере А.

Собственно, таблица на сервере Б (копия) была восстановлена и теперь требуется синхронизировать данные обоих таблиц в одностороннем порядке.

Как я понимаю, в данном случае, как раз подойдет метод репликации.

Теперь, про механику происходящего. На сервере А создается снапшот реплицируемых данных, в случае с репликацией транзакциями таблица на сервере А не блокируется. После того как снапшот готов, что произойдет с данными в таблице на сервере Б? Имеющиеся данные в таблице получателе останутся в ней доступны? Как будет проходить выявление расхождений в таблицах? Репликация просто добавит недостающую часть в таблицу получателя или полностью пересоздаст её?
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39866991
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,
для начала, как мне кажется, надо понять, что нет репликации транзакци ЕЙ/ЯМИ , а есть репликация транзакци Й . Исходя из этого ваши вопросы становятся несколько, э..., не совсем понятными...
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39866998
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

О какой репликации идет речь? О репликации лога. Тогда транзакции будут реплицироваться как есть, все пишеться в лог, лог реплицируется, на другом сервере повторяется commit или rollback.

Если речь идет о merge репликации, то записи будут сравниваться и передаваться путем команды merge.

В любом случае вы получите копию данных и они будут целостны, если не использовать READ UNCOMMITED.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867026
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey Sizov, спасибо за замечание.

Что касается транзакций, я понимаю, что для того, что-бы синхронизировать данные при помощи транзакций, необходимо, что-бы обе базы данных (если брать Транзакт Лог Шипинг), изначально должны находится в одном состоянии, например база приемник должна быть развернута из полного бэкапа базы источника.

Что касается моего вопроса, у меня есть 2 таблицы, обе в продакшене и сейчас между ними появилось расхождение. Если я создам репликацию между этими двумя таблицами, что произойдет с данными в таблице приемнике (они там уже есть и их очень много).
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867031
Sergey Sizov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCaSergey Sizov, спасибо за замечание.

при помощи транзакцийНе при помощи, а путем переноса транзакций. Имеющихся/появляющихся в логе.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867043
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCaЧто касается моего вопроса, у меня есть 2 таблицы, обе в продакшене и сейчас между ними появилось расхождение. Если я создам репликацию между этими двумя таблицами, что произойдет с данными в таблице приемнике (они там уже есть и их очень много).Если репликация с инициализацией, то таблица на втором сервере станет копией таблицы из первого сервера, и далее эта идентичность таблиц будет поддерживаться.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867053
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgteCaЧто касается моего вопроса, у меня есть 2 таблицы, обе в продакшене и сейчас между ними появилось расхождение. Если я создам репликацию между этими двумя таблицами, что произойдет с данными в таблице приемнике (они там уже есть и их очень много).Если репликация с инициализацией, то таблица на втором сервере станет копией таблицы из первого сервера, и далее эта идентичность таблиц будет поддерживаться.
Это я понял, я не понимаю каким образом она станет копией если в ней уже есть часть данных. Таблица просто пересоздастся целиком или сервер как то сравнит данные в этих таблицах?
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867054
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCaЭто я понял, я не понимаю каким образом она станет копией если в ней уже есть часть данных. Таблица просто пересоздастся целиком или сервер как то сравнит данные в этих таблицах?Да, технически это будет сделано путём пересоздания таблицы, и загрузки (bcp) в неё данных из публикации.

Стандартное сравнение делать слишком долго, намного дольше, чем перезалить.

Если таблица очень большая, и вы не хотите, что бы она загружалась с нуля, то можно выполнить начальную синхронизацию самому (если вы знаете, исходя из бизнес-логики данных, как это сделать быстрее, чем инициализация стандартными средствами).
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867057
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Спасибо.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867077
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgteCaЭто я понял, я не понимаю каким образом она станет копией если в ней уже есть часть данных. Таблица просто пересоздастся целиком или сервер как то сравнит данные в этих таблицах?Да, технически это будет сделано путём пересоздания таблицы, и загрузки (bcp) в неё данных из публикации.

Стандартное сравнение делать слишком долго, намного дольше, чем перезалить.

Если таблица очень большая, и вы не хотите, что бы она загружалась с нуля, то можно выполнить начальную синхронизацию самому (если вы знаете, исходя из бизнес-логики данных, как это сделать быстрее, чем инициализация стандартными средствами).

Еще один вопрос, если в таблице приемнике мне не нужны все столбцы таблицы источника, в этом случае нужно применить фильтр при настройке репликации?
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867078
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCaalexeyvgпропущено...
Да, технически это будет сделано путём пересоздания таблицы, и загрузки (bcp) в неё данных из публикации.

Стандартное сравнение делать слишком долго, намного дольше, чем перезалить.

Если таблица очень большая, и вы не хотите, что бы она загружалась с нуля, то можно выполнить начальную синхронизацию самому (если вы знаете, исходя из бизнес-логики данных, как это сделать быстрее, чем инициализация стандартными средствами).

Еще один вопрос, если в таблице приемнике мне не нужны все столбцы таблицы источника, в этом случае нужно применить фильтр при настройке репликации?

Все, понял, что просто публикуемые столбы я выбираю.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867081
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCateCaЕще один вопрос, если в таблице приемнике мне не нужны все столбцы таблицы источника, в этом случае нужно применить фильтр при настройке репликации?
Все, понял, что просто публикуемые столбы я выбираю.Да, можно выбрать не все столбцы.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867237
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgДа, можно выбрать не все столбцы.
и не все строчки )
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867727
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Немножко я всё поломал :(
Собственно дело в следующем.
Я создал репликацию транзакций на сервере издателе, на нем уже была настроена репликация снапшотом одной из таблиц БД.
Репликацию я создал, но так как принял решение восстановить разрыв другими средствами, то решил, что в данной репликации я не нуждаюсь и решил, что достаточно будет отключить Snapshot Agent и Log Reader Agent.
Но спустя сутки увидел что Log транзакций занял всё свободное место на диске, как я понял, транзакции в логе сохранялись, так как Log Reader Agent был остановлен. Приняв решение удалить эту репликацию, на сервере издателе я через визард Disable Publishing and Distribution выбрал мою публикацию и отключил её. Но при этом, чего я не ожидал пропала Публикация снапшотом, которую я не собирался трогать. Подписка на получателе осталась, а публикация пропала. Создав публикацию заново, я уже не смог создать подписку, сервер выдал следующую ошибку.

авторA push subscription to the publication exists. Use sp_subscription_cleanup to drop defunct push subscriptions.
Cannot add a Distribution Agent at the Subscriber for a push subscription.
Changed database context to

Подскажите, как мне поступить дальше, что-бы восстановить нужную репликацию и что я сделал не так в своих действиях, что-бы впредь не наступать на эти грабли. Спасибо.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867832
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

Ну собственно изучив вопрос, убил старую подписку (так как это действие не трогает данные в получателе) и пересоздал её для новой публикации. Снапшот создается при инициализации подписчика.

Как я понимаю, данные будут реплицированы после создания снапшота, а снопшот создастся после инициализации подписчиком.

Правильно я понимаю?
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867846
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCaРепликацию я создал, но так как принял решение восстановить разрыв другими средствами, то решил, что в данной репликации я не нуждаюсь и решил, что достаточно будет отключить Snapshot Agent и Log Reader Agent.Не, так неправильно.

Отключив Snapshot агента, вы просто отключили вызов проги, которая создаёт снапшот.
Но при этом у вас есть репликация, которая находится в статусе ожидание инициализации базы.

А отключив Log Reader Agent, вы отключили одну из подсистем того, что, собственно, является системой репликации транзакций.

А вам нужно было просто установить свойство "сделаю инициализацию сам".
То есть при создании подписки (sp_addsubscription), указать параметр @sync_type = 'replication support only'

teCaСоздав публикацию заново, я уже не смог создать подписку, сервер выдал следующую ошибку.

авторA push subscription to the publication exists. Use sp_subscription_cleanup to drop defunct push subscriptions.
Cannot add a Distribution Agent at the Subscriber for a push subscription.
Changed database context toТак надо удалить старую подписку. Вам же сервер подсказывает в сообщении об ошибке.

Можете посмотреть публикации:
Код: sql
1.
select * from [dbo].[syspublications]


Найти старую публикацию, и потом удалить старую подписку, используя найденное имя:
Код: sql
1.
2.
3.
4.
exec sp_dropsubscription
	@publication = 'имя публикации',
	@article= N'all',
	@subscriber = N'all';


Наверное, если неохота разбираться скриптами, можно сделать всё это мышкой, но я не уверен, не подскажу, как.

Вообще, изучение системы репликации MS SQL лучше начинать с скриптов.
И не переходить к репликационным GUI в SSMS, пока не научишся создавать и менять публикации, создавать и удалять подписки, проводить запуск и остановку, делать инициализацию.
Тогда появятся хоть какие то основы знаний о том, как это всё устроено.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867852
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCaКак я понимаю, данные будут реплицированы после создания снапшота, а снопшот создастся после инициализации подписчиком.Снапшот будет создан тогда, когда какая то из подписок его запросит, потому что он ей нужен для инициализации (а его при этом нет).
Если его запросит ещё пяток подписок, то повторно он создаваться не будет.

После создания репликации данные копятся в логе транзакций.
Потом лог ридер агент их читает, и отправляет подписчикам.
Подписчики применяют лог у себя, если они не нуждаются в инициализации (то есть, если она уже сделана, либо она вообще не нужна)

PS Инициализация, кстати, не обязательно должна делаться снапшотом, её сервер может сделать через бакап.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39867872
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Спасибо Алексей за ваши ответы. В скриптах разбираться не лень, просто с темой репликаций в своей практике столкнулся впервые, а на поверхности мануалы использующие гуи.

Собственно именно момент накопления лога транзакция я и не учел.

Подскажите, в данный момент я создал новую публикацию, но уже не транзакций, а снапшота. Данная табличка не очень большая (300 000 строк) и данные в ней изменяются очень редко. Как я понимаю, репликация снапшотом в данном случае подходит. При данном виде репликации я вижу только Snapshot Agent, который находится сейчас в режиме:

автор[0%] A snapshot was not generated because no subscriptions needed initialization.

Почему я не вижу Log Reader Agent? Как я понимаю, именно он должен отправить информацию подписчику, а тот в свою очередь инициировать новый снапшот?
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39868146
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCaПодскажите, в данный момент я создал новую публикацию, но уже не транзакций, а снапшота. Данная табличка не очень большая (300 000 строк) и данные в ней изменяются очень редко. Как я понимаю, репликация снапшотом в данном случае подходит.

Почему я не вижу Log Reader Agent? Как я понимаю, именно он должен отправить информацию подписчику, а тот в свою очередь инициировать новый снапшот?
Log Reader Agent читает лог, и отправляет транзакции подписчикам.
К снапшоту он не имеет отношения, и к снапшот репликации тоже, потому что ей не нужны транзакции.
То есть, запомните: Log Reader Agent - читатель лога транзакций, и больше ничего.

Снапшот-репликация периодически (или один раз) накатывает снапшот на подписчика, для чего подписка сама его дёргает.

Если репликация транзакционная, то Log Reader Agent тоже не занимается снапшотами. Их запрашивает подписка.

teCaПри данном виде репликации я вижу только Snapshot Agent, который находится сейчас в режиме:

автор[0%] A snapshot was not generated because no subscriptions needed initialization.Режим такой, потому что вы не сделали подписку.

Snapshot Agent ждёт, когда понадобится снапшот (для репликации любого типа), и вот когда понадобится, он его сделает.
Соответственно, пока подписки нет, ничего делать не надо.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39868960
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Подписку я создал.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39869491
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCaПодписку я создал.Подписка видна, но, может, она для той, удалённой публикации?
Конечно, лечить на расстоянии сложно, "у меня не работает", а почему не работает? Вы же понимаете, что вам никто не ответит, что "у микрософта не работают подписки".
Тут варианты простые - либо вы не так создаёте публикацию/подписку, либо вы руками что то сломали (типа джобов)

Можно попытаться всё удалить (подписку и публикацию), а потом отключить функциональность репликации (то есть подписчика, публикатора и дистрибьютора - все три).
А потом всё включить, и настроить заново
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39869723
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

Нет, вы не поняли. Подписка создана новая и она работает, мне интересно, в какой момент времени должен создаться снапшот.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39869745
teCa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

Учитывая, что эта подписка создана заново и снапшот для этой подписки никогда не создавался. Получается, что сейчас есть 2 таблицы между которыми настроена репликация, в обеих таблицах данные, в случае репликации транзакций, Log Reader отправляет подписчикам список транзакций, и как я понял, подписчик либо их применит либо может инициировать создание нового снапшота. А в случае репликации снапшотом, на моем примере, когда создастся снапшот, кто инициирует создание снапшота и на чем будет основана инициация.
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39869887
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCaПодписка создана новая и она работаетА, то есть снапшот был создан, и передался на подписчик(ов)?
teCaмне интересно, в какой момент времени должен создаться снапшот.Как указано в подписке.
Если, например, указано, что снапшот должен создаваться раз в сутки, то в первый раз он будет сделан при создании подписки, а потом с интервалом в сутки.
teCaА в случае репликации снапшотом, на моем примере, когда создастся снапшот, кто инициирует создание снапшота и на чем будет основана инициация.Я же писал: инициализирует подписка, а когда - зависит от её настроек.

Вы же указади, с какой частотой нужно делать снапшоты, и что после создания подписки тоже нужно сделать снапшот?
...
Рейтинг: 0 / 0
Подскажите про репликацию транзакцией.
    #39869902
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
teCa,

Попробуйте ещё нажать ПКМ на публикацию, а потом View Shapchot Agent Status, и если там ничего, то нажать Start
Бывает, ошибки доступа вылезают.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите про репликацию транзакцией.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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