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

Откуда: Москва
Сообщений: 10641
Есть база данных из которой необходимо каждый день выкачивать изменения. Ни в одной из таблиц нет столбца когда внесли изменения и нельзя его добавить, т.к. бд уже написана и работает и ни кто не будет этим заниматься. Можно ли создать на каждую таблицу логи материализованного представления для решения данной задачи? Есть ли здесь грабли?
27 ноя 07, 15:08    [4969399]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
Создать можно, но, естественно, придётся потестировать приложение, поскольку создание объектов схемы, это изменение БД. В частности, может снизится производительность операций.

Грабли в том, что эти логи - внутренний механизм Оракла, который не очень то документирован, а строить систему методом тыка на догадках не хорошо.

Скорее всего добавление поля с датой изменения записи и (возможно) триггера будет меньшим злом для системы.
27 ноя 07, 15:37    [4969647]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
orahome92
Guest
А в каком виде нужны изменения? что вы с ними потом делаете?
можно поднять другую базу по соседству - реплиицируемую копию этой (вместо таблиц снапшоты) и с ней уже делать что хочешь - в каком виде хош, так данные и формировать...
можно делать копию полную физическую и накатывать на нее лог транзакций боевой ( это вариант сложнее) и тоже что угодно.
Можно делать експорт, дамп заливать на новую базу, и сравнивать с базой предудущих изменений - тут много вариантов как и что делать... .
Эти варианты не зависят от логики базы и не вмешиваются, но замедляют производительность (скорее всего не значительно).
Ну и много вариантов как сделать, вмешиваясь в работу базы, - например, триггеры на все изменения (которые пихают все данные в версионные таблицы) - тогда даже не нужно добавлять никаких полей, но нужны доп тоблицы и большого размера... это заметно замедлит производительность - наверняка больше, чем встроенные оракловые механизмы для репликаций. С добавлением поля последнего изменения - вообще можно вытаскивать все изменения единоразово (если ночью не работают - то вполне нормальный вариант вытаскивания всех изменений).

Но стандартные оракловые методы наверняка лучше и быстрее и проще ;) собственные - только если вам нужен какой-то особый формат передачи этих обновлений...
27 ноя 07, 16:02    [4969867]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
Ales Protiv
Member

Откуда: Прага
Сообщений: 1872
*Tank*
Есть база данных из которой необходимо каждый день выкачивать изменения. Ни в одной из таблиц нет столбца когда внесли изменения и нельзя его добавить, т.к. бд уже написана и работает и ни кто не будет этим заниматься. Можно ли создать на каждую таблицу логи материализованного представления для решения данной задачи? Есть ли здесь грабли?


MV + fast refresh не подходят?
27 ноя 07, 16:15    [4969979]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
*Tank*
Member

Откуда: Москва
Сообщений: 10641
orahome92 -умно написано)
Но все же проблема в том что дату нельзя вставить, на это сейчас ни кто не пойдет.
Вопрос: на сколько логи материализованного представления замедляют insert и update? Они работают так же как тригеры или быстрее?
27 ноя 07, 16:16    [4969996]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
*Tank*
Member

Откуда: Москва
Сообщений: 10641
Ales Protiv
*Tank*
Есть база данных из которой необходимо каждый день выкачивать изменения. Ни в одной из таблиц нет столбца когда внесли изменения и нельзя его добавить, т.к. бд уже написана и работает и ни кто не будет этим заниматься. Можно ли создать на каждую таблицу логи материализованного представления для решения данной задачи? Есть ли здесь грабли?


MV + fast refresh не подходят?



Вот задаюсь вопросом, можно ли использовать MV + fast refresh, или например написать hash функцию и заниматься сравнением? Не подвешу ли базу с этими MV??
27 ноя 07, 16:18    [4970022]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
*Tank*
orahome92 -умно написано)
Но все же проблема в том что дату нельзя вставить, на это сейчас ни кто не пойдет.
Вопрос: на сколько логи материализованного представления замедляют insert и update? Они работают так же как тригеры или быстрее?


Журнал mview это просто таблица, в которую ситемный триггер делает insert. Так что на каждый insert или update для каждой изменяемой строки основной таблицы будет выполняться insert в журнал. Вот и посчитай... Будет ли insert в журнал делать системный триггер или пользовательский, скорее всего для производительности практически без разницы.
27 ноя 07, 16:23    [4970078]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
Ales Protiv
Member

Откуда: Прага
Сообщений: 1872
Имхо вместо сравнение+обновление уж лучше делать complete refresh
27 ноя 07, 16:25    [4970105]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
*Tank*
Вот задаюсь вопросом, можно ли использовать MV + fast refresh, или например написать hash функцию и заниматься сравнением? Не подвешу ли базу с этими MV??


Fast refresh полагаясь на данные журнала mview выделяет из исходной и целевой таблиц изменившиеся записи, а затем сравнивает и реплицирует только их. На больших таблицах разница между полным сравнением и сравнением только вырезок очень ощутима.
hash функции рисовать самому нет смысла, поскольку для вычисления hash нужно считать данные из обеих записей и сравнить их тут же гораздо проще чем вычислять hash. А главное, оракл умеет использовать всякоразные методы агрегации и соединения записей, в том числе использующие hash функции.

Подвешивание БД может произойти если делать refresh слишком часто. Другой причиной может стать отсутствие индексов на колонках (первичных ключах), по которым fast refresh отбирает записи для сравнения. Наконец, если СУБД и так перегружена любая дополнительная нагрузка может положить её окончательно.
27 ноя 07, 16:35    [4970210]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
orahome92
Guest
*Tank*
orahome92 -умно написано)
Но все же проблема в том что дату нельзя вставить, на это сейчас ни кто не пойдет.
Вопрос: на сколько логи материализованного представления замедляют insert и update? Они работают так же как тригеры или быстрее?

Что значит "умно"? - объяснить подробнее или методы слишком заумные?
Вообще-то, я где-то в заслуживающих доверия источниках читал, что системные триггеры (как для мвью) работают быстрее чем пользовательские практически всегда (но не знаю насколько существенна разница). Хотя сам не сравнивал ;)
Если выгружать изменения нужно не часто и можно делать в не рабочее время (например по ночам) - то самый лучший способ (не требующий вмешательств в структуру, и не влияющий на производительность системы во время большой работы) - снимать дамп раз в сутки, а потом с ним делать что угодно на копии базы ;).
27 ноя 07, 16:38    [4970240]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
orahome92
снимать дамп раз в сутки, а потом с ним делать что угодно на копии базы ;).


Бывают дампы что и за неделю не снимешь а то и вообще невозможно снять на работающей системе.
27 ноя 07, 16:47    [4970347]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
fortnet
Member

Откуда:
Сообщений: 526
mcureenab
*Tank*
Вот задаюсь вопросом, можно ли использовать MV + fast refresh, или например написать hash функцию и заниматься сравнением? Не подвешу ли базу с этими MV??


Fast refresh полагаясь на данные журнала mview выделяет из исходной и целевой таблиц изменившиеся записи, а затем сравнивает и реплицирует только их. На больших таблицах разница между полным сравнением и сравнением только вырезок очень ощутима.
hash функции рисовать самому нет смысла, поскольку для вычисления hash нужно считать данные из обеих записей и сравнить их тут же гораздо проще чем вычислять hash. А главное, оракл умеет использовать всякоразные методы агрегации и соединения записей, в том числе использующие hash функции.

Подвешивание БД может произойти если делать refresh слишком часто. Другой причиной может стать отсутствие индексов на колонках (первичных ключах), по которым fast refresh отбирает записи для сравнения. Наконец, если СУБД и так перегружена любая дополнительная нагрузка может положить её окончательно.


Бред полный.
mview
27 ноя 07, 17:12    [4970642]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
*Tank*
Member

Откуда: Москва
Сообщений: 10641
Делать физические копии и тд уж слишком. Такого боюсь ни кто опять же делать не будет. Похоже пока сошлись на hash. Причина: сравнения мы можем произвести ночью, пока никого нет, а вот если днем при залитии проводок будет инсерт в MV -это время.
Ну соответственно провоки мы все же ограничим по дате проведения))
27 ноя 07, 19:04    [4971562]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
niltas
Member [заблокирован]

Откуда: 15 минут пешком от метро
Сообщений: 290
Посмотрите в сторону CDC, в основе те же тригеры на изменения, и дата и вид изменения все есть, сопровождать легко, полей добавлять лишних не нужно, нагрузка минимальна. Когда то выбирал из mview, streams, триггеров, добавления полей и тп.
Работает до сих пор)
27 ноя 07, 19:24    [4971683]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
fortnet


Бред полный.
mview


ХМ. Да вроде там всё толково написано...
27 ноя 07, 19:58    [4971831]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
*Tank*
Делать физические копии и тд уж слишком. Такого боюсь ни кто опять же делать не будет. Похоже пока сошлись на hash. Причина: сравнения мы можем произвести ночью, пока никого нет, а вот если днем при залитии проводок будет инсерт в MV -это время.
Ну соответственно провоки мы все же ограничим по дате проведения))


С hash не парься. Напиши SQL запрос для репликации, типа merge, оракл сам разберётся как его выполнить - с hash или без. Ну на крайняк хинтами ему подскажешь...
27 ноя 07, 20:01    [4971837]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
*Tank*
Member

Откуда: Москва
Сообщений: 10641
niltas
Посмотрите в сторону CDC, в основе те же тригеры на изменения, и дата и вид изменения все есть, сопровождать легко, полей добавлять лишних не нужно, нагрузка минимальна. Когда то выбирал из mview, streams, триггеров, добавления полей и тп.
Работает до сих пор)


Спасибо, попробую поискать и посмотреть
28 ноя 07, 09:24    [4972882]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
fortnet
Member

Откуда:
Сообщений: 526
fortnet

Бред полный.
mview


mcureenab

ХМ. Да вроде там всё толково написано...


mcureenab

Fast refresh полагаясь на данные журнала mview выделяет из исходной и целевой таблиц изменившиеся записи, а затем сравнивает и реплицирует только их.


Выделяет записи из исходной и целевой таблиц и сравнивает их основываясь на какой-то там дополнительной информации из losg ? - утверждение вообще бред.

При fast refresh происходит поиск записей в mview logs , сделанных после последнего refresh, отсылка и применение этих записей согласно выбранному режиму (расписанию).

mcureenab

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


Здесь вообще не понятно о чем речь. Что за вырезки ???
Нет никакого сравнения! Есть либо идентификация (проще говоря поиск) новых записей
в mview logs для выполнения fast refresh либо полное обновление mview (complete rebuild ) для complete refresh.

mcureenab

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


Без комментариев... Абсурд.

mcureenab

Подвешивание БД может произойти если делать refresh слишком часто.


С чего бы это ?
Опять из-за долгого сравнения больших таблиц ? Или есть другая причина ?

mcureenab

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


Похоже это утверждение тоже вытекает из домысла, что oracle будет долго "отбирать записи для сравнения" , если нет первичных ключей. Абсурд

mcureenab

Наконец, если СУБД и так перегружена любая дополнительная нагрузка может положить её окончательно.


Вот это красиво. Мне понравилось.
Глубокомысленно и всеохватывающе.
28 ноя 07, 11:51    [4973942]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
mcureenab
Member

Откуда: Murmansk
Сообщений: 5928
fortnet
fortnet

Бред полный.
mview


mcureenab

ХМ. Да вроде там всё толково написано...


mcureenab

Fast refresh полагаясь на данные журнала mview выделяет из исходной и целевой таблиц изменившиеся записи, а затем сравнивает и реплицирует только их.


Выделяет записи из исходной и целевой таблиц и сравнивает их основываясь на какой-то там дополнительной информации из losg ? - утверждение вообще бред.

При fast refresh происходит поиск записей в mview logs , сделанных после последнего refresh, отсылка и применение этих записей согласно выбранному режиму (расписанию).

mcureenab

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


Здесь вообще не понятно о чем речь. Что за вырезки ???
Нет никакого сравнения! Есть либо идентификация (проще говоря поиск) новых записей
в mview logs для выполнения fast refresh либо полное обновление mview (complete rebuild ) для complete refresh.

mcureenab

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


Без комментариев... Абсурд.

mcureenab

Подвешивание БД может произойти если делать refresh слишком часто.


С чего бы это ?
Опять из-за долгого сравнения больших таблиц ? Или есть другая причина ?

mcureenab

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


Похоже это утверждение тоже вытекает из домысла, что oracle будет долго "отбирать записи для сравнения" , если нет первичных ключей. Абсурд

mcureenab

Наконец, если СУБД и так перегружена любая дополнительная нагрузка может положить её окончательно.


Вот это красиво. Мне понравилось.
Глубокомысленно и всеохватывающе.


А что если трассировочку посмотреть?
28 ноя 07, 20:03    [4977793]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
AG#
Member

Откуда: Российская Федерация
Сообщений: 2305
*Tank*
niltas
Посмотрите в сторону CDC, в основе те же тригеры на изменения, и дата и вид изменения все есть, сопровождать легко, полей добавлять лишних не нужно, нагрузка минимальна. Когда то выбирал из mview, streams, триггеров, добавления полей и тп.
Работает до сих пор)


Спасибо, попробую поискать и посмотреть


Про CDC:

там 2 вида:


Sync CDC:

Uses internal triggers to capture before and/or after images of new and updated rows
Has the same performance implications as capture via user triggers
Delivers change data in real-time



Async CDC:

Relational interface to Streams
Prepackaged Streams application
Asynchronously captures change data from redo/archive logs
Presents relational interface to change data stream
Can operate on source system (hot log) or staging system (auto log)

По перфоменсу конечно лучше Async CDC (технология logminer по анализу redo-логов)
28 ноя 07, 20:23    [4977876]     Ответить | Цитировать Сообщить модератору
 Re: Использование mview для регистрации изменений данных  [new]
AG#
Member

Откуда: Российская Федерация
Сообщений: 2305
Уточнение:

async CDC доступен в 10G EE.

И для выигрыша в производительности лучше взять вариант Async CDC AutoLog
28 ноя 07, 20:30    [4977907]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить