Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Репликация ... или это вообще реально???  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
Здравствуйте, уважаемые работники умственного труда.
Решил обратиться к Вам вот с такой проблемой. С SQL Server'ом работаю уже давно, но, в основном, как программер. Сейчас возникла задача настроить репликацию. Сначала между 2 серверам, потом, глобально, между всеми серверами нашей компании. (2 сервера находятся в Москве, 2 в Ростове на Дону). Мы используем одни и те же по структуре, но разные по логике базы данных. Почитав умных книжек, я понял, что мне нужна Merge-репликация. Начал делать - не получается ((((((( Может вы подскажете где найти более подробную инфу по этому вопросу, ведь теоретически, все ясно ... а как дело доходит до практики - сплошь глюки и ошибки ... Наша система имеет механизм, передачи данных между разными серверами и базами ... но это делается путем выгрузки отфильтрованных данных на какой-либо носитель, а потом загрузки их в нужную БД. Все хорошо, но есть несколько но:
1) это все-таки оффлайн
2) имеет место человеческий фактор, поэтому, возникают ошибки
3) иногда данные закачиваются криво.

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

Подскажите плиз, как мне разобраться в своих проблемах, и понять - что нужно делать, а что нет ....
28 июн 05, 18:44    [1657066]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Стандартных средств нет.

Самопально в общих чертах: ведем лог изменений, на одном сервере выгружаем его в файл, файл передаем на другой, там загружаем, обрабатываем.

Идея проста. Если будут конкретные вопросы, задавайте. Готового кода не ждите.
28 июн 05, 18:51    [1657076]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
GreenSunrise
Стандартных средств нет.

Самопально в общих чертах: ведем лог изменений, на одном сервере выгружаем его в файл, файл передаем на другой, там загружаем, обрабатываем.

Идея проста. Если будут конкретные вопросы, задавайте. Готового кода не ждите.


Да я и не расчитываю на готовый код ))))))) Мне просто хочется понять ... что лучше, продолжать разбираться с репликацией, или написать свой инструментарий ..... Хотя, по поводу репликации, надо ведь еще проверить, как она скажется на базах ...
28 июн 05, 19:03    [1657099]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
pr0ger
Member

Откуда: Москва
Сообщений: 1933
Связь между серверами есть?
28 июн 05, 21:44    [1657244]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
pr0ger
Связь между серверами есть?


Да, все серваки доступны через Интернет ...
29 июн 05, 10:42    [1657912]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
pr0ger
Member

Откуда: Москва
Сообщений: 1933
тогда велосипед изобретать не надо :)
Нужно почитать о настройке репликации через интернет и проверить работу ПО с тестовой базой, на которой настроена репликация
29 июн 05, 11:19    [1658102]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Ну дык!!! А что ж вы нам голову морочите, что связи нет???
DeBosheZz
1) это все-таки оффлайн


Если связь есть, то однозначно надо использовать стандартные методы. Информация в MSDN о том, как настраивать репликацию через инет, есть.
29 июн 05, 11:39    [1658205]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
Crimean
Member

Откуда:
Сообщений: 13148
Merge может подойти.
29 июн 05, 12:45    [1658583]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Статьи на нашем форуме, касающиеся репликации:
https://www.sql.ru/articles/Publications.shtml#08

Что касается настройки репликации для интернета, то результаты этого поиска могут оказаться полезными - http://search.microsoft.com/search/results.aspx?view=en-us&st=a&na=84&qu=sql+replication+%22over+internet%22&qp=&qa=&qn=&c=10&s=0
29 июн 05, 12:58    [1658650]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
GreenSunrise
Ну дык!!! А что ж вы нам голову морочите, что связи нет???
DeBosheZz
1) это все-таки оффлайн


Если связь есть, то однозначно надо использовать стандартные методы. Информация в MSDN о том, как настраивать репликацию через инет, есть.


Я имел в виду, что те инструменты, которые есть и служат для обмена данными работают не в реальном масштабе времени )))))
29 июн 05, 14:41    [1659307]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
Crimean
Merge может подойти.


Так вот с Merge как раз и возникли проблемы ... мне по сути дела нужно реплицировать всего несколько табли ... я добавляю их в публикацию, определяю фильтры и т.д. В результате мастер выдает ругачку по поводу того, что, мол, данные таблицы имеют связь (через индексы, судя по всему) с другими... добавляю их .... такая же петрушка ... в итоге список таблиц, включенных в публикацию неимоверно разросся ... После настройки подписчика, Merge-агент выдает ошибки, типа Invalid column name 'rowguidcol' или 'Не могу разместить схему такоую-то на подписчике ... Далее, с фильтрами. Я делаю отбор по колонке ID_SCLAD (номер склада) в нужных мне таблицах. Но, дело в том, что значения ID_SCLAD в базе издателя и подписчика, для нужных мне складов не совпадают ... как быть в таком случае???? в общем, вопросов больше чем ответов ... (((((((((((
29 июн 05, 14:49    [1659349]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
А вам нужна репликация в реальном времени?
29 июн 05, 14:50    [1659355]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
GreenSunrise
Member

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


Во-первых, не через индексы, а через foreign key.

Во-вторых, добавлять их НЕОБЯЗАТЕЛЬНО. Вас все лишь предупредили, что если не реплицировать связанные таблицы, то будут возникать ошибки нарушения целостности. Ну а чего вы хотите?

Ситуация: вы реплицируете только дочернюю таблицу. На одном сервере добавляете запись в родительскую, и запись в дочернюю. Дочерняя приходит на другой сервер. Ну и? Какова по-вашему, должна быть реакция сервера?

Вот о таких ситуациях он вас и предупреждает. Но не навязывает необходимости включения связанных таблиц в публикацию.

Также есть такая вещь, как опция NOT FOR REPLICATION для FOREIGN KEY. Почитайте.

DeBosheZz
... После настройки подписчика, Merge-агент выдает ошибки, типа Invalid column name 'rowguidcol' или 'Не могу разместить схему такоую-то на подписчике ...

Дык батенька, вы ж хоть почитайте что-нибудь, прежде чем настраивать репликацию, а? Хелп там, все дела. А то валить на сервер свою некомпетентность - это замечательно, но чревато.

DeBosheZz
Далее, с фильтрами. Я делаю отбор по колонке ID_SCLAD (номер склада) в нужных мне таблицах. Но, дело в том, что значения ID_SCLAD в базе издателя и подписчика, для нужных мне складов не совпадают ... как быть в таком случае???? в общем, вопросов больше чем ответов ... (((((((((((

Позвольте догадаться... Это поле у вас identity. Опять же - не надо валить на сервер свою некомпетентность. Надо читать. Много. Про identity, как его используют в репликации, про опцию NOT FOR REPLICATION, про диапазоны identitу. Про использование uniqueidentifier.
29 июн 05, 15:04    [1659432]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
А что происходит с таблицами, которые учавствуют в репликации на Publisher'е??? Ерунда какая то получается. Создаю публикацию, потом в программе-клиенте (мы используем Фолио WinSclad) пытаюсь создать документ, расходную накладную (для хранения информации о складских док-тах в базе используются три таблице, которые и были включены в публикацию). при попытке сохранения документа появлсяется ошибка:
General SQL error. Insert Error: Column name or number of supplied values does not match table definition.

Я посмотрел структуру таблицы. Разница заключается в том, что добавилось одно поле 'msrepl_tran_version'. Может такая ошибка появиться из-за того, что, например, при вставке используется следующая конструкция:

INSERT INTO MYTABLE
VALUES(VALUE1, VALUE2, ... , VALUEN)
30 июн 05, 12:49    [1662580]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Не ерунда это, а вполне правильное, необходимое, и документированное поведение.

Поле 'msrepl_tran_version' возникает при настройке транзакционной репликации, причем не для всех случаев. Вот для updatable subscriptions точно добавляется.

Вы бы прежде чем ломиться на рабочий сервер с репликацией, поигрались в сторонке на примерах, потестили, документацию почитали. Потому что все, что вы до сих пор приводили как баги или "ерунду" работает совершенно корректно. Ни одного примера неправильного поведения я пока не вижу в ваших ситуациях.
30 июн 05, 12:59    [1662641]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
P.S. Если ваше приложение использует конструкции типа
INSERT INTO MYTABLE
VALUES(VALUE1, VALUE2, ... , VALUEN)
БЕЗ явного перечисления полей в инсерте, то это плохо. Это некачественная разработка. Это недоработка их программистов, а не разработчиков репликации. Потому что явное перечисление полей как раз и позволило бы избежать данной ошибки.
30 июн 05, 13:01    [1662664]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
GreenSunrise
Не ерунда это, а вполне правильное, необходимое, и документированное поведение.

Поле 'msrepl_tran_version' возникает при настройке транзакционной репликации, причем не для всех случаев. Вот для updatable subscriptions точно добавляется.

Вы бы прежде чем ломиться на рабочий сервер с репликацией, поигрались в сторонке на примерах, потестили, документацию почитали. Потому что все, что вы до сих пор приводили как баги или "ерунду" работает совершенно корректно. Ни одного примера неправильного поведения я пока не вижу в ваших ситуациях.


А с чего Вы взяли, что я ломлюсь на рабочий сервер ... у меня есть 2 тестовых, с которыми я и работаю )))))
30 июн 05, 13:16    [1662757]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Чудесно. Теперь осталось только почитать документацию.

На теперешний момент открытые вопросы остались?
30 июн 05, 13:31    [1662843]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
GreenSunrise
... документацию почитали.


Любимая книжка - 'Microsoft SQL Server 2000 Administrator's Companion'. Там все достаточно ясно описано. Но описано на простых ситуациях, а уменя, как вы понимаете, она несколько иная. И у меня, как у человека, который делает это впервые, возникает куча вопросов. Что касается всего остального - я ни в коем случае не утверждаю, что у меня не получается по причине неправильной работы средств SQL Server'а. Я просто хочу разобраться в ситуации и понятть, что я делаю не так ... ))))
30 июн 05, 13:37    [1662891]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
GreenSunrise
P.S. Если ваше приложение использует конструкции типа
INSERT INTO MYTABLE
VALUES(VALUE1, VALUE2, ... , VALUEN)
БЕЗ явного перечисления полей в инсерте, то это плохо. Это некачественная разработка. Это недоработка их программистов, а не разработчиков репликации. Потому что явное перечисление полей как раз и позволило бы избежать данной ошибки.


На самом деле очень похоже, что именно такую конструкцию приложение использует. Получается, что при таком раскладе, все мои попытки настроить репликацию закончатся неудачей?????
30 июн 05, 13:38    [1662903]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
DeBosheZz
На самом деле очень похоже, что именно такую конструкцию приложение использует. Получается, что при таком раскладе, все мои попытки настроить репликацию закончатся неудачей?????

Merge репликацию использовать не сможете, потому что в ваших таблицах явно нет поля uniqueidentifier с опцией rowguidcol, а его добавление ломает используемое вами приложение.

Таким образом, если у вас нет возможности вмешаться в код приложения, остается только использование transactional репликации, причем даже не всех ее подтипов. Например, как уже говорилось, updatable subscriptions уже не выйдет сделать. Но другие подтипы можно попробовать.

Если возможность подправить код приложения есть (например, это хранимка, которая вам вполне доступна), то можно добавить в приведеном вами примере явное перечисление полей.
30 июн 05, 14:26    [1663259]     Ответить | Цитировать Сообщить модератору
 Несколько вопросов появилось:  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
Создаю репликацию транзакций. Определяю таблицы, которые будут включены в публикацию. Есть там такая опция, Article Defaults называется. Непонятно вот что:

На закладке Snapshot есть варианты выбора:

if a table with same name as the destination table exists at the Subscriber:
* Keep the existing table unchange
* Drop the existing table and re-create it
* Delete data in existing table that matches the row filter statement
* Delete all data in the existing table

Я выбираю 1-й вариант, это правильно???

Второй вопрос:

Создаю pull-подписку на Subsriber'е. Смотрю в Replication Monitor. Там ошибка у Distibution Agent, мол 'Invalid column name 'msrepl_tran_version'. Т.е. понятно, что эта колонка создается в таблицах Издателя, и нет таковой в соответствующих таблицах Подписчика. Почему??? Не могу понять. Что я опять не так сделал??? Возможно это как-то связано с первым вопросом???
1 июл 05, 15:40    [1667904]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
GreenSunrise

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


Поправил я, кстати, процедурку ... сейчас все нормально ... было бы хуже, если бы все это было зашито непосредственно в саму программу ... ))))))))
1 июл 05, 15:46    [1667942]     Ответить | Цитировать Сообщить модератору
 Re: Несколько вопросов появилось:  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Конечно, связано.

Вчитайтесь внимательно в предлагаемый вам выбор. Что значит, по-вашему, "Keep the existing table unchanged"? Это значит, что на подписчике не будут делаться никакие изменения в таблице. То есть если на паблишере структура таблицы одна, а на подписчике другая (читай: на паблишере есть колонка msrepl_tran_version, а на подписчике нет), то это так и останется.
1 июл 05, 16:02    [1668059]     Ответить | Цитировать Сообщить модератору
 Re: Репликация ... или это вообще реально???  [new]
DeBosheZz
Member

Откуда: Москоу сити
Сообщений: 14071
GreenSunrise
Конечно, связано.

Вчитайтесь внимательно в предлагаемый вам выбор. Что значит, по-вашему, "Keep the existing table unchanged"? Это значит, что на подписчике не будут делаться никакие изменения в таблице. То есть если на паблишере структура таблицы одна, а на подписчике другая (читай: на паблишере есть колонка msrepl_tran_version, а на подписчике нет), то это так и останется.


У меня какая ситуация??? Есть две абсалютно идентичные базы (на момент эксперимента, допустим), но расположенные на двух серверах. Одну из них назовем основной (на подписчике). Моя задача заключается в том, чтобы те изменения, которые происходят в другой базе, отображались в основной. Те таблицы, которые на издателе включены в публикацию содержат данные. Ровно как и аналогичные таблицы на Подписчике тоже содержат данные. Что мне в таком случае выбирать??? Я понимаю, с точки зрения перевода)))) что значит каджый из вариантов, но не могу понять как это скажется на базах ((((((
1 июл 05, 16:14    [1668152]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить