|
|
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
десктоп-приложение: Java (фреймворк NetBeans), работающее на Glassfish БД: Oracle 11.2.0.3.0 заказчик желает в интерфейсе пользователя иметь функционал экспорта-импорта данных БД. чтобы сделать это надо избавиться от возможных конкурирующих с обменом данных сессий в БД. поскольку работа приложения происходит через Glassfish, то определить кол-во работающих пользователей и как-то их отключить не получается (по крайней мере гугл поиском не помог). ввел флаг "регламентных работ" в БД, по которому новые входы юзеров блокируются , но что делать с теми, кто уже успел войти в приложение? как отсечь их возможные попытки изменить данные в момент "регламентных работ" (средствами БД, Java, Glassfish, ...)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 14:19:19 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longman десктоп-приложение: Java (фреймворк NetBeans), работающее на Glassfish БД: Oracle 11.2.0.3.0 Glassfish это сервер. 3-tier значит, а не "десктоп-приложение". Или как? longmanзаказчик желает в интерфейсе пользователя иметь функционал экспорта-импорта данных БД. чтобы сделать это надо избавиться от возможных конкурирующих с обменом данных сессий в БД. поскольку работа приложения происходит через Glassfish, то определить кол-во работающих пользователей и как-то их отключить не получается (по крайней мере гугл поиском не помог). ввел флаг "регламентных работ" в БД, по которому новые входы юзеров блокируются , но что делать с теми, кто уже успел войти в приложение? как отсечь их возможные попытки изменить данные в момент "регламентных работ" (средствами БД, Java, Glassfish, ...)? Не очень понятно для чего это всё вообще? Сессии которые HTTP? Так через listener трекаются. Сделали глобальный флаг? Ну, так повесьте его через AOP на все операции с базой, или бизнес-транзакции и выкидывайте исключение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 14:25:30 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
2Blazkowicz: да, 3х-звенка (с "десктоп" погорячился). я - Oracle-разработчик, поэтому в Java-вопросах ориентируюсь весьма приблизительно. флаг - поле в БД. я предполагал, что может проверку вешать на этапе "начала транзакции" в Java, яверы были не очень рады :). параллельно думал может есть какое-то альтернативное решение/режим/флаг. нужно это всё для того, чтобы пока админ будет выполнять скажем импорт данных никакой юзер не сидел и не держал записи, подлежащие замене. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 14:36:43 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longmanя - Oracle-разработчик Тогда должно быть ещё проще. Я понимаю, что оракл версионник, но разве нельзя там замутить глобальный пессимистический лок на таблицу и пусть все транзакции ждут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 14:42:14 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longmanнужно это всё для того, чтобы пока админ будет выполнять скажем импорт данных никакой юзер не сидел и не держал записи, подлежащие замене. А что есть длинные транзакции? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 14:42:50 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
BlazkowiczА что есть длинные транзакции? настолько длинных нет, но хотелось на момент обновления данных всех юзеров от процесса отключить. тем более, что импорт предполагает под собой отключение внешних ключей, триггеров. а при таком раскладе работающий пользователь может накосячить с данными, которые лежат рядом с заменяемыми, но таковыми не являются. блокировка всей таблицы - может и вариант, не знаю, честно говоря, сколько по времени занимает такая операция при условии наличия в таблицах (шт. 30) записей по 10 - 150 млн. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 14:54:41 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
Придумал простое решение. Если у вас есть флаг в БД, то можно попробовать настроить DataSource (connection pool) на сервере, так чтобы он валидировал соединения читая это поле, например, через хранимку. Если флаг установлен, DataSource будет выкидыват исключение с определенным SQL кодом. Останется научить Java приложения понимать этот код и выдавать соответствующее сообщение. Эдакий хак на скорую руку. Есть, конечно масса нюансов, которые нужно продумать и учесть. А действительно ли есть смысл блокировать всю базу? А пул убъет не валидные соединения и новые будет уже пересоздавать. И пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 14:57:43 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
Blazkowiczlongmanнужно это всё для того, чтобы пока админ будет выполнять скажем импорт данных никакой юзер не сидел и не держал записи, подлежащие замене. А что есть длинные транзакции? +1 если их нет, то аффтар - не морочьте голову отключением ключейи целостности БД. Либо заливают ночью и выгоняют из БД, либо заливают в реале без отключения защиты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 15:04:25 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longmanможет и вариант, не знаю, честно говоря, сколько по времени а кто будет знать кроме тебя? Залей нужные данные "в час пик" и замеряй. Прежде чем отключать триггера, которые головой отвечают за целостность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 15:07:47 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
Petro123если их нет, то аффтар - не морочьте голову отключением ключейи целостности БД отключение ключей требуется при truncate partition старых данных Petro123longmanможет и вариант, не знаю, честно говоря, сколько по времени а кто будет знать кроме тебя? Залей нужные данные "в час пик" и замеряй. Прежде чем отключать триггера, которые головой отвечают за целостность. описанных объемы - предполагаемые на этапе производственной эксплуатации. замерять пока нечего BlazkowiczПридумал простое решение где-то так я и предполагал в абстрактных размышлениях BlazkowiczА пул убъет не валидные соединения и новые будет уже пересоздавать. И пр. а как будет себя вести в такой ситуации пул? скажем он делает коннекты, они помечаются как невалидные в момент "регламента" и он в цикле будет пытаться получить валидные до тех пор пока не получит их? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 15:19:21 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longmanа как будет себя вести в такой ситуации пул? скажем он делает коннекты, они помечаются как невалидные в момент "регламента" и он в цикле будет пытаться получить валидные до тех пор пока не получит их? Всё зависит от реализации пула (а их не мало) и его настроек. Че там как по-умолчанию в GlassFish - не знаю. Пул держит физические соединения. Перед тем как отдать это соединения в пользование, можно настроить валидацию. Каждый раз когда Java код делает dataSource.getConnection(), будет выполняться валидирующий запрос. В случае ошибки, пул должен попробовать закрыть соединение и создать новое при следующем запросе из Java кода. Если никаких систематических извращений нет, то такая схема должна работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 15:24:15 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longmanописанных объемы - предполагаемые на этапе производственной эксплуатации. замерять пока нечего ещё раз. - генерировать нужный объём данных для тестов - обязанность разработчика\проектировщика\тестировщика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 15:41:23 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longmanотключение ключей требуется при truncate partition старых данных переведи на русский ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 15:42:27 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
Petro123longmanописанных объемы - предполагаемые на этапе производственной эксплуатации. замерять пока нечего ещё раз. - генерировать нужный объём данных для тестов - обязанность разработчика\проектировщика\тестировщика. вы бы толкового чего сказали, чем раздавать советы по разработке. я по вашему должен за 10 минут был сгенерить 150 млн записей, всё проверить и отчитаться? Petro123переведи на русский и на англ вполне доступно truncate table with foreign key oracle ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 15:49:26 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
2Blazkowicz: в целом схема понятна. место вызова проверочного запроса это что-то типа переопределенного диспетчера соединений из пула (извиняюсь за может несвойственную терминологию) или что оно собой являет в стандартном варианте? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 15:58:36 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longman, - конечно Должен, т.к. ты принимаешь решение по архитектуре (глобальный рубильник - выгнать всех из БД) - почему за 10 мин? - FK и триггеры как раз умно держат целостность при наличии живых коннектов. ЗЫ. Длинна транзакции обычно 0,1 сек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 16:01:17 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longmanв целом схема понятна. место вызова проверочного запроса это что-то типа переопределенного диспетчера соединений из пула (извиняюсь за может несвойственную терминологию) или что оно собой являет в стандартном варианте? https://blogs.oracle.com/JagadishPrasath/entry/connection_validation_in_glassfish_jdbc http://alexandru-ersenie.com/2011/03/01/glassfish-jdbc-connection-validation-explained/ Только надо мануал найти про это дело. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 16:03:16 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
Petro123longman, 1. конечно Должен, т.к. ты принимаешь решение по архитектуре (глобальный рубильник - выгнать всех из БД) 2. почему за 10 мин? 3. FK и триггеры как раз умно держат целостность при наличии живых коннектов. ЗЫ. 4.Длинна транзакции обычно 0,1 сек. 1. то что я должен и обязан я знаю, в этом сегменте совета не просил 2. в данные момент идет рассмотрение возможных вариантов в первом приближении, никто на этом этапе на тестит производительность. а "10 минут" потому что данный вариант был предложен Blazkowicz в 14:42. 3. никто и не спорил о их разумности, говорилось, что необходимо их отключать при удалении информации посредством команд truncate table/partition 4. длина транзакции тут ни к чему. какая разница какая ее длина, если юзеру будет выдано сообщение Оракла по типу "не нашел то, что вам нужно и вообще непонятно куда делось" в то время, когда ему надо сказать что "ведутся регламентные работы, попейте чаю" и закрыть приложение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 16:22:40 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
BlazkowiczТолько надо мануал найти про это дело. спасибо за помощь, внимательно ознакомлюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 16:23:48 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longman4. длина транзакции тут ни к чему. какая разница какая ее длина, если юзеру будет выдано сообщение Оракла по типу "не нашел то, что вам нужно и вообще непонятно куда делось" в то время, когда ему надо сказать что "ведутся регламентные работы, попейте чаю" и закрыть приложение. В случае длинных транзакций может оказаться так, что куча юзеров уже получают отлуп, а админ не может начать maintenance, потому что длинная транзакция не завершена. Либо юзер вообще потеряет значимую часть работы, которая всё это время хранилась в транзакции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 16:29:53 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longman, 1. Я и дал совет. Протестить время заливки БЕЗ отключения. А потом уже РЕШАТЬ. 2. ВСЕХ вариантов - вагон. НАПРИМЕР - триггер на всю БД сразу (вход юзверей). 3. Если регламентные, то: - приказ по организации о их формате - всем рассылается предупреждение - админ ВИДИТ пользователей. Либо вырубает их сам, либо - читай регламент-приказ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 16:32:20 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
longman, ну, и вполен может быть что вы репликацию делаете велосипедом. Иначе зачем полностью очищать 5 млн. записей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 16:35:57 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
BlazkowiczПридумал простое решение где-то так я и предполагал в абстрактных размышлениях Скажите, чем это будет отличаться от остановки всей системы? Задача похоже на "Выполнить восстановления БД из бэкапа при работающих пользователях"... Мне кажется в больших нагруженных приложениях такими вещами лучше не заниматься. Есть риск разрушить БД. Лучше всех выгнать, остановить систему, выполнить требуемые работы и пустить юзвергов. Или ночью. ИМХО ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 17:26:23 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
pulpЗадача похоже на "Выполнить восстановления БД из бэкапа при работающих пользователях".. а Java причём? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 17:49:04 |
|
||
|
как сэмулировать режим регламентных работ
|
|||
|---|---|---|---|
|
#18+
2pulp: это и предполагается делать ночью, но мало ли какой юзверь может и ночью сидеть) pulpЛучше всех выгнать, остановить систему, выполнить требуемые работы и пустить юзвергов оно безусловно лучше, но квалификацию конечных пользователей на сейчас не вселяет надежд на системный подход в этом вопросе) поэтому и ищу возможные варианты, чтобы максимально обезопасить систему "от дурака" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.05.2013, 17:52:51 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2129318]: |
0ms |
get settings: |
18ms |
get forum list: |
31ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
47ms |
get topic data: |
18ms |
get forum data: |
4ms |
get page messages: |
92ms |
get tp. blocked users: |
3ms |
| others: | 284ms |
| total: | 511ms |

| 0 / 0 |
