Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
Всем добрый день. Собственно возникли вопросы по принципу работы данного типа репликации. Есть два сервера, на сервере А есть таблица с 1.2млрд записей, на сервере Б есть копия этой таблицы, но без части полей из таблицы на сервере А. Собственно, таблица на сервере Б (копия) была восстановлена и теперь требуется синхронизировать данные обоих таблиц в одностороннем порядке. Как я понимаю, в данном случае, как раз подойдет метод репликации. Теперь, про механику происходящего. На сервере А создается снапшот реплицируемых данных, в случае с репликацией транзакциями таблица на сервере А не блокируется. После того как снапшот готов, что произойдет с данными в таблице на сервере Б? Имеющиеся данные в таблице получателе останутся в ней доступны? Как будет проходить выявление расхождений в таблицах? Репликация просто добавит недостающую часть в таблицу получателя или полностью пересоздаст её? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 16:25 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCa, для начала, как мне кажется, надо понять, что нет репликации транзакци ЕЙ/ЯМИ , а есть репликация транзакци Й . Исходя из этого ваши вопросы становятся несколько, э..., не совсем понятными... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 16:58 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCa, О какой репликации идет речь? О репликации лога. Тогда транзакции будут реплицироваться как есть, все пишеться в лог, лог реплицируется, на другом сервере повторяется commit или rollback. Если речь идет о merge репликации, то записи будут сравниваться и передаваться путем команды merge. В любом случае вы получите копию данных и они будут целостны, если не использовать READ UNCOMMITED. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 17:09 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
Sergey Sizov, спасибо за замечание. Что касается транзакций, я понимаю, что для того, что-бы синхронизировать данные при помощи транзакций, необходимо, что-бы обе базы данных (если брать Транзакт Лог Шипинг), изначально должны находится в одном состоянии, например база приемник должна быть развернута из полного бэкапа базы источника. Что касается моего вопроса, у меня есть 2 таблицы, обе в продакшене и сейчас между ними появилось расхождение. Если я создам репликацию между этими двумя таблицами, что произойдет с данными в таблице приемнике (они там уже есть и их очень много). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 17:33 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCaSergey Sizov, спасибо за замечание. при помощи транзакцийНе при помощи, а путем переноса транзакций. Имеющихся/появляющихся в логе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 17:37 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCaЧто касается моего вопроса, у меня есть 2 таблицы, обе в продакшене и сейчас между ними появилось расхождение. Если я создам репликацию между этими двумя таблицами, что произойдет с данными в таблице приемнике (они там уже есть и их очень много).Если репликация с инициализацией, то таблица на втором сервере станет копией таблицы из первого сервера, и далее эта идентичность таблиц будет поддерживаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 17:59 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
alexeyvgteCaЧто касается моего вопроса, у меня есть 2 таблицы, обе в продакшене и сейчас между ними появилось расхождение. Если я создам репликацию между этими двумя таблицами, что произойдет с данными в таблице приемнике (они там уже есть и их очень много).Если репликация с инициализацией, то таблица на втором сервере станет копией таблицы из первого сервера, и далее эта идентичность таблиц будет поддерживаться. Это я понял, я не понимаю каким образом она станет копией если в ней уже есть часть данных. Таблица просто пересоздастся целиком или сервер как то сравнит данные в этих таблицах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 18:56 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCaЭто я понял, я не понимаю каким образом она станет копией если в ней уже есть часть данных. Таблица просто пересоздастся целиком или сервер как то сравнит данные в этих таблицах?Да, технически это будет сделано путём пересоздания таблицы, и загрузки (bcp) в неё данных из публикации. Стандартное сравнение делать слишком долго, намного дольше, чем перезалить. Если таблица очень большая, и вы не хотите, что бы она загружалась с нуля, то можно выполнить начальную синхронизацию самому (если вы знаете, исходя из бизнес-логики данных, как это сделать быстрее, чем инициализация стандартными средствами). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 19:00 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 19:06 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
alexeyvgteCaЭто я понял, я не понимаю каким образом она станет копией если в ней уже есть часть данных. Таблица просто пересоздастся целиком или сервер как то сравнит данные в этих таблицах?Да, технически это будет сделано путём пересоздания таблицы, и загрузки (bcp) в неё данных из публикации. Стандартное сравнение делать слишком долго, намного дольше, чем перезалить. Если таблица очень большая, и вы не хотите, что бы она загружалась с нуля, то можно выполнить начальную синхронизацию самому (если вы знаете, исходя из бизнес-логики данных, как это сделать быстрее, чем инициализация стандартными средствами). Еще один вопрос, если в таблице приемнике мне не нужны все столбцы таблицы источника, в этом случае нужно применить фильтр при настройке репликации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 20:12 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCaalexeyvgпропущено... Да, технически это будет сделано путём пересоздания таблицы, и загрузки (bcp) в неё данных из публикации. Стандартное сравнение делать слишком долго, намного дольше, чем перезалить. Если таблица очень большая, и вы не хотите, что бы она загружалась с нуля, то можно выполнить начальную синхронизацию самому (если вы знаете, исходя из бизнес-логики данных, как это сделать быстрее, чем инициализация стандартными средствами). Еще один вопрос, если в таблице приемнике мне не нужны все столбцы таблицы источника, в этом случае нужно применить фильтр при настройке репликации? Все, понял, что просто публикуемые столбы я выбираю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 20:15 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCateCaЕще один вопрос, если в таблице приемнике мне не нужны все столбцы таблицы источника, в этом случае нужно применить фильтр при настройке репликации? Все, понял, что просто публикуемые столбы я выбираю.Да, можно выбрать не все столбцы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.09.2019, 20:46 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
alexeyvgДа, можно выбрать не все столбцы. и не все строчки ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2019, 11:39 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
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 Подскажите, как мне поступить дальше, что-бы восстановить нужную репликацию и что я сделал не так в своих действиях, что-бы впредь не наступать на эти грабли. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 10:35 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCa, Ну собственно изучив вопрос, убил старую подписку (так как это действие не трогает данные в получателе) и пересоздал её для новой публикации. Снапшот создается при инициализации подписчика. Как я понимаю, данные будут реплицированы после создания снапшота, а снопшот создастся после инициализации подписчиком. Правильно я понимаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 13:15 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
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. Найти старую публикацию, и потом удалить старую подписку, используя найденное имя: Код: sql 1. 2. 3. 4. Наверное, если неохота разбираться скриптами, можно сделать всё это мышкой, но я не уверен, не подскажу, как. Вообще, изучение системы репликации MS SQL лучше начинать с скриптов. И не переходить к репликационным GUI в SSMS, пока не научишся создавать и менять публикации, создавать и удалять подписки, проводить запуск и остановку, делать инициализацию. Тогда появятся хоть какие то основы знаний о том, как это всё устроено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 13:37 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCaКак я понимаю, данные будут реплицированы после создания снапшота, а снопшот создастся после инициализации подписчиком.Снапшот будет создан тогда, когда какая то из подписок его запросит, потому что он ей нужен для инициализации (а его при этом нет). Если его запросит ещё пяток подписок, то повторно он создаваться не будет. После создания репликации данные копятся в логе транзакций. Потом лог ридер агент их читает, и отправляет подписчикам. Подписчики применяют лог у себя, если они не нуждаются в инициализации (то есть, если она уже сделана, либо она вообще не нужна) PS Инициализация, кстати, не обязательно должна делаться снапшотом, её сервер может сделать через бакап. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 13:45 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Спасибо Алексей за ваши ответы. В скриптах разбираться не лень, просто с темой репликаций в своей практике столкнулся впервые, а на поверхности мануалы использующие гуи. Собственно именно момент накопления лога транзакция я и не учел. Подскажите, в данный момент я создал новую публикацию, но уже не транзакций, а снапшота. Данная табличка не очень большая (300 000 строк) и данные в ней изменяются очень редко. Как я понимаю, репликация снапшотом в данном случае подходит. При данном виде репликации я вижу только Snapshot Agent, который находится сейчас в режиме: автор[0%] A snapshot was not generated because no subscriptions needed initialization. Почему я не вижу Log Reader Agent? Как я понимаю, именно он должен отправить информацию подписчику, а тот в свою очередь инициировать новый снапшот? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 14:15 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
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 ждёт, когда понадобится снапшот (для репликации любого типа), и вот когда понадобится, он его сделает. Соответственно, пока подписки нет, ничего делать не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.09.2019, 20:35 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Подписку я создал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2019, 10:38 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCaПодписку я создал.Подписка видна, но, может, она для той, удалённой публикации? Конечно, лечить на расстоянии сложно, "у меня не работает", а почему не работает? Вы же понимаете, что вам никто не ответит, что "у микрософта не работают подписки". Тут варианты простые - либо вы не так создаёте публикацию/подписку, либо вы руками что то сломали (типа джобов) Можно попытаться всё удалить (подписку и публикацию), а потом отключить функциональность репликации (то есть подписчика, публикатора и дистрибьютора - все три). А потом всё включить, и настроить заново ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2019, 19:58 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
alexeyvg, Нет, вы не поняли. Подписка создана новая и она работает, мне интересно, в какой момент времени должен создаться снапшот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2019, 10:27 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCa, Учитывая, что эта подписка создана заново и снапшот для этой подписки никогда не создавался. Получается, что сейчас есть 2 таблицы между которыми настроена репликация, в обеих таблицах данные, в случае репликации транзакций, Log Reader отправляет подписчикам список транзакций, и как я понял, подписчик либо их применит либо может инициировать создание нового снапшота. А в случае репликации снапшотом, на моем примере, когда создастся снапшот, кто инициирует создание снапшота и на чем будет основана инициация. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2019, 10:44 |
|
||
|
Подскажите про репликацию транзакцией.
|
|||
|---|---|---|---|
|
#18+
teCaПодписка создана новая и она работаетА, то есть снапшот был создан, и передался на подписчик(ов)? teCaмне интересно, в какой момент времени должен создаться снапшот.Как указано в подписке. Если, например, указано, что снапшот должен создаваться раз в сутки, то в первый раз он будет сделан при создании подписки, а потом с интервалом в сутки. teCaА в случае репликации снапшотом, на моем примере, когда создастся снапшот, кто инициирует создание снапшота и на чем будет основана инициация.Я же писал: инициализирует подписка, а когда - зависит от её настроек. Вы же указади, с какой частотой нужно делать снапшоты, и что после создания подписки тоже нужно сделать снапшот? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2019, 13:00 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=87&tid=1687209]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
30ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 359ms |

| 0 / 0 |
