Синхронизация нескольких баз.

Методы, механизмы и инструментарий для репликации

Модератор: kdv

Ответить
AlNinyo
Сообщения: 4
Зарегистрирован: 22 дек 2009, 10:20

Синхронизация нескольких баз.

Сообщение AlNinyo » 22 дек 2009, 10:35

Доброго времени суток, уважаемые!

Есть небольшая проблема. Организация, в которой я тружусь главным компьютерщиком, руководит работой всех автостанций области. Часть из них компьютеризирована и на них работает программа, использующая Firebird 1.5. На каждой автостанции своя база, никак не связанная с другими. На автостанциях есть adsl-интернет. Есть центральный сервер, на котором крутится web-сервер и работает наш сайт. На сайт выводится расписание, тарифы и прочая подобная фигня. Данные берутся, как легко догадаться, из баз автостанций, которые мне предварительно приходится копировать на этот сервак. Я пробовал брать данные напрямую с автостанций, но данных много и страницы просто не успевают прогрузиться (некоторые грузятся только на 1/3).
Я знаю, что как-то можно настроить синхронизацию баз и авторы программы говорят, что это не сложно. Но хотят за это много денег, а начальство вы знаете: сделай сам и бесплатно. Подскажите, пожалуйста, как это возможно сделать? Нужно просто дополнение базы на центральном сервере данными, взятыми с автостанции. Обновление желательно каждые 30 минут - 1 час.
Я скачал программу IBReplicator и попробовал по русской справке сделать синхронизацию баз. У меня ничего не получилось. Базы я завёл (для пробы 2 штуки, локальную и удалённую), тестовый коннект к ним проходит нормально, но при нажатии "View conflicts" (на любой базе) получаю такое сообщение:
Undefined name
Dynamic SQL Error
SQL error code = -204
Table unknown
REPL$MANUAL_LOG
At line 1, column 80.

А когда, следуя инструкции, пробую составить соответствие таблицам разных баз, то программа выдаёт только 1 набор таблиц для локальной базы и сравнивать не с чем. Или я сосвсем не так что-то делаю?

Да, на всех автостанциях стоит Win XP (Home или Pro), на серваке центральном стоит Win2003 Server x64. На версию Firebird'а 2.х перейти не можем из-за программы, работающей исключительно с 1.5.

Буду безмерно благодарен за помощь и советы.

loosingar
Сообщения: 2
Зарегистрирован: 22 дек 2009, 11:18

Re: Синхронизация нескольких баз.

Сообщение loosingar » 22 дек 2009, 11:22

Два варианта:
1. в соответствии с http://www.ibaseforum.ru/viewtopic.php?f=7&t=5116
убедиться, что все запросы и т.п. идут в верхнем регистре, а названия баз-поле по регистру соотв. тому, что в базе.
2. в соответствии с http://www.ibase.ru/firebird/fbrc2faq.htm
при одинаковых полях в базе явно прописывать все алиасы и т.п.
КДВ: привожу пример неоднозначной выборки над employee.gdb:

select po_number, customer, department, last_name, phone_no
from customer c, employee e, sales s, department d
where c.cust_no = s.cust_no and
d.dept_no = e.dept_no and
e.emp_no = s.sales_rep
поле phone_no есть как в delartment, так и в sales. Поэтому Firebird на такой запрос будет "ругаться", требуя указать алиасы полей явно. Не ленитесь, поскольку такое требование указано и в стандарте (т.е. подобное поведение Firebird - это не самодеятельность).

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Синхронизация нескольких баз.

Сообщение kdv » 22 дек 2009, 13:30

на самом деле все проще. если репликатор говорит что "таблица неизвестна", значит, база не сконфигурирована для репликации. Я бы для начала посоветовал потренироваться на той же employee.fdb/gdb.

to loosingar: не понимаю, что мой faq делает на rxlib.ru, и почему Вы туда даете ссылку, а не на оригинал. И вообще, Вы дали сслыку на FAQ по RC Firebird 1.0. А у автора вопроса - 1.5.

AlNinyo
Сообщения: 4
Зарегистрирован: 22 дек 2009, 10:20

Re: Синхронизация нескольких баз.

Сообщение AlNinyo » 22 дек 2009, 13:55

на самом деле все проще. если репликатор говорит что "таблица неизвестна", значит, база не сконфигурирована для репликации.
Проблема в том, что я не могу ничего в базе менять,, чтобы не запороть работу программы. Или под "сконфигурировать" что-то другое понимается?
Там базы-то абсолютно одинаковы. Я в качестве приёмника хочу брать базу автостанции, допустим, за 01.12.09, а база источник - живая база автостанции, находящаяся на ней. И мне надо просто вносить в базу-приёмник данные о продажах и прочих вещах, а так же изменения в таблицах с расписанием и прочими вещами...

Или я слишком многого хочу? :oops:

loosingar
Сообщения: 2
Зарегистрирован: 22 дек 2009, 11:18

Re: Синхронизация нескольких баз.

Сообщение loosingar » 22 дек 2009, 13:56

kdv
Это не я, это гугл по запросу "SQL error code = -204". Не нравится - подайте в суд на гугл.
И раз здесь упомянуто об "оригинале моего faq", то почему же ссылка на него не поставлена? Его-то гугл не нашел...

AlNinyo
А нельзя ли локально поднять копию базу, и сначала ее попробовать синхронизировать? А уж потом на рабочем сервере что-то делать.

AlNinyo
Сообщения: 4
Зарегистрирован: 22 дек 2009, 10:20

Re: Синхронизация нескольких баз.

Сообщение AlNinyo » 22 дек 2009, 14:20

Я и пытаюсь сначала почти "локально" проверить. Я беру копию базы со своего компа и базу на web-сервере. Рабочая база автостанции не трогается.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Синхронизация нескольких баз.

Сообщение Dimitry Sibiryakov » 22 дек 2009, 14:40

AlNinyo писал(а): Я скачал программу IBReplicator и попробовал по русской справке сделать синхронизацию баз. У меня ничего не получилось. Базы я завёл (для пробы 2 штуки, локальную и удалённую), тестовый коннект к ним проходит нормально, но при нажатии "View conflicts" (на любой базе) получаю такое сообщение:
Или я сосвсем не так что-то делаю?
Да, я бы сказал, что ты абсолютно всё делаешь не так. Я, конечно, понимаю, что русская документация не так-то легко читается, но... Зачем ты сразу полез в разрешение конфликтов-то? У тебя репликация не настроена и не работает (поскольку сообщение говорит о том, что не созданы т.н. "системные объекты", которые включают в себя в том числе и указанную таблицу, и кучу триггеров), соответственно конфликтам взяться покамест неоткуда.

Читай документацию последовательно, а не кусками. Она так написана, что читать её надо последовательно.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Синхронизация нескольких баз.

Сообщение kdv » 22 дек 2009, 15:16

loosingar писал(а):И раз здесь упомянуто об "оригинале моего faq", то почему же ссылка на него не поставлена? Его-то гугл не нашел...
потому что всякие засранцы тащат документы без спросу, и не обновляют их. Так и загаживается поиск в гугле и других поисковиках.

Вам я советую читать как вопросы, так и цитируемые ссылки. А то получилось, что Вы вместо ответа создали что-то непонятное (вопрос про ФБ 1.5, вы даете ссылку на FAQ по 1.0, и кстати, ошибка -204 на самом деле бывает разная, там сообщений штук 20). В следующий раз я такой ответ просто удалю, и вовсе не потому что даете ссылки на копии документов ibase.ru, это как раз исправить очень легко.
AlNinyo писал(а):Проблема в том, что я не могу ничего в базе менять
так не получится. Взяли файл А, и файл Б, и чтобы изменения в файле А волшебным образом были запротоколированы и перенесены в файл Б?
Впрочем, Сибиряков ответил, что делать. А я все-таки рекомендую потренироваться на employee.fdb. Но мне кажется, что если Вы админ, и не знакомы с ФБ, то ничего не выйдет, увы.

AlNinyo
Сообщения: 4
Зарегистрирован: 22 дек 2009, 10:20

Re: Синхронизация нескольких баз.

Сообщение AlNinyo » 23 дек 2009, 08:17

Спасибо всем. Буду мучаться дальше.

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: Синхронизация нескольких баз.

Сообщение Dimitry Sibiryakov » 23 дек 2009, 14:50

Прекрати. IBPhoenix Replicator не будет дешевле чем то, что предлагают разработчики приложения. Да и купить его в пределах России практически нереально.

ЗЫ: Впрочем, если найдёшь кряк или серийник - поделись.

Ответить