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

Откуда:
Сообщений: 22
Привет!
Возникла снова проблемка)
Необходимо иметь локальную БД на устройстве и "центральную" на "сервере", данные должны синхронизироватся из обеих баз друг в друга. При отсутсвии связи с сервером Пользователь сможет работать с текущими данными (преимущественно это добавление новых данных, зависимости от получения данных с сервера при добавлении нет).

Есть два варианта возможной реализации:
- Создание ручного скрипа (TSQL, хранимая процедура). однако это потребует значительных усилий.
- использование реплик. Впринципе, тут все понятно, однако не совсем ясен механизм работы при совпадении записей - например, во время отсутствия связи на Сервер внесли новую запись в таблицу. Запись получила ID=455, на этот айди завязались данные из другой таблицы, и в это же время на "локальной" бд тоже вносится запись совершенно другова значения, и ей тоже наверное присвоится id 455?.

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

Подписки и публикация создается, но (журнал на локальном):
автор
Дата,Источник,Серьезность,Идентификатор шага,Сервер,Имя задания,Имя шага,Уведомления,Сообщение,Продолжительность,Серьезность Sql,Идентификатор Sql-сообщения,Оператору отправлено сообщение электронной почты,Оператору отправлено сообщение командой Net send,Оператору отправлено сообщение на пейджер,Предпринято повторов
09/15/2011 17:25:25,SERVER-sync_test-repl-CHELPC-sync_test_rep- 0,Ошибка,0,CHELPC,SERVER-sync_test-repl-CHELPC-sync_test_rep- 0,(результат выполнения задания),,Не удалось завершить задание. Запуск задания был произведен Пользователь sa. Последним выполнявшимся шагом был шаг 1 (Запустить агента.).,00:01:12,0,0,,,,0
09/15/2011 17:25:25,SERVER-sync_test-repl-CHELPC-sync_test_rep- 0,Ошибка,1,CHELPC,SERVER-sync_test-repl-CHELPC-sync_test_rep- 0,Запустить агента.,,Выполняется от имени пользователя: CHELPC\User.Произошел сбой в агенте репликации. Дополнительные сведения см. в журнале в сообщении для предыдущего шага задания или в мониторе репликации. Шаг завершился с ошибкой.,00:01:12,0,0,,,,0
09/15/2011 17:25:25,SERVER-sync_test-repl-CHELPC-sync_test_rep- 0,Выполняется,1,CHELPC,SERVER-sync_test-repl-CHELPC-sync_test_rep- 0,Запустить агента.,,2011-09-15 14:25:25.463 (c) ╩юЁяюЁрЎш  ╠рщъЁюёюЇЄ (Microsoft Corporation)<c/> 2008<nl/>2011-09-15 14:25:25.463 └ухэЄ ЁхяышърЎшш Microsoft SQL Server: replmerg<nl/>2011-09-15 14:25:25.463 <nl/>2011-09-15 14:25:25.463 ╬ЄьхЄъш тЁхьхэш фюсртыхээ√х ъ ёЄЁюърь т√їюфр юЄюсЁрцр■Єё  т ЇюЁьрЄх UTC (яю ├Ёшэтшўє).<nl/>2011-09-15 14:25:25.463 User-specified agent parameter values:<nl/> -Publisher SERVER<nl/> -PublisherDB sync_test<nl/> -Publication repl<nl/> -Subscriber CHELPC<nl/> -SubscriberDB sync_test_rep<nl/> -SubscriptionType 1<nl/> -SubscriberSecurityMode 1<nl/> -Distributor SERVER<nl/> -XJOBID 0xAFCF63A49BB7E940A6B784E9A78378C1<nl/> -XJOBNAME SERVER-sync_test-repl-CHELPC-sync_test_rep- 0<nl/> -XSTEPID 1<nl/> -XSUBSYSTEM Merge<nl/> -XSERVER CHELPC<nl/> -XCMDLINE 0<nl/> -XCancelEventHandle 00000508<nl/> -XParentProcessHandle 00000524<nl/>2011-09-15 14:25:25.473 ╤юхфшэхэшх ё ╧юфяшёўшъ "CHELPC"<nl/>2011-09-15 14:25:25.594 ╤юхфшэхэшх ё ╨рёяЁюёЄЁрэшЄхы№ "SERVER"<nl/>2011-09-15 14:25:46.624 ╧ЁюЎхёёє эх єфрыюё№ ёюхфшэшЄ№ё  ё Distributor "SERVER".<nl/>2011-09-15 14:25:46.634 Category:AGENT<nl/>Source: ╧ЁюЎхёё ёыш эш <nl/>Number: 20084<nl/>Message: ╧ЁюЎхёёє эх єфрыюё№ ёюхфшэшЄ№ё  ё Distributor "SERVER".<nl/>2011-09-15 14:25:46.634 Category:SQLSERVER<nl/>Source: SERVER<nl/>Number: 5<nl/>Message: ╧юёЄрт∙шъ шьхэютрээ√ї ърэрыют: ═х єфрыюё№ юЄъЁ√Є№ ёюхфшэхэшх ё SQL Server [5]. <nl/>2011-09-15 14:25:46.634 Category:SQLSERVER<nl/>Source: SERVER<nl/>Number: 5<nl/>Message: ╧Ёш єёЄрэютыхэшш ёюхфшэхэш  ё ёхЁтхЁюь SQL Server яЁюшчю°ыр ю°шсър<c/> ёт чрээр  ё ёхЄ№■ шыш ё юяЁхфхыхээ√ь ¤ъчхьяы Ёюь. ╤хЁтхЁ эх эрщфхэ шыш эхфюёЄєяхэ. ╙схфшЄхё№<c/> ўЄю шь  ¤ъчхьяы Ёр єърчрэю яЁртшы№эю ш эр ёхЁтхЁх SQL Server ЁрчЁх°хэ√ єфрыхээ√х ёюхфшэхэш . ─юяюыэшЄхы№э√х ётхфхэш  ёь. т ¤ыхъЄЁюээющ фюъєьхэЄрЎшш яю SQL Server.<nl/>2011-09-15 14:25:46.634 Category:SQLSERVER<nl/>Source: SERVER<nl/>Number: 0<nl/>Message: ┬Ёхь  юцшфрэш  тїюфр т ёшёЄхьє шёЄхъыю<nl/>2011-09-15 14:25:46.634 Category:SQLSERVER<nl/>Source: SERVER<nl/>Number: 0<nl/>Message: ╧ЁюЎхёёє ёыш эш  эх єфрыюё№ т√яюыэшЄ№ чряЁюё<c/> яюёъюы№ъє шёЄхъыю тЁхь  юцшфрэш  чряЁюёр. ╧Ёш яютЄюЁхэшш ¤Єющ ю°шсъш єтхышў№Єх тЁхь  юцшфрэш  чряЁюёр фы  ¤Єюую яЁюЎхёёр. ╧Ёш єёЄЁрэхэшш эхяюырфюъ чряєёЄшЄх ёшэїЁюэшчрЎш■ яютЄюЁэю<c/> тъы■ўшт тхфхэшх яюфЁюсэюую цєЁэрыр ш єърчрт т√їюфэющ Їрщы фы  чряшёш.<nl/>2011-09-15 14:25:46.634 ╧ЁюЎхёё ёыш эш  сєфхЄ яхЁхчряє∙хэ яюёых юцшфрэш  т Єхўхэшх 30 ёхъєэф...
╤юхфшэхэшх ё ╧юфяшёўшъ "CHELPC"<nl/>2011-09-15 14:26:16.637 ╤юхфшэхэшх ё ╨рёяЁюёЄЁрэшЄхы№ "SERVER"<nl/>2011-09-15 14:26:37.777 ╧ЁюЎхёёє эх єфрыюё№ ёюхфшэшЄ№ё  ё Distributor "SERVER".<nl/>2011-09-15 14:26:37.787 Category:AGENT<nl/>Source: ╧ЁюЎхёё ёыш эш <nl/>Number: 20084<nl/>Message: ╧ЁюЎхёёє эх єфрыюё№ ёюхфшэшЄ№ё  ё Distributor "SERVER".<nl/>2011-09-15 14:26:37.787 Category:SQLSERVER<nl/>Source: SERVER<nl/>Number: 5<nl/>Message: ╧юёЄрт∙шъ шьхэютрээ√ї ърэрыют: ═х єфрыюё№ юЄъЁ√Є№ ёюхфшэхэшх ё SQL Server [5]. <nl/>2011-09-15 14:26:37.787 Category:SQLSERVER<nl/>Source: SERVER<nl/>Number: 5<nl/>Message: ╧Ёш єёЄрэютыхэшш ёюхфшэхэш  ё ёхЁтхЁюь SQL Server яЁюшчю°ыр ю°шсър<c/> ёт чрээр  ё ёхЄ№■ шыш ё юяЁхфхыхээ√ь ¤ъчхьяы Ёюь. ╤хЁтхЁ эх эрщфхэ шыш эхфюёЄєяхэ. ╙схфшЄхё№<c/> ўЄю шь  ¤ъчхьяы Ёр єърчрэю яЁртшы№эю ш эр ёхЁтхЁх SQL Server ЁрчЁх°хэ√ єфрыхээ√х ёюхфшэхэш . ─юяюыэшЄхы№э√х ётхфхэш  ёь. т ¤ыхъЄЁюээющ фюъєьхэЄрЎшш яю SQL Server.<nl/>2011-09-15 14:26:37.787 Category:SQLSERVER<nl/>Source: SERVER<nl/>Number: 0<nl/>Message: ┬Ёхь  юцшфрэш  тїюфр т ёшёЄхьє шёЄхъыю<nl/>2011-09-15 14:26:37.787 Category:SQLSERVER<nl/>Source: SERVER<nl/>Number: 0<nl/>Message: ╧ЁюЎхёёє ёыш эш  эх єфрыюё№ т√яюыэшЄ№ чряЁюё<c/> яюёъюы№ъє шёЄхъыю тЁхь  юцшфрэш  чряЁюёр. ╧Ёш яютЄюЁхэшш ¤Єющ ю°шсъш єтхышў№Єх тЁхь  юцшфрэш  чряЁюёр фы  ¤Єюую яЁюЎхёёр. ╧Ёш єёЄЁрэхэшш эхяюырфюъ чряєёЄшЄх ёшэїЁюэшчрЎш■ яютЄюЁэю<c/> тъы■ўшт тхфхэшх яюфЁюсэюую цєЁэрыр ш єърчрт т√їюфэющ Їрщы фы  чряшёш.,00:01:12,0,0,,,,0
09/15/2011 17:25:25,SERVER-sync_test-repl-CHELPC-sync_test_rep- 0,Выполняется,1,CHELPC,SERVER-sync_test-repl-CHELPC-sync_test_rep- 0,Запустить агента.,,Агент репликации был успешно запущен. Дополнительные сведения см. в мониторе репликации.,00:00:00,0,0,,,,0


вот так выглядят подписки\публикации:
Картинка с другого сайта.
настройки подписки на "локальном"
Картинка с другого сайта.
После выбора пункта меню на подписке "просмотр состояния синхронизации"
Картинка с другого сайта.


Какие есть особенности создания репликаций? Подскажите пожалуйста, чего не так делаю.
может быть, есть step'by'step-мануал).

Создать реплицирование на одном сервере у меня получилось с перового раза (точнее второго - права у пользователя не было на запись в сис. папку, решилось переносом файлов реплики в другой каталог). А вот на разных серверах - никак =(.
15 сен 11, 18:46    [11283491]     Ответить | Цитировать Сообщить модератору
 Re: Создание репликации (merge)  [new]
skorpk
Member

Откуда: Волгоград
Сообщений: 276
DmitriiBond,
В просмотре журнала что показывает?
15 сен 11, 20:43    [11283887]     Ответить | Цитировать Сообщить модератору
 Re: Создание репликации (merge)  [new]
Col
Member

Откуда: Торонто
Сообщений: 186
DmitriiBond
Машины доменные или нет?
CHELPC\User на Дмирии права имеет?
16 сен 11, 03:21    [11284743]     Ответить | Цитировать Сообщить модератору
 Re: Создание репликации (merge)  [new]
DmitriiBond
Member

Откуда:
Сообщений: 22
Col
DmitriiBond
Машины доменные или нет?
CHELPC\User на Дмирии права имеет?

мм. Нет, не доменные, и доменными наверное не будут.

Всмысле права? Как настроить?
16 сен 11, 10:40    [11285553]     Ответить | Цитировать Сообщить модератору
 Re: Создание репликации (merge)  [new]
123123120
Guest
DmitriiBond
например, во время отсутствия связи на Сервер внесли новую запись в таблицу. Запись получила ID=455, на этот айди завязались данные из другой таблицы, и в это же время на "локальной" бд тоже вносится запись совершенно другова значения, и ей тоже наверное присвоится id 455?.


можно выставить разные seed value на разных серверах, например первый будет генерить идентити начиная с 1, а второй начиная с 1000000.
можно сделать джоб, который будет периодически (у нас было 1 раз в 15 минут) проверять, не пересекаются ли эти диапазоны, и если что менять seed value на каком-то из серверов.
16 сен 11, 12:44    [11286889]     Ответить | Цитировать Сообщить модератору
 Re: Создание репликации (merge)  [new]
DmitriiBond
Member

Откуда:
Сообщений: 22
Так, с ошибкой я разобрался. это все бренмауэр семерки).


Есть теперь один вопрос - могут ли быть коллизии при добавлении данных одновременно в обе таблицы при отсутсвии связи?

т.е. коллизии по идентификаторам. И как они разрешаются?
16 сен 11, 12:56    [11287004]     Ответить | Цитировать Сообщить модератору
 Re: Создание репликации (merge)  [new]
Glory
Member

Откуда:
Сообщений: 104751
все конфиликты репликации разрешаются conflict resolver-ом. Хотите - стандартным, а хотите - созданным вами лично
16 сен 11, 13:11    [11287151]     Ответить | Цитировать Сообщить модератору
 Re: Создание репликации (merge)  [new]
DmitriiBond
Member

Откуда:
Сообщений: 22
автор
можно выставить разные seed value на разных серверах, например первый будет генерить идентити начиная с 1, а второй начиная с 1000000.
можно сделать джоб, который будет периодически (у нас было 1 раз в 15 минут) проверять, не пересекаются ли эти диапазоны, и если что менять seed value на каком-то из серверов.

да можно не мелочится, и установить диапазоны 0-1073500000 & 1073500001-2147000000


одно но, это хорошо в том случае, если работает 2 сервера. через Н-время про это забудут, и возможны проблемы.

если строка была добавлена и если id совпадает, но остальные данные разные - в подписчике у этой записи изменяется id на любой другой свободный, а так же если на этот ID завязан FC - то и в той таблице меняется значение поля.

вот такой бы механизм был удобен.
16 сен 11, 13:30    [11287370]     Ответить | Цитировать Сообщить модератору
 Re: Создание репликации (merge)  [new]
Glory
Member

Откуда:
Сообщений: 104751
DmitriiBond
одно но, это хорошо в том случае, если работает 2 сервера. через Н-время про это забудут, и возможны проблемы.

И сколько времени по-вашему потребуется для ввода миллиарда записей для диапазона 0-1073500000 ?
16 сен 11, 13:35    [11287417]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить