Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / как сэмулировать режим регламентных работ / 25 сообщений из 29, страница 1 из 2
21.05.2013, 14:19:19
    #38266347
longman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
десктоп-приложение: Java (фреймворк NetBeans), работающее на Glassfish
БД: Oracle 11.2.0.3.0

заказчик желает в интерфейсе пользователя иметь функционал экспорта-импорта данных БД. чтобы сделать это надо избавиться от возможных конкурирующих с обменом данных сессий в БД. поскольку работа приложения происходит через Glassfish, то определить кол-во работающих пользователей и как-то их отключить не получается (по крайней мере гугл поиском не помог). ввел флаг "регламентных работ" в БД, по которому новые входы юзеров блокируются , но что делать с теми, кто уже успел войти в приложение? как отсечь их возможные попытки изменить данные в момент "регламентных работ" (средствами БД, Java, Glassfish, ...)?
...
Рейтинг: 0 / 0
21.05.2013, 14:25:30
    #38266357
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longman десктоп-приложение: Java (фреймворк NetBeans), работающее на Glassfish
БД: Oracle 11.2.0.3.0
Glassfish это сервер. 3-tier значит, а не "десктоп-приложение". Или как?


longmanзаказчик желает в интерфейсе пользователя иметь функционал экспорта-импорта данных БД. чтобы сделать это надо избавиться от возможных конкурирующих с обменом данных сессий в БД. поскольку работа приложения происходит через Glassfish, то определить кол-во работающих пользователей и как-то их отключить не получается (по крайней мере гугл поиском не помог). ввел флаг "регламентных работ" в БД, по которому новые входы юзеров блокируются , но что делать с теми, кто уже успел войти в приложение? как отсечь их возможные попытки изменить данные в момент "регламентных работ" (средствами БД, Java, Glassfish, ...)?
Не очень понятно для чего это всё вообще? Сессии которые HTTP? Так через listener трекаются.
Сделали глобальный флаг? Ну, так повесьте его через AOP на все операции с базой, или бизнес-транзакции и выкидывайте исключение.
...
Рейтинг: 0 / 0
21.05.2013, 14:36:43
    #38266395
longman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
2Blazkowicz:
да, 3х-звенка (с "десктоп" погорячился). я - Oracle-разработчик, поэтому в Java-вопросах ориентируюсь весьма приблизительно. флаг - поле в БД. я предполагал, что может проверку вешать на этапе "начала транзакции" в Java, яверы были не очень рады :). параллельно думал может есть какое-то альтернативное решение/режим/флаг.
нужно это всё для того, чтобы пока админ будет выполнять скажем импорт данных никакой юзер не сидел и не держал записи, подлежащие замене.
...
Рейтинг: 0 / 0
21.05.2013, 14:42:14
    #38266407
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longmanя - Oracle-разработчик
Тогда должно быть ещё проще. Я понимаю, что оракл версионник, но разве нельзя там замутить глобальный пессимистический лок на таблицу и пусть все транзакции ждут?
...
Рейтинг: 0 / 0
21.05.2013, 14:42:50
    #38266411
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longmanнужно это всё для того, чтобы пока админ будет выполнять скажем импорт данных никакой юзер не сидел и не держал записи, подлежащие замене.
А что есть длинные транзакции?
...
Рейтинг: 0 / 0
21.05.2013, 14:54:41
    #38266445
longman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
BlazkowiczА что есть длинные транзакции?
настолько длинных нет, но хотелось на момент обновления данных всех юзеров от процесса отключить. тем более, что импорт предполагает под собой отключение внешних ключей, триггеров. а при таком раскладе работающий пользователь может накосячить с данными, которые лежат рядом с заменяемыми, но таковыми не являются. блокировка всей таблицы - может и вариант, не знаю, честно говоря, сколько по времени занимает такая операция при условии наличия в таблицах (шт. 30) записей по 10 - 150 млн.
...
Рейтинг: 0 / 0
21.05.2013, 14:57:43
    #38266457
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
Придумал простое решение. Если у вас есть флаг в БД, то можно попробовать настроить DataSource (connection pool) на сервере, так чтобы он валидировал соединения читая это поле, например, через хранимку. Если флаг установлен, DataSource будет выкидыват исключение с определенным SQL кодом. Останется научить Java приложения понимать этот код и выдавать соответствующее сообщение.
Эдакий хак на скорую руку. Есть, конечно масса нюансов, которые нужно продумать и учесть. А действительно ли есть смысл блокировать всю базу? А пул убъет не валидные соединения и новые будет уже пересоздавать. И пр.
...
Рейтинг: 0 / 0
21.05.2013, 15:04:25
    #38266472
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
Blazkowiczlongmanнужно это всё для того, чтобы пока админ будет выполнять скажем импорт данных никакой юзер не сидел и не держал записи, подлежащие замене.
А что есть длинные транзакции?
+1
если их нет, то аффтар - не морочьте голову отключением ключейи целостности БД.

Либо заливают ночью и выгоняют из БД, либо заливают в реале без отключения защиты.
...
Рейтинг: 0 / 0
21.05.2013, 15:07:47
    #38266479
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longmanможет и вариант, не знаю, честно говоря, сколько по времени
а кто будет знать кроме тебя?
Залей нужные данные "в час пик" и замеряй.
Прежде чем отключать триггера, которые головой отвечают за целостность.
...
Рейтинг: 0 / 0
21.05.2013, 15:19:21
    #38266512
longman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
Petro123если их нет, то аффтар - не морочьте голову отключением ключейи целостности БД
отключение ключей требуется при truncate partition старых данных

Petro123longmanможет и вариант, не знаю, честно говоря, сколько по времени
а кто будет знать кроме тебя?
Залей нужные данные "в час пик" и замеряй.
Прежде чем отключать триггера, которые головой отвечают за целостность.
описанных объемы - предполагаемые на этапе производственной эксплуатации. замерять пока нечего

BlazkowiczПридумал простое решение
где-то так я и предполагал в абстрактных размышлениях
BlazkowiczА пул убъет не валидные соединения и новые будет уже пересоздавать. И пр.
а как будет себя вести в такой ситуации пул? скажем он делает коннекты, они помечаются как невалидные в момент "регламента" и он в цикле будет пытаться получить валидные до тех пор пока не получит их?
...
Рейтинг: 0 / 0
21.05.2013, 15:24:15
    #38266524
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longmanа как будет себя вести в такой ситуации пул? скажем он делает коннекты, они помечаются как невалидные в момент "регламента" и он в цикле будет пытаться получить валидные до тех пор пока не получит их?
Всё зависит от реализации пула (а их не мало) и его настроек. Че там как по-умолчанию в GlassFish - не знаю.
Пул держит физические соединения. Перед тем как отдать это соединения в пользование, можно настроить валидацию.
Каждый раз когда Java код делает dataSource.getConnection(), будет выполняться валидирующий запрос.
В случае ошибки, пул должен попробовать закрыть соединение и создать новое при следующем запросе из Java кода.
Если никаких систематических извращений нет, то такая схема должна работать.
...
Рейтинг: 0 / 0
21.05.2013, 15:41:23
    #38266565
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longmanописанных объемы - предполагаемые на этапе производственной эксплуатации. замерять пока нечего
ещё раз.
- генерировать нужный объём данных для тестов - обязанность разработчика\проектировщика\тестировщика.
...
Рейтинг: 0 / 0
21.05.2013, 15:42:27
    #38266568
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longmanотключение ключей требуется при truncate partition старых данных
переведи на русский
...
Рейтинг: 0 / 0
21.05.2013, 15:49:26
    #38266589
longman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
Petro123longmanописанных объемы - предполагаемые на этапе производственной эксплуатации. замерять пока нечего
ещё раз.
- генерировать нужный объём данных для тестов - обязанность разработчика\проектировщика\тестировщика.
вы бы толкового чего сказали, чем раздавать советы по разработке. я по вашему должен за 10 минут был сгенерить 150 млн записей, всё проверить и отчитаться?
Petro123переведи на русский
и на англ вполне доступно truncate table with foreign key oracle
...
Рейтинг: 0 / 0
21.05.2013, 15:58:36
    #38266605
longman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
2Blazkowicz:
в целом схема понятна. место вызова проверочного запроса это что-то типа переопределенного диспетчера соединений из пула (извиняюсь за может несвойственную терминологию) или что оно собой являет в стандартном варианте?
...
Рейтинг: 0 / 0
21.05.2013, 16:01:17
    #38266609
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longman,
- конечно Должен, т.к. ты принимаешь решение по архитектуре (глобальный рубильник - выгнать всех из БД)
- почему за 10 мин?
- FK и триггеры как раз умно держат целостность при наличии живых коннектов.
ЗЫ.
Длинна транзакции обычно 0,1 сек.
...
Рейтинг: 0 / 0
21.05.2013, 16:03:16
    #38266612
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longmanв целом схема понятна. место вызова проверочного запроса это что-то типа переопределенного диспетчера соединений из пула (извиняюсь за может несвойственную терминологию) или что оно собой являет в стандартном варианте?
https://blogs.oracle.com/JagadishPrasath/entry/connection_validation_in_glassfish_jdbc
http://alexandru-ersenie.com/2011/03/01/glassfish-jdbc-connection-validation-explained/
Только надо мануал найти про это дело.
...
Рейтинг: 0 / 0
21.05.2013, 16:22:40
    #38266657
longman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
Petro123longman,
1. конечно Должен, т.к. ты принимаешь решение по архитектуре (глобальный рубильник - выгнать всех из БД)
2. почему за 10 мин?
3. FK и триггеры как раз умно держат целостность при наличии живых коннектов.
ЗЫ.
4.Длинна транзакции обычно 0,1 сек.
1. то что я должен и обязан я знаю, в этом сегменте совета не просил
2. в данные момент идет рассмотрение возможных вариантов в первом приближении, никто на этом этапе на тестит производительность. а "10 минут" потому что данный вариант был предложен Blazkowicz в 14:42.
3. никто и не спорил о их разумности, говорилось, что необходимо их отключать при удалении информации посредством команд truncate table/partition
4. длина транзакции тут ни к чему. какая разница какая ее длина, если юзеру будет выдано сообщение Оракла по типу "не нашел то, что вам нужно и вообще непонятно куда делось" в то время, когда ему надо сказать что "ведутся регламентные работы, попейте чаю" и закрыть приложение.
...
Рейтинг: 0 / 0
21.05.2013, 16:23:48
    #38266658
longman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
BlazkowiczТолько надо мануал найти про это дело.
спасибо за помощь, внимательно ознакомлюсь
...
Рейтинг: 0 / 0
21.05.2013, 16:29:53
    #38266673
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longman4. длина транзакции тут ни к чему. какая разница какая ее длина, если юзеру будет выдано сообщение Оракла по типу "не нашел то, что вам нужно и вообще непонятно куда делось" в то время, когда ему надо сказать что "ведутся регламентные работы, попейте чаю" и закрыть приложение.
В случае длинных транзакций может оказаться так, что куча юзеров уже получают отлуп, а админ не может начать maintenance, потому что длинная транзакция не завершена.
Либо юзер вообще потеряет значимую часть работы, которая всё это время хранилась в транзакции.
...
Рейтинг: 0 / 0
21.05.2013, 16:32:20
    #38266683
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longman,
1. Я и дал совет. Протестить время заливки БЕЗ отключения. А потом уже РЕШАТЬ.
2. ВСЕХ вариантов - вагон. НАПРИМЕР - триггер на всю БД сразу (вход юзверей).
3.
Если регламентные, то:
- приказ по организации о их формате
- всем рассылается предупреждение
- админ ВИДИТ пользователей. Либо вырубает их сам, либо - читай регламент-приказ.
...
Рейтинг: 0 / 0
21.05.2013, 16:35:57
    #38266695
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
longman,
ну, и вполен может быть что вы репликацию делаете велосипедом. Иначе зачем полностью очищать 5 млн. записей.
...
Рейтинг: 0 / 0
21.05.2013, 17:26:23
    #38266867
pulp
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
BlazkowiczПридумал простое решение
где-то так я и предполагал в абстрактных размышлениях

Скажите, чем это будет отличаться от остановки всей системы? Задача похоже на "Выполнить восстановления БД из бэкапа при работающих пользователях"...
Мне кажется в больших нагруженных приложениях такими вещами лучше не заниматься. Есть риск разрушить БД. Лучше всех выгнать, остановить систему, выполнить требуемые работы и пустить юзвергов. Или ночью. ИМХО
...
Рейтинг: 0 / 0
21.05.2013, 17:49:04
    #38266936
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
pulpЗадача похоже на "Выполнить восстановления БД из бэкапа при работающих пользователях"..
а Java причём? )
...
Рейтинг: 0 / 0
21.05.2013, 17:52:51
    #38266947
longman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как сэмулировать режим регламентных работ
2pulp:
это и предполагается делать ночью, но мало ли какой юзверь может и ночью сидеть)
pulpЛучше всех выгнать, остановить систему, выполнить требуемые работы и пустить юзвергов
оно безусловно лучше, но квалификацию конечных пользователей на сейчас не вселяет надежд на системный подход в этом вопросе) поэтому и ищу возможные варианты, чтобы максимально обезопасить систему "от дурака"
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / как сэмулировать режим регламентных работ / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]