Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Как синхронизировать базы через промежуточный носитель?  [new]
MinistrBob
Member

Откуда: Москва
Сообщений: 281
Есть задача - нужно изменения в некой схеме, одинаковой для всех БД переносить в общую БД, т.е. в базу которая является общим накопителем изменений во всех базах.

В Oracle есть всяческие стандартные технологии которые позволяют синхронизировать данные в различных БД, например Advanced Replication , Advanced Queuing и совсем модная фишка - Streams. Я с ними со всеми слабо знаком, но на сколько успел понять они все предполагают что между базами существует канал связи. А если этого канала нет и данные можно передавать только промежуточным носителем, например, дискетой.

Вот и вопрос, может я ошибаюсь и можно синхронизировать данные через промежуточный носитель с помощью стандартных технологий или придется писать всё самому, например на PL/SQL? Наверняка уважаемая публика сталкивалась с такой проблемой, поделитесь, кто как решал эту задачу.
10 окт 06, 10:54    [3240266]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
DВА
Member

Откуда:
Сообщений: 5439
можно посмотреть в сторону экспорта-импорта таб. пространств - только схемы в этом случае должны быть разными.
Копирует таб. пр. на дискету... ну дальше понятно :))
10 окт 06, 11:02    [3240319]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
Я думаю, что здесь нужно отслеживать не только вновь внесенные записи, но и UPDATE / DELETE, в этом случае exp/imp не очень подойдет
10 окт 06, 11:15    [3240418]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
AlexanderKz
Member

Откуда:
Сообщений: 385
Есть вариант держать копии удаленных баз в локальной сети, заливаемых exp/imp
Все зависит от их размера и готовности держать "лишнее" железо
10 окт 06, 11:22    [3240487]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18483
Может Logical Standby + передача журналов голубинной почтой ?
10 окт 06, 11:26    [3240530]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
MinistrBob
Member

Откуда: Москва
Сообщений: 281
tru55
Я думаю, что здесь нужно отслеживать не только вновь внесенные записи, но и UPDATE / DELETE, в этом случае exp/imp не очень подойдет


Именно из-за этого exp/imp не подходит.

AlexanderKz
Есть вариант держать копии удаленных баз в локальной сети, заливаемых exp/imp
Все зависит от их размера и готовности держать "лишнее" железо


Задача - собирать изменения из всех баз в одну, а для чего ? Конечно же для поиска по объединеной базе и т.п. операциям. Баз может быть много (бывает до 100 шт.). Если держать копии баз целиком, это получиться что нужно на сервере держать 100 баз. А поиск по ним как проводить? и времени он сколько будет занимать? А отчет получить???? - это вообще гимморой будет.
10 окт 06, 11:33    [3240584]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
НУ если настолько специфическая задача, может быть чтоит попробовать ручками написать лог вставленных\измененных\удаленных записей и делать чтото типа своего минидампа для переноса раз в неделю допустим.
10 окт 06, 11:45    [3240694]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
MinistrBob
tru55
Я думаю, что здесь нужно отслеживать не только вновь внесенные записи, но и UPDATE / DELETE, в этом случае exp/imp не очень подойдет


Именно из-за этого exp/imp не подходит.

AlexanderKz
Есть вариант держать копии удаленных баз в локальной сети, заливаемых exp/imp
Все зависит от их размера и готовности держать "лишнее" железо


Задача - собирать изменения из всех баз в одну, а для чего ? Конечно же для поиска по объединеной базе и т.п. операциям. Баз может быть много (бывает до 100 шт.). Если держать копии баз целиком, это получиться что нужно на сервере держать 100 баз. А поиск по ним как проводить? и времени он сколько будет занимать? А отчет получить???? - это вообще гимморой будет.


Тебе предложили хорошую идею, а ты её в "гимморой" превратил. :o)))
Обычной репликацией слей данные из этих БД в центральную БД и делай свои отчёты на здоровье.

Т.е. архитектура такая.
В локальной сети создаёшь stanby образы удалённых БД.
Из удалённых БД в центральный офис доставляешь журналы (exp/imp не прокатит) и накатываешь их на standby образы.
С этих образов делаешь обычную репликацию в центральную БД.

При желании можно разобраться со стандартными механизмами репликации БД, и сделать свой транспорт. Вроде там всё не так страшно. Очереди отложенных транзакций хранятся в таблицах. API для извлечения и сохранения транзакций в очередях имеется. SQL*Trace работает.
10 окт 06, 11:56    [3240798]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
MinistrBob
Member

Откуда: Москва
Сообщений: 281
Vint
НУ если настолько специфическая задача, может быть чтоит попробовать ручками написать лог вставленных\измененных\удаленных записей и делать чтото типа своего минидампа для переноса раз в неделю допустим.


На самом деле сейчас так и есть. На схеме триггера формируют записи в лог-таблицу, потом пакет обрабатывает её и порция изменений выгружается сначала в промежуточную схему, а затем эта промежуточная схема выгружается в дамп exp. На принимающей БД загружается промежуточная схема imp, а пакет заносит все изменения в основную схему.

Т.е. механизм самописный (триггера и пакет).
Он работает нормально, но есть мысль (в связи с развитием проекта и переходом на новые версии Oracle) посмотреть в сторону стандартных технологий, если их можно использовать для такой задачи, то зачем писать и самое главное потом поддерживать что-то самим. Ну как-то так.
10 окт 06, 12:04    [3240862]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
MinistrBob
Т.е. механизм самописный (триггера и пакет).
Он работает нормально, но есть мысль (в связи с развитием проекта и переходом на новые версии Oracle) посмотреть в сторону стандартных технологий, если их можно использовать для такой задачи, то зачем писать и самое главное потом поддерживать что-то самим. Ну как-то так.


Если работает, то и пусть работает. Стандартные механизны довольно сложны в эксплуатации, всё равно придётся "поддерживать что-то самим".
10 окт 06, 12:13    [3240933]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 7126
MinistrBob
tru55
Я думаю, что здесь нужно отслеживать не только вновь внесенные записи, но и UPDATE / DELETE, в этом случае exp/imp не очень подойдет


Именно из-за этого exp/imp не подходит.



Это не проблема. Если есть PK то
Добавте в таблицу дату добавления/изменения записи и exp/imp по селекту

MinistrBob

AlexanderKz
Есть вариант держать копии удаленных баз в локальной сети, заливаемых exp/imp
Все зависит от их размера и готовности держать "лишнее" железо

Задача - собирать изменения из всех баз в одну, а для чего ? Конечно же для поиска по объединеной базе и т.п. операциям. Баз может быть много (бывает до 100 шт.). Если держать копии баз целиком, это получиться что нужно на сервере держать 100 баз. А поиск по ним как проводить? и времени он сколько будет занимать? А отчет получить???? - это вообще гимморой будет.


Зачем полные копии? Если есть связь, достаточно snapshot нужных таблиц
Или если размеры таблиц не большие, то exp TTS
Или вообще external table
---------------------
- если таблицы передаваемые за один сеанс, то копия всей таблицы
*imp TTS
*external table
*imp table

- если нет, то PK+update date и передача изменений теми же способами + процедура заливки в общую таблицу ( с партицирование / индексирование / разрешение коллиций)
10 окт 06, 12:24    [3241016]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
MinistrBob
в связи с развитием проекта и переходом на новые версии Oracle
Если действительно проект развиваеться необходимо не только версии оракла обновлять но и подумать о создании сети, а не на дискетках переносить, ну а после этого уже можно и на репликацию посмотреть, а так вспоминаеться анекдот про "работает и не трож!"
10 окт 06, 12:29    [3241066]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
hell
Member

Откуда:
Сообщений: 3001
MinistrBob

На самом деле сейчас так и есть. На схеме триггера формируют записи в лог-таблицу, потом пакет обрабатывает её и порция изменений выгружается сначала в промежуточную схему, а затем эта промежуточная схема выгружается в дамп exp. На принимающей БД загружается промежуточная схема imp, а пакет заносит все изменения в основную схему.

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


У нас такое работало и работает и уже не будет работать, ибо каналы связи теперь есть везде)
10 окт 06, 12:40    [3241146]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
MinistrBob
Member

Откуда: Москва
Сообщений: 281
Vint
Если действительно проект развиваеться необходимо не только версии оракла обновлять но и подумать о создании сети, а не на дискетках переносить ...


Я с эти полностью согласен, но я представляю разработчиков, а еще есть заказчик, который диктует свои условия и они во многих случаях объективны, т.к. проект охватывает всю Россию, попробуй найти сеть где нибудь в Якутии или на Сахалине, да даже в Московской области это иногда проблема.

Vint

...а так вспоминаеться анекдот про "работает и не трож!"


С этим я тоже согласен (хотя в работе этого механизма бывают накладки). Но сам механизм существует давно, с Oracle 7. А сейчас большая часть систем работает на 9.2.0.6. и кое-кто готов перейти на 10g. Вот отсюда и вопрос, за это время ведь Oracle тоже развивался и может быть уже есть механизмы более современные (читай надежные и быстродейственные).

Vadim Lejnin


Зачем полные копии? Если есть связь, достаточно snapshot нужных таблиц
Или если размеры таблиц не большие, то exp TTS
Или вообще external table
---------------------
- если таблицы передаваемые за один сеанс, то копия всей таблицы
*imp TTS
*external table
*imp table

- если нет, то PK+update date и передача изменений теми же способами + процедура заливки в общую таблицу ( с партицирование / индексирование / разрешение коллиций)


Связи нет (если бы была, не было бы проблемы).
А вариант с PK+update date и передача изменений теми же способами - я над этим уже думал, но таким образом мы не можем отслеживать удаленные записи (только новые или измененые), а их нужно обязательно отслеживать иначе данные искажаются.
10 окт 06, 13:01    [3241340]     Ответить | Цитировать Сообщить модератору
 Re: Как синхронизировать базы через промежуточный носитель?  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
MinistrBob
[quot Vint]Я с эти полностью согласен, но я представляю разработчиков, а еще есть заказчик, который диктует свои условия и они во многих случаях объективны, т.к. проект охватывает всю Россию, попробуй найти сеть где нибудь в Якутии или на Сахалине, да даже в Московской области это иногда проблема.

Странно на оракл пару миллионов есть деньги а на спутниковое оборудование для инета нету??? вообще если вы следили за сменами версий то можно было осознать что оракл в механизмах переноса информации на дискетах ничего не менял, поэтому вам остаеться только путь улучшения производительности существуюшего механизма путем внедрения новых возможностей. Честно говоря даже не знаю каких но может быть другие участники подскажут)))
10 окт 06, 13:11    [3241416]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить