Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Синхронизация баз данных Oracle 
V
    Опции темы
Гость_SergE
Дата 27.10.2004, 10:57 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не подскажете ли, господа?

Где можно в Internet найти литературу по синхронизации баз данных.
Про синхронизацию двух баз Oracle.
Про осуществление гарантированной закачки в базу данных от удалённого клиента.

Спасибо.
  Вверх
Dimich
Дата 27.10.2004, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Я понял так, что Вас интересуют репликации? Могу порекомендовать http://www.sql.ru
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
LSD
Дата 27.10.2004, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



По поводу репликации данных в первую очередь надо почитать справку по Oracle, там все достаточно хорошо описанно. Можно запустить Enterprise Management Console, там все операции по настрйке репликации делаются достаточно легко, и при желании можно записать скрипты, а затем их модифицировать.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Dimich
Дата 28.10.2004, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Если по правде, то я никогда сам не пользовался Ораклевыми репликациями как таковыми по той причине, что когда я начинал это делать у меня небыло достаточных навыков в этом деле. Сейчас я немного разобрался, как это делается, но у меня прекрасно работает свой ранее сделанный механизм. Опишу его работу:
У нас имеется 12 серверов, причем один - центральный, он и есть ведущий. Полной синхронизации серверов не требуется. Нужно, чтобы одинаковыми были только таблицы справочников (адреса, услуги, тарифы и прочие таблицы с условно-постоянной информацией). Над этими табличками на центральном сервере висят триггеры на Insert, Update и Delete, которые и отслеживают изменения и делают запись в отдельную табличку "искусственных репликаций", куда попадают:
1. номер "репликации"
2. имя таблички, над которой происходили изменения;
3. Дата
4. имя пользователя
5. Тип изменений (Ins or Del or Upd)
6. имя колонки таблицы
7. Данные (Old / New)
Далее данные из этих табличек выгружаются в файлы, рассылаются на все участки (ведомые сервера), где они закачиваются на сервер и запускается хранимая процедура, которая:
1. Разворачивает данные табличек в понятные SQL команды
2. Выполняет эти SQL команды как DML операции
3. Записывается статус выполнения команды (успешно или ошибка)
Далее данные о статусе выполнения "репликации" (каждой отдельной ее SQL команды) выгружаются в файл, который отсылается на центральный участок (ведущий сервер) и закачивается в БД. Это нужно для того, чтобы следить, где и как что выполнилось. Если ошибка - надо разрулить ее вручную (но это было на начальном этапе, когда все только устаканивалось, сейчас это работает без сбоев с апреля месяца). Итак, если репликация на ведомом сервере выполнилась, то все Ok и ее больше не трогаем (для данного сервера), иначе отсылаем ее опять (мало ли что, вдруг письмо не дошло?) и так пока не узнаем Ok или Error

Буду благодарен за критику.
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
LSD
Дата 28.10.2004, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Dimich
Вообщем ты повторил систему репликации Oracle :) . Один master и несколько snapshoot-ов.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Petro123
Дата 28.6.2007, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Цитата

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

Простите, а зачем выгружать даные в файл, разве нельзя непосредственно обратиться к нужным данным и залить их в новую базу? Кажется есть ведь гомогенные запросы?

Добавлено @ 12:24
Да кстати не подскажите, как создать файл и отослать его вдруг понадобится?

Это сообщение отредактировал(а) Petro123 - 28.6.2007, 12:28
PM MAIL   Вверх
Dimich
Дата 29.6.2007, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Цитата(Petro123 @  28.6.2007,  12:23 Найти цитируемый пост)
Простите, а зачем выгружать даные в файл, разве нельзя непосредственно обратиться к нужным данным и залить их в новую базу? Кажется есть ведь гомогенные запросы?

Да, можно и так. Так гораздо лучше, но у меня дело осложняется тем, что каналы связи просто никакие. В лучшем случае dialup, где модем висит параллельно общему телефону, в гудшем случае gprs, которое вообще может неделю не работать и тогда приходится файлы на флешке с попутным междугородним автобусом передавать, все-таки межгород.

Файл создаю не из pl/sql. Этим занимается специальная клиентская программа, которая к тому же обрабатывает входящие/исходящие письма с этими самыми файлами.
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Petro123
Дата 29.6.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



А что за файлы, типизированные или текстовые?
PM MAIL   Вверх
Dimich
Дата 2.7.2007, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Типизированные. Такого примерно формата:
Поле
Тип данных
Размер данных
Собственно данные

Потом эти файлы еще архиватором упаковываются и режутся на тома.

Очевидные недостатки: ограниченность поддерживаемых типов данных (NUMBER, VARCHAR, DATE), хотя можно прикрутить (при желании) и другие типы, я за ненадобностью это не делал.

Но, если есть желание повторять, то лучше разобраться с нативными ораклевыви репликациями. Я такой изврат делал от безысходности. Причины описывал.
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Petro123
Дата 2.7.2007, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



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




PM MAIL   Вверх
LSD
Дата 2.7.2007, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Petro123 написание собственного велосипеда, процесс гораздо более долгий и сопряженный с бОльшим количеством ошибок, чем разбирательство по английской документации.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Dimich
Дата 3.7.2007, 06:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Petro123, ну, если так заинтересовался, могу запостить пример триггера над таблицей, пример процедуры, которая все это хозяйство разворачивает в DML операции и выполняет их, ну и собственно структуру таблиц.

Кстати, если связь между БД хорошая, то можно данные из одной БД в другую гонять через dblink и не мучаться с файлами. Тогда у тебя воодще может не быть клиентских частей как у мну.

Но и к совету LSD я бы советовал тебе прислушаться. Этот человек всегда дело говорит.

Это сообщение отредактировал(а) Dimich - 3.7.2007, 06:46
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Sqlninja
Дата 3.7.2007, 10:02 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 353
Регистрация: 15.5.2006
Где: San Francisco, CA

Репутация: 13
Всего: 13



Цитата(LSD @  27.10.2004,  19:14 Найти цитируемый пост)
Enterprise Management Console


Только не это, шеф! Максимум, на что годится эта консоль - это мониторинг ошибочных транзакций, и их состав. Но никому не советую ее использовать для управления объектами репликации.
 
Визарды, это вообще отдельная тема. Кажется, один раз я попробовал запустить какой-то мастер по созданию репликационной группы, в нем оказалость 6 нудных шагов, в итоге приведшие меня в никуда, ни окея, ни кансела. И это только маленький пример.

Так что устанавливаем пакет DBMS_REPCAT и да здравствует PL/SQL.

P.S. С каждым новым релизом Oracle, я все больше ненавижу индусов.



--------------------
It's better to burn out than to fade away.
PM MAIL WWW ICQ   Вверх
LSD
Дата 3.7.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Sqlninja @  3.7.2007,  11:02 Найти цитируемый пост)
Только не это, шеф! Максимум, на что годится эта консоль - это мониторинг ошибочных транзакций, и их состав. Но никому не советую ее использовать для управления объектами репликации.

Визарды, это вообще отдельная тема. Кажется, один раз я попробовал запустить какой-то мастер по созданию репликационной группы, в нем оказалость 6 нудных шагов, в итоге приведшие меня в никуда, ни окея, ни кансела. И это только маленький пример.

Я настраивал репликацию именно им и все работало.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Petro123
Дата 4.7.2007, 06:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Цитата

Petro123, ну, если так заинтересовался, могу запостить пример триггера над таблицей, пример процедуры, которая все это хозяйство разворачивает в DML операции и выполняет их, ну и собственно структуру таблиц.

Да, да конечно, буду очень признателен
PM MAIL   Вверх
Dimich
Дата 4.7.2007, 08:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



rout.pdc - таблица, принимающая имена таблиц, над которыми произошли изменения
routd.pdc - таблица, принимающая детализацию изменений
routsrv.pdc - таблица серверов, для которых предназначена данная репликация.
routins.trg - триггер, делающий запись в routsrv, при добавлении в rout на основании servers.outflag=1
servers.pdc - список серверов, участвующих в репликации

rin.pdc - "входящие" репликации от ведущего сервера
rind.pdc - детализация входящих репликаций
rt.pdc - статус входящий репликации. Нужен для того, чтобы подтвердить выполнение репликации на ведущем сервере,
  после чего она больше не будет выгружаться на ведомый. Иначе, она должна выгружаться снова и снова, пока
  не придет это подтверждение.

repl.prc - процедура, разворачивающая входящие репликации из таблиц rin и rind в DML и записывающая статус в rt
usl.pdc - скрипт для создания рабочей таблицы (справочник услуг), которая подлежит репликации
usl_rout.trg - триггер над таблицей usl, который фиксирует все измения таблицы в служебные таблицы ROUT, ROUTD

Кроме того, выполнять процедуру REPL разрешено только одному юзеру, 'repl'
и всем пользователям, кроме 'repl' запрещено менять справочники на ведомых серверах
и рабочие таблицы с реплицируемыми данными на ведущих. Это в моем случае определяется по ID строк,
которые уникальны для каждого сервера.

Вроде, все указал. Если есть вопросы - пишите, а они точно будут. Исходников клиентской шняги, которая принимает таблицы rout/routd и загружает в rin/rind, запускает хранимую REPL, а потом выгружает rt для подтверждения выполнения репликации я героически потерял. Но, думаю воспроизвести ее труда не составит.

Присоединённый файл ( Кол-во скачиваний: 29 )
Присоединённый файл  2007_07_04_Repl.rar 5,57 Kb
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Petro123
Дата 4.7.2007, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Здорово, только я ненашел routins.trg, и самое главное repl.prc,...

Добавлено через 6 минут и 45 секунд
а и еще, что это за servers.outflag=1
PM MAIL   Вверх
Dimich
Дата 4.7.2007, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Код

>rar l 2007_07_04_Repl.rar

Архив 2007_07_04_Repl.rar

 Имя            Размер В архиве Сжатие  Дата  Время  Атрибуты    CRC    Мет Вер
-------------------------------------------------------------------------------
 usl.pdc           303      198  65% 04-07-07 08:27  .....A.   6F79D444 m3b 2.9
 rout.pdc          569      286  50% 04-07-07 08:26  .....A.   3A229FB7 m3b 2.9
 routd.pdc         372      227  61% 04-07-07 08:26  .....A.   51EF9A07 m3b 2.9
 routsrv.pdc       483      300  62% 04-07-07 08:25  .....A.   4D67EBEC m3b 2.9
 rin.pdc           649      300  46% 04-07-07 08:25  .....A.   8AA61C20 m3b 2.9
 rt.pdc            134      113  84% 04-07-07 08:24  .....A.   C358B48B m3b 2.9
 rind.pdc          366      226  61% 04-07-07 08:24  .....A.   7C2402E3 m3b 2.9
 USL_ROUT.trg     2815      883  31% 04-07-07 08:18  .....A.   6D00703B m3b 2.9
 Repl.prc         8186     1921  23% 04-07-07 08:15  .....A.   1990DB9E m3b 2.9
 repl.txt         1377      769  55% 04-07-07 09:18  .....A.   D43A1179 m3b 2.9
-------------------------------------------------------------------------------
   10            15254     5223  34%


А routins.trg я действительно забыл. Вот он:

Код
create or replace trigger RoutIns
  after insert on Rout
  for each row
BEGIN
  insert into routsrv (
    select servid, :new.r_id, 0 
    from servers
    where outflag = 1);
END RoutIns;

--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Sqlninja
Дата 4.7.2007, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 353
Регистрация: 15.5.2006
Где: San Francisco, CA

Репутация: 13
Всего: 13



Цитата(LSD @  3.7.2007,  12:04 Найти цитируемый пост)
Я настраивал репликацию именно им и все работало. 

 значит версия была лучше


--------------------
It's better to burn out than to fade away.
PM MAIL WWW ICQ   Вверх
Dimich
Дата 4.7.2007, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Цитата(Petro123 @  4.7.2007,  09:21 Найти цитируемый пост)
а и еще, что это за servers.outflag=1

Имелось ввиду значение поля outflag = 1 в таблице servers. Т.е. смысл в том, что для сервера, помеченного этим флагом генерируются репликации. Просто у меня много серверов и соответственно кому-то нужно синхронизировать одну часть данных, кому-то она вообще не нужна, даже таблиц таких нет. И для постепенного включения репликаций хорошо. Или если сбой где-то произошел, то выключить и разруливать потихоньку.
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Petro123
Дата 4.7.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Понятно, вкл/выкл.

Как происходит обработка входящих репликаций,  по идее она должна обрабатываться в виде очереди, Т.е. пока успешно не обработали одну репликацию не переходим к следующей. Так ли это?

Добавлено через 5 минут и 31 секунду
Вроде как получается что за раз обрабатывается весь журнал, и если есть хотя бы одна ошибка делаем откат на начало журнала, или нет?
PM MAIL   Вверх
Dimich
Дата 4.7.2007, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Цитата(Petro123 @  4.7.2007,  09:53 Найти цитируемый пост)
Как происходит обработка входящих репликаций,  по идее она должна обрабатываться в виде очереди, Т.е. пока успешно не обработали одну репликацию не переходим к следующей. Так ли это?

Да, верно.
Данные из таблиц ROUT и ROUTD загружаются в таблицы RIN и RIND соответственно. После чего за выполнение репликаций отвечает хранимая REPL. Она то и выполняет все операции в порядке очереди. Очередь устанавливается последовательностью R_ID. Т.е. когда фиксируются репликации в таблицы (см. пример триггера над таблицей USL), R_ID будет определено последовательностью SEQR_ID. В этой же последовательности их и обработает потом хранимая REPL.
Кстати, вот она сама:
Код
create sequence SEQR_ID
minvalue  10000000000000000
maxvalue 19999999999999999
start with 10000000000097698
increment by 1
cache 20
cycle;

На других серверах, как я уже говорил, значения первичных ключей не пересекаются, т.к. там тоже будут существовать такие последовательности, но уже с другим интервалом. Например:
Код
create sequence SEQR_ID
minvalue  30000000000000000
maxvalue 39999999999999999
start with 30000196788501240
increment by 1
cache 20
cycle;

При возникновении ошибки в процедуру REPL, обработка прекращается до вмешательства человека. На начальном этапе это неизбежно будет (стадия отладки и тестирования). Теперь у меня это уже больше года работает нормально. Я и забыл, когда туда лазил. Вот сейчас пришлось вспоминать, как это работает.
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Petro123
Дата 4.7.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Цитата

Данные из таблиц ROUT и ROUTD загружаются в таблицы RIN и RIND соответственно

Как загружаются данные в таблицы Rin, Ring?
Просто очищаем RIN, затем все строки заливаем из ROUT?

Добавлено через 7 минут и 22 секунды
При такой схеме возникает некая избыточность данных. В обеих базах данные дублируются. Если реплицировать нужно справочники - проблем нет. А если таблицы в которые ежедневно добавляются сотни тысяч записей, как все это будет работать, корректно ли, быстро ли? 
PM MAIL   Вверх
Dimich
Дата 4.7.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Можно не очищать, просто дописывать.
Из RIN данные можно удалять только тогда, когда выполнятся все условия:
1. Репликация выполнена, т.е. Rin.rf = 0 (или существует запись в Rt)
2. Удаленный сервер знает, что репликация уже выполнена, иначе он должен снова ее выгрузить. Если память не изменяет, то это у мну routsrv.flag

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

Скорость, да несколько хромает. Обычно такие задачи у меня работают ночью. Синхронизируется 14 серверов с 1-м сервером. Средний поток изменений от одного сервера к другому - примерно 200,000..1,500,000 репликаций. За ночь успевает. Но бывает и больше, тогда может и к обеду следующего дня завершиться.

Насчет корректности: все работает корректно. Пока рассогласований небыло.

Имхо, мне самому не очень сейчас это нравится в плане быстродействия. Иногда хочется быстрее. Если время найду, я давно порывался это переделать, правда мысли пока еще не оформились окончательно. Может твоя критика и поможет мне.

Это сообщение отредактировал(а) Dimich - 4.7.2007, 14:36
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Petro123
Дата 4.7.2007, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Цитата

Можно не очищать, просто дописывать.

Опять репликация?
Как ты дописываешь?

PM MAIL   Вверх
Petro123
Дата 4.7.2007, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Цитата

rt.pdc - статус входящий репликации.

Может быть лучше в таблицу Rout, добавить поле Статус репликации, 0 - не завершена, 1 - завершена?
Как думаешь?

Или у тебя в таблицу RT добавляются только те записи, репликация по которым прошла успешно, а затем при очистке журнала репликации, удаляются только те которые есть в RT?


PM MAIL   Вверх
Dimich
Дата 5.7.2007, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Цитата(Petro123 @  4.7.2007,  15:16 Найти цитируемый пост)
Опять репликация?
Как ты дописываешь?

Не понял вопроса. Какие записи получил от удаленного сервера, те и дописываю. В таблицах есть primary key по R_ID (ID репликации), поэтому уже существующие, если такие оказались, будут отвергнуты в любом случае.
Более подробный алгоритм такой: читаю файл, делаю insert строки.
Можно к примеру SQL Loader прикрутить, если надо.

Цитата(Petro123 @  4.7.2007,  15:49 Найти цитируемый пост)
Может быть лучше в таблицу Rout, добавить поле Статус репликации, 0 - не завершена, 1 - завершена?
Как думаешь?

Или у тебя в таблицу RT добавляются только те записи, репликация по которым прошла успешно, а затем при очистке журнала репликации, удаляются только те которые есть в RT?


Можно наверное и так сделать. Почему бы и нет. Будет экономия. Я уже и вспомнить не могу, чем я руководствовался, когда делал так.

Да, кстати, вспомнил еще: когда будешь обрабатывать дробные числа и даты, имей в виду, что скорее всего дробное число будет иметь не десятичную точку, а запятую. Это я сперва по глупости решил как Replace (',', '.', value). Но гораздо лучше использовать nls_numeric_characters

Также нужно обратить внимание на формат дат. При неверной настройке они имеют свойство записываться некрасиво. Это я решил, используя в тригерах форматирование при выводе дат: to_char(date, 'dd/mm/yyyy hh:mi:ss')

Это сообщение отредактировал(а) Dimich - 5.7.2007, 06:55
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Sqlninja
Дата 5.7.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 353
Регистрация: 15.5.2006
Где: San Francisco, CA

Репутация: 13
Всего: 13



имхо, вы все гоните. если б мои кодеры начали переписывать стандартную функциональность оракла, уволил бы всех нах.


--------------------
It's better to burn out than to fade away.
PM MAIL WWW ICQ   Вверх
Dimich
Дата 5.7.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Цитата(Sqlninja @  5.7.2007,  11:41 Найти цитируемый пост)
имхо, вы все гоните. если б мои кодеры начали переписывать стандартную функциональность оракла, уволил бы всех нах. 

Гоним, не спорю.

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


Sqlninja, а вообще реально сделать dblink с базой, с которой нет связи? Ну, чтобы, можно было данные, например на дискете туда-сюда носить? Или как тогда можно запустить репликации (сети нет т.е., интернет есть, но не стабильный, т.е. может прерываться или каждые 5 минут или же стабильно отсутствовать в течение нескольких суток. В этот период хотелось бы использовать запасной канал, например соседнюю фирму, если у них в этот момент все работает, или пригородный автобус). Какие модули и компоненты оракла за это отвечают? Может быть надо что-то доустановить или у сторонних разработчиков есть такой функционал? Мне все разжевывать не надо, просто вкратце идеи нужны, в какую сторону копать?

Заранее спасибо.
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Sqlninja
Дата 5.7.2007, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 353
Регистрация: 15.5.2006
Где: San Francisco, CA

Репутация: 13
Всего: 13



Цитата(Dimich @  5.7.2007,  14:48 Найти цитируемый пост)
Sqlninja, а вообще реально сделать dblink с базой, с которой нет связи? Ну, чтобы, можно было данные, например на дискете туда-сюда носить?


можно делать экспорт шаблона внедрения (deployment template) на внешний носитель, и если нет связи, передавать его. мне про нет связи рассказывать не надо, у меня сеть была по всей Украине, и есть пару офисов стоящих реально в поле.



--------------------
It's better to burn out than to fade away.
PM MAIL WWW ICQ   Вверх
Dimich
Дата 6.7.2007, 07:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 247
Регистрация: 25.8.2004
Где: Брянск

Репутация: 3
Всего: 7



Интересно. Спасибо за идею (правда я еще не понял что да как, читаю доку http://www.stanford.edu/dept/itss/docs/ora...96567/repdt.htm, пытаюсь разобраться). Если кто заинтересовался/разобрался с deployment template, поделитесь опытом пожалуйста.
--------------------
Не работает - исправь, работает - не трогай!!!
PM MAIL ICQ Jabber   Вверх
Sqlninja
Дата 6.7.2007, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 353
Регистрация: 15.5.2006
Где: San Francisco, CA

Репутация: 13
Всего: 13



Вот пару скриптов по созданию MV схемы и выгрузке depoyment template в файл 3мя разными способами (есть траблы с экспортом длинных пакетов > 32k).


Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  deployment_template.rar 4,85 Kb


--------------------
It's better to burn out than to fade away.
PM MAIL WWW ICQ   Вверх
Petro123
Дата 7.7.2007, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 288
Регистрация: 6.4.2007

Репутация: нет
Всего: нет



Чего то я непонял:
как из таблицы ROUTD, мы узнаем какую именно запись скажем удалили или обновили?


PM MAIL   Вверх
DENSAOPIN
Дата 29.8.2007, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.8.2007

Репутация: нет
Всего: нет



Поразбирался deployment template, оказалось все достаточно просто. 

Реплицируемая таблица сбрасывается целиком в текстовый файл 
содержащий DML команды и запуская полученный скрипт на сайте снепшота мы заполняем снепшот при 
полном отсутствии связи. Тут возникли проблемы при реплицировании больших таблиц строки в выгружаемом
скрипте >2499 символов... 

Однако, зачем эта канетель, если можно просто сделать экспорт таблицы.

Подскажите, пожалуйста, есть ли готовый алгоритм для репликации типа "мастер-мастер" ?



PM MAIL   Вверх
DENSAOPIN
Дата 31.8.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 13.8.2007

Репутация: нет
Всего: нет



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

Кстати, к нам сейчас в фирму много народа приезжает свои программы презентовать. 
И все у кого ни спросишь оффлайн репликацию сами руками пишут.

Короче - все работает.  Только минимально подправил для своих нужд.  http://forum.vingrad.ru/html/emoticons/pack/smile.gif
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

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

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.1892 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.