|
|
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Коллеги, прошу помощи в следующем вопросе! Цель: Необходимо обеспечить право на ресурс в БД Oracle (одна строка в таблице) первому добежавшему Java-приложению из нескольких. Есть БД для высоконагруженного OLTP-приложения, в которой крутится значительная часть логики. Есть несколько независимых, т.е. не подозревающих о существовании друг друга Java-приложения (работают на территориально распределенных WAS). Существуют ситуации, когда любое из них должно запустить ХП в Oracle, но только первое достучавшееся и только один раз, для чего ХП (или приложение) должна выставить флаг (изменить запись в таблице). SELECT … FOR UPDATE может гарантировать блокировку и защиту от многократного изменения. НО в случае аварийного завершения приложения строка остаётся недоступной для изменения живыми приложениями. Каков общий подход для решения подобных задач в связке Java-Oracle? Что можете посоветовать? Буду благодарен за любые конструктивные предложения и замечания. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 13:20 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Нужно чтобы аварийно упавший аппликейшен отпустил коннект. Oracle DBMS увидет что сеанс завершён и откатит SELECT … FOR UPDATE. Надо посмотреть как вы испольузеете пул. И что происходит с сетевым соединением после падения. В корректном варианте клиентский сокет должен быть закрыть. Но я-бы поставил вопрос о целесообразности использования таблицы в качестве монитора или мьютекса. Посмотрите описание пакетов DBMS_LOCK и возможно DBMS_ALERT. Может поможет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 13:44 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvas, Можно подробнее про "строка остаётся недоступной"? Почему у вас так происходит? После того как приложение отвалилось строки должны быть доступными. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 13:45 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
maytonНужно чтобы аварийно упавший аппликейшен отпустил коннект. +1 либо менять метод блокировки. Не с горы же клиенты начали делать SELECT … FOR UPDATE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 13:52 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Могу рассказать, как это делалось в СУБД, не поддерживающих SELECT … FOR UPDATE Для этого используется уровень изоляции, поддерживающий грязные чтения: 1. первая стартовавшая транзакция обновляет запись в таблице (0->1) 2. другие транзакции, поскольку они dirty read, видят эту 1 и ничего не предпринимают 3. в конце работы первой транзакции делается обратное обновление 1 на 0 В случае, если коннект отвалился во время работы 1-й транзакции, сервер делает откат по таймауту, таким образом, запись не блокируется навсегда ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 13:54 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Аффтар! я делал такую блокировку только в модальном окне и польз-ли не далеко друг от друга. Либо 3 вар-та: - вообще не блокировать (без UPDATE) - как сейчас - добавить поле\флаг в БД - хибер с его методами. вам решать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 13:57 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
xifr, Работает Java-приложение, которое блокирует строки. Вынимаю сетевой (LAN) кабель, при этом в СУБД сессии остаются, блокировки со строки не снимаются. Сразу не предупредил, извините, - мопед не мой. :-) Т.е. я не Java-разработчик ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 13:59 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
ivanra, тогда уж лучше флаг - взял на редактирование) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 13:59 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasВынимаю сетевой (LAN) кабель, при этом в СУБД сессии остаются БД профи есть? Пусть киляет сессии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:00 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123ivanra, тогда уж лучше флаг - взял на редактирование) Тут весь фокус в том, что при обновлении и грязных чтениях остальные соединения сразу видят, что запись занята и не блокируются (могут выполнять другую полезную работу). При попытке сразу брать на редактирование, будет блокировка, пока предыдущий "хозяин" не отпустит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:05 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Коллеги, большое спасибо, но я думал, что вы мне про опыт с чем-то подобным JMS и Oracle AQ расскажете. Большинство из предлагаемого рассматривалось, но было отвергнуто. Для киляния сессии необходимо её пометить, желательно не только именем приложения, но и каким-то таймштампом, и каким-нибудь джобом проверять v$session (весьма небыстрое представление). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:13 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
1. Для каких именно целей используется select for update? (т.е. на какое время удерживается блокировка) 2. Вполне возможно, что в таком раскладе лучше использовать оптимистическое блокирование, т.е. блокировка накладывается только на момент изменения данных, а то и вообще просто в контексте самого апдейта (без select for update), если же данные с момента чтения изменились, выдается эксепшн, мол. пока вы чесали репу, данные уже были изменены, прочитайте заново и тогда уж правьте по-новой ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:13 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasСуществуют ситуации, когда любое из них должно запустить ХП в Oracle, но только первое достучавшееся и только один раз, для чего ХП (или приложение) должна выставить флаг (изменить запись в таблице). SELECT … FOR UPDATE может гарантировать блокировку и защиту от многократного изменения. А. Для запуска ХП. Так может тогда вообще отказаться от таблицы, в которой фиксятся запуски? А сразу смотреть all_jobs? (если уже запущено, то и не запускаем). А уже в самой процедуре вести протокол запусков, если он вообще нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:18 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasРаботает Java-приложение, которое блокирует строки. Вынимаю сетевой (LAN) кабель, при этом в СУБД сессии остаются, блокировки со строки не снимаются. Таблица "занятия ресурса". При старте приложение пишет " я схватил", свой IP, время захвата, время обновления. Каждый 30 секунд обновляет статус. Если в течении минуты не обновило- ресурс считается свободным и может быть взят другим. Соответственно само приложение должно, дойдя до обновления статуса проверить, не прошла ли минута, и если прошла- сделать харакири. Блокировки собственно таблицы- только в момент взятия. Остальное- изменения commit'ятся. Заодно будет лог- кто, когда и сколько захватывал ресурс. Работать через системные вещи- требуются права админа для снятия блокировки, что не всегда допустимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:22 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, Первый захвативший тем самым не даёт другим прочитать значение флага, независимо от того разрешительный или запретительный он. Если необходимо изменить флаг, то меняет. Без update все могут прочитать разрешительный флаг и отработать код, а этого и не надо. Вопрос больше в том, как избежать блокировок при аварийном завершении. Т.е. можно и без update, но тогда должен быть гарантирован строгий порядок запросов, т.е. некая очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:22 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasКоллеги, большое спасибо, но я думал, что вы мне про опыт с чем-то подобным JMS и Oracle AQ расскажете. Большинство из предлагаемого рассматривалось, но было отвергнуто. Для киляния сессии необходимо её пометить, желательно не только именем приложения, но и каким-то таймштампом, и каким-нибудь джобом проверять v$session (весьма небыстрое представление). Какой смысл тебе чего-то советовать по JMS или AQ если неясно о чём твоя задача? Что делает? Как устроена? Почему идёт битва за ресурс? Есть ли альтернативная подход? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:23 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasxifr, Работает Java-приложение, которое блокирует строки. Вынимаю сетевой (LAN) кабель, при этом в СУБД сессии остаются, блокировки со строки не снимаются. Сразу не предупредил, извините, - мопед не мой. :-) Т.е. я не Java-разработчик В этом случае скорее всего нужно настраивать СУБД, но это конечно не всегда бывает возможно/хорошо. По хорошему, ваши приложения могут работать не на прямую с СУБД, а через сервер приложение, тогда все логику синхранизации и блокировок, можно перенести на сервер, а не на СУБД. По мне так более правильно с точки зрения архитектуры. Например, может быть вам вообще это будет проще сделать через очереди (на сервере). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:24 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Alexey TominКаждый 30 секунд обновляет статус. Это КРИТИЧЕСКИ много! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:24 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS А сразу смотреть all_jobs? Опять всё сведется к тому, что все НЕЗАВИСИМЫЕ приложения попытаются запустить джобы, а должено отработать только одно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:27 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasПервый захвативший тем самым не даёт другим прочитать значение флага, независимо от того разрешительный или запретительный он. Если необходимо изменить флаг, то меняет. Без update все могут прочитать разрешительный флаг и отработать код, а этого и не надо. Это понятно - так и говорю, мол может запускать не напрямую, а через джобы и смотреть при этом, не запущен ли уже, если запущен, то и не запускаем, тогда и таблица эта с флагом не нужна же, а если нужна, то заполнять ее уже из самой отрабатываемой ХП. urvasВопрос больше в том, как избежать блокировок при аварийном завершении. Т.е. можно и без update, но тогда должен быть гарантирован строгий порядок запросов, т.е. некая очередь. Если нужна именно очередь, возможно, вариант - в самой ХП прописать ожидание завершения предыдущего запуска. То есть: 1. Из Джава приходит команда на постановку ХП на обработку (например, добавляет джоб) 2. Все. Все остальное - в том числе и возможность выполнения отслеживает сама ХП (а она уже не зависит от клиента и может блокировать что угодно хоть отвалится клиент, хоть нет, ей пофиг, она в джобе )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:32 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
xifrПо хорошему, ваши приложения могут работать не на прямую с СУБД, а через сервер приложение, тогда все логику синхранизации и блокировок, можно перенести на сервер, а не на СУБД. По мне так более правильно с точки зрения архитектуры. Например, может быть вам вообще это будет проще сделать через очереди (на сервере). 1. Серверов приложений и так несколько, но проблемы это не снимает. Обвязка между несколькими СП, некий координатор? Вопросо будет ещё больше, ИМХО. 2.Вот про очереди бы поподробнее. Точнее, про все составляющие этого процесса. Я не даром упомянул про JMS и AQ. Есть подобный опыт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:32 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasОпять всё сведется к тому, что все НЕЗАВИСИМЫЕ приложения попытаются запустить джобы, а должно отработать только одно. Если грамотно наколхозить, то не сведется ) Ну и все-таки вариант повторю: 1. ХП ставим джобом (поставили и забыли), не надо ничего блокировать 2. А уже в самой ХП может делать что угодно, выставлять блокировку например, что типа я пошла работать, остальные сидят курят. Если же ХП вдит, что уже кто-то пашет (не может выставить флаг), ну или ждет (тут механизмы тоже разные могут быть), или спокойно завершается необходимым образом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:36 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvas2.Вот про очереди бы поподробнее. сначала select update убрать. А тогда и очереди не понадобятся). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:49 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
maytonurvasКоллеги, большое спасибо, но я думал, что вы мне про опыт с чем-то подобным JMS и Oracle AQ расскажете. Большинство из предлагаемого рассматривалось, но было отвергнуто. Для киляния сессии необходимо её пометить, желательно не только именем приложения, но и каким-то таймштампом, и каким-нибудь джобом проверять v$session (весьма небыстрое представление). Какой смысл тебе чего-то советовать по JMS или AQ если неясно о чём твоя задача? Что делает? Как устроена? Почему идёт битва за ресурс? Есть ли альтернативная подход? +1 Аффтар просто хочет поучиться очередям. За счёт фирмы. Зачем ему блокировать он сам не знает. Удачи аффтару! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:52 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasAlexey TominКаждый 30 секунд обновляет статус. Это КРИТИЧЕСКИ много! Не проблема- сделай 1 и 2 секунды. Суть в том, что время протухания больше, чем период обновления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:52 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123сначала select update убрать. А тогда и очереди не понадобятся ) Вот и о том же ) JDSт.е. блокировка накладывается только на момент изменения данных, а то и вообще просто в контексте самого апдейта (без select for update) function set_flag return number is n_res number; begin update mytable_with_flag -- упрощенно set flag = 1 where flag = 0; if sql%rowcount = 0 then n_res := 0; -- флаг уже стоит else n_res := 1; -- флаг выставили end if; return n_res; end; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 14:56 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, ну перепутал чел бизнес транзакцию и технические оракла. Бывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:00 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvas1. Серверов приложений и так несколько, но проблемы это не снимает. Обвязка между несколькими СП, некий координатор? Вопросо будет ещё больше, ИМХО. * У сервер приложения конекты с СУБД как бы не должны отваливаться (только в аварийных случаях) * Отвалившихся клиентов будет проще определить * Что означает аббревиатура СП? urvas2.Вот про очереди бы поподробнее. Точнее, про все составляющие этого процесса. Я не даром упомянул про JMS и AQ. Есть подобный опыт? Я думаю тут много кто имел опыт по работе с JMS и AQ, ничего там особо хитрого/сложного нет. Чтобы говорить про очереди, нужно больше информации по вашей задаче. Если у вас все сводится к списку задач которые клиенты должны брать и выполнять, то я думаю через очереди все хорошо получится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:03 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDSкоммититься не забываем ) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:20 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDSJDSкоммититься не забываем ) Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. а чем это принципеально отличается от select update, ведь в случае неожиданного разрыва коннекта, будет тоже самое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:30 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
xifrА чем это принципеально отличается от select update, ведь в случае неожиданного разрыва коннекта, будет тоже самое. Абсолютно верно - практически ничем, кроме того, что можно выставить флаг без select for update (просто мелкое замечание) Насчет неожиданного разрыва тоже писал - надо убрать управление блокировками напрямую из java или какого-либо другого СП и как вариант, запускать процедуры джобами ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:35 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, Вот Вы никак не хотите понять, что база не может сама принимать решение о старте какого-либо её, базы, внутреннего приложения. В моём случае это внешний сигнал из Java, а поэтому никакие джобы не помогут - они либо сигнала не увидят (если флаг не выставить), либо дружною толпою начнут обработку (если доверить вызов джобов внешнему приложению). Собственно, вопрос больше концептуальный - видимо, необходим какой-то промежуточный слой/механизм, обеспечивающий единственную точку с гарантированным последовательным доступом к запуску ХП/выставлению флага в БД. Потому как все предложенные способы не обеспечивают работоспособность в аварийной ситуации за приемлемое время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 15:58 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasСобственно, вопрос больше концептуальный - видимо, необходим какой-то промежуточный слой/механизм, обеспечивающий единственную точку с гарантированным последовательным доступом к запуску ХП/выставлению флага в БД. Потому как все предложенные способы не обеспечивают работоспособность в аварийной ситуации за приемлемое время. Угу. Многопользовательсую СУБД Оракле нагнуть через последовательный доступ. Концептуально). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 16:11 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123, В моём конкретном случае многопользовательность - зло. В моей задаче, как в стометровке или марафоне, стартует сколь угодно много, но победитель всегда один. Или по-другому - дрочеров много, а отец один. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 16:18 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasВот Вы никак не хотите понять, что база не может сама принимать решение о старте какого-либо её, базы, внутреннего приложения. В моём случае это внешний сигнал из Java, а поэтому никакие джобы не помогут - они либо сигнала не увидят (если флаг не выставить), либо дружною толпою начнут обработку (если доверить вызов джобов внешнему приложению). По порядку: 1. Java-приложение дает базе сигнал на запуск ХП в виде создания джоба (т.е. по сути оно поставило задание в очередь) - все дальше оно может хоть отваливаться, хоть еще 100 джобов попытаться поставить. Чем это не сигнал базе? ) 2. Внутри самой ХП прописывается механизм выставления флага. Т.е. джоб запускает процедуру, а уже процедура, выставляет флаг, если у нее не получилось выставить флаг, значит кто-то уже выставил флаг ранее (другой джоб) в этом случае (смотря что нужно) процедура или просто завершается (возможно с протоколом и т.п. в общем как душе угодно), или ждет завершения уже работающей сессии может там через алерты/пайпы (надо покурить про них), второй вариант сложнее, когда надо ждать завершения. В каком месте здесь может быть " они либо сигнала не увидят (если флаг не выставить), либо дружною толпою начнут обработку (если доверить вызов джобов внешнему приложению)" ? В том, что таким механизмом можно точно сделать обработку по очереди, а не сразу всей толпой, в этом не сомневаюсь. Единственное, возможно, хотите сказать, что есть требование, что выполняем ХП 100% только в том случае, если java-приложение имеет коннект вплоть до завершения выполнения этой самой ХП, в противном случае, необходимо откатить все назад. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 16:32 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Плюс требования к скорости, если надо все делать оч. быстро, то да с джобами, не очень имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 16:36 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Еще вариант (немного изуверский, но в некоторых ситуациях можно попробовать): 1. Никакой флаг блокировки не выставляется 2. Каждое java-приложение обрабатывает данные во временной таблице (т.е. сначала забирает данные во временную таблицу и крутит их как угодно никто никого опять же тоже не блокирует, т.к. каждый работает со своими данными) 3. Сбрасывают изменения в постоянную таблицу и вот тут, кто первый сбросил, того и тапки ) (отследить можно по номеру изменения например на сиквенсе, который мы забираем при подхвате данных во временную таблицу) Возможно этот же вариант, можно попытаться реализовать, задав соответствующий уровень изоляции транзакции, но с этим не приходилось эксперемнтировать ) Если Java-приложение отваливается, то оно никого не держит - только данные во врем. табличках, которые автоматом почистятся. Понятно, что если надо продублировать много данных из разных таблиц, если подразумевается, что одновременно могут работать сотни сессий в таком ключе, если необходимо максимальное время отклика, а не переливание из таблицы в таблицу, то удовольствие сомнительное ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 17:17 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, Да, похоже, что создание джоба из Java может помочь, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 17:52 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasJDS, Да, похоже, что создание джоба из Java может помочь, спасибо. угу. Особенно под пользователем sys. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 18:28 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasPetro123, В моём конкретном случае многопользовательность - зло. В моей задаче, как в стометровке или марафоне, стартует сколь угодно много, но победитель всегда один. Или по-другому - дрочеров много, а отец один. даже не верится, что это написал ТС, который знает слова OLTP\WAS ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 18:30 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS1. Никакой флаг блокировки не выставляется 2. Каждое java-приложение обрабатывает данные во временной таблице (т.е. сначала забирает данные во временную таблицу и крутит их как угодно никто никого опять же тоже не блокирует, т.к. каждый работает со своими данными) 3. Сбрасывают изменения в постоянную таблицу и вот тут, кто первый сбросил, того и тапки ) (отследить можно по номеру изменения например на сиквенсе, который мы забираем при подхвате данных во временную таблицу) Возможно этот же вариант, можно попытаться реализовать, задав соответствующий уровень изоляции транзакции, но с этим не приходилось эксперемнтировать ) Если Java-приложение отваливается, то оно никого не держит - только данные во врем. табличках, которые автоматом почистятся. Понятно, что если надо продублировать много данных из разных таблиц, если подразумевается, что одновременно могут работать сотни сессий в таком ключе, если необходимо максимальное время отклика, а не переливание из таблицы в таблицу, то удовольствие сомнительное ) Чувак. Найми себе аналитика + разработчика Java/Oracle. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 19:24 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
maytonЧувак. Найми себе аналитика + разработчика Java/Oracle Спасибо, денег только дайте, обязательно найму, хоть тыщу аналитиков и три тыщи старших помощников младших аналитегов ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2015, 21:54 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123urvasPetro123, В моём конкретном случае многопользовательность - зло. В моей задаче, как в стометровке или марафоне, стартует сколь угодно много, но победитель всегда один. Или по-другому - дрочеров много, а отец один. даже не верится, что это написал ТС, который знает слова OLTP\WAS Если Вы желаете скатиться в унылый троллинг, то предлагаю Вам отойти от понятия "вера" и для начала освежить в памяти курс философии, а именно понятия диалектики, истины и закон перехода количества в качество. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 09:08 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvas, обиделсо? Тебя конкретно все со второго поста спросили - зачем UPDATE? Твои проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 09:14 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123urvas, обиделсо? Тебя конкретно все со второго поста спросили - зачем UPDATE? Твои проблемы. Обиделось, конечно же... Oracle® Database Concepts 11gRelease 2 (11.2) E40540-02, p.196 A reader never blocks a writer. Because a reader of a row does not lock it, a writer can modify this row. The only exception is a SELECT ... FOR UPDATE statement, which is a special type of SELECT statement that does lock the row that it is reading. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 09:33 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvas, позови взрослых. Тебя спрашивали зачем с точки зрения пользователей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 09:39 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123угу. Особенно под пользователем sys. Вы-таки шото имете против джобов? ) При чем тут сис непонятно ) Petro123, и чо вы прицепились к человеку зачем, да зачем, по всей видимости речь идет как раз не об олтп-операциях, а просто о запуске некой длительной обработки в контексте конкретной задачи, совсем не факт, что так будет построена вся система, даже для маленьких коротких запросов, хотя фиг знает конечно ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 09:58 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, Job запускается под рутом. Т.е. клиенты будут запускать под рутом. Т.е. решение Г. А так, как ты пишешь, фиг знает.))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:17 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, Вы совершенно верно поняли суть - нам необходимо извне запустить некие процессы обработки, но сделать это необходимо только один и только один раз и очень быстро. В целях диверсификации все живые внешние объекты обязаны попытаться стартовать процесс в базе, но победить должен только один, остальные - к расстрелу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:22 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Вангую, этот топик проживет долго. У ТС литературный дар. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:26 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123Вангую, этот топик проживет долго. У ТС литературный дар. Учитесь, а то про root в Oracle - это как то пошло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:31 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvas, "Один раз" расшифруй. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:32 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123Job запускается под рутом. Т.е. клиенты будут запускать под рутом. Т.е. решение Г. А посоны-то и не знали и чо, что под рутом? ) Пока вроде никто не умер с того. При постановке джоба, оракле ж проверяет права доступа на запускаемые пакеты/процедуры именно пользователя. Другое дело, что может быть задача отследить от какого именно юзера был запущен данный джоб, но это тоже не проблема ж. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:34 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasPetro123Вангую, этот топик проживет долго. У ТС литературный дар. Учитесь, а то про root в Oracle - это как то пошло. Зато так страшно) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:34 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, Нет. Оракл надеется что sys не дурак. И не проверяет. Печаль. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:37 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123Нет. Оракл надеется что sys не дурак. И не проверяет. Печаль. Печаль в том, что вы слишком уверены в своей правоте, а между тем попробуйте поставить джобом на выполнение хп, на которую у вас нет прав ) Да джоб выполняется под сисом, т.е. от имени системы, но прежде вы дали системе это задание, так вот когда вы давали его, система прежде проверит, имеете ли вы право его выполнять ) А потом уже когда система запускает его (под сисом), тут она уже да, понимает, что сис не дурак ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:41 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, Я так понимаю, что про root коллеге Petro123 Рабинович напел, но кто тогда про привилегии Scheduler Privileges промолчал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:47 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDS, У меня job работает в продакшен. А у вас? Раз мы на личности перешли. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:48 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvas, Ты кодом, кодом давай. Я буду рад, если у тебя на них все будет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:51 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123, Так у Вас SYS заодно и владелец прикладных объектов системы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:51 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvas, Не отвлекайся. Выше тебе вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:53 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Дискуссия перестала носить продуктивный характер, за сим откланиваюсь. Всем спасибо! Отдельным коллегам искренне желаю на время переселиться в перезагрузочный сектор столицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:56 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
Petro123У меня job работает в продакшен. А у вас? 1. и что? о чем это должно говорить? 2. Как это относится к предложению попробовать запустить джобом ХП под юзером, у которого нет прав на эту хп? ) 3. "продакшены" разные бывают, ни о чем не говорит, да и сложно представить себе большую систему, в которой бы не использовались джобы, работают куда ж без них ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 10:58 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
urvasДискуссия перестала носить продуктивный характер, за сим откланиваюсь. Всем спасибо! Отдельным коллегам искренне желаю на время переселиться в перезагрузочный сектор столицы. Это... типа он всех тактично послал? Или это цитата из Лукьяненко? Типа там Лабиринт и всё такое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 11:05 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
по мне джобы (как и тригеры) лучше использовать только там где по другому никак. например, чисто телепотически, если там потоковое выполнение большого количества задач, и джобы будут постоянно плодить в большом количестве, как на это отреагирует Oracle? и что будет с ним через месяц? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 11:58 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
xifrпо мне джобы (как и тригеры) лучше использовать только там где по другому никак. например, чисто телепотически, если там потоковое выполнение большого количества задач, и джобы будут постоянно плодить в большом количестве, как на это отреагирует Oracle? и что будет с ним через месяц? Oracle JOBS полезны когда у вас - аналитика. И нужна максимальная пропусная способность между каналом хранения информации и логикой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 12:11 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
maytonxifrпо мне джобы (как и тригеры) лучше использовать только там где по другому никак. например, чисто телепотически, если там потоковое выполнение большого количества задач, и джобы будут постоянно плодить в большом количестве, как на это отреагирует Oracle? и что будет с ним через месяц? Oracle JOBS полезны когда у вас - аналитика. И нужна максимальная пропусная способность между каналом хранения информации и логикой. Job по сути выполняет роль шедулера и не более, разве нет? С таким же успехом можно вызывать тот же функционал из приложения. В приложение управлять шедулерами проще и более гибко. По мне, тут вопрос стоит что делает шедулер, если он выполняет какие-то системные функции и ими рулят администраторы БД, то да удобнее будет использоваь JOB. Если же это бизнес логика, то в перспективе удобнее их размещать уже в приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 12:33 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
xifrпо мне джобы (как и тригеры) лучше использовать только там где по другому никак Ну понятно, что обычно используют когда - тяжелая, долгая обработка, в том числе как раз, чтобы не отвалилась сессия-инициатор - когда по разным причинам нужен отложенный запуск или запуск по расписанию Все остальное - это суеверия ) Да и вообще все это к ораклистам ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 12:34 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
JDSДа и вообще все это к ораклистам ) Ораклисты, это еще те товарищи, не брезгуют и html генерировать на PL/SQL и файлы парсить :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 12:47 |
|
||
|
Конкуренция нескольких Java-приложений за ресурс в БД Oracle
|
|||
|---|---|---|---|
|
#18+
xifrmaytonпропущено... Oracle JOBS полезны когда у вас - аналитика. И нужна максимальная пропусная способность между каналом хранения информации и логикой. Job по сути выполняет роль шедулера и не более, разве нет? С таким же успехом можно вызывать тот же функционал из приложения. В приложение управлять шедулерами проще и более гибко. По мне, тут вопрос стоит что делает шедулер, если он выполняет какие-то системные функции и ими рулят администраторы БД, то да удобнее будет использоваь JOB. Если же это бизнес логика, то в перспективе удобнее их размещать уже в приложение. Почитай про DBMS_SCHEDULER. Там есть масса опций которую например ни cron ни Quartz (Java) не имеют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2015, 12:53 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2124964]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
174ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
96ms |
get tp. blocked users: |
1ms |
| others: | 208ms |
| total: | 520ms |

| 0 / 0 |
