![]() |
|
Модераторы: LSD |
![]()
|
|
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
Добрый день,
В программе нужно получать данные из одной таблицы в базе данных, чтобы не делать этого периодически (таймером) хотелось бы подписаться на событие insert на конкретной таблице. Насколько я помню такая возможность в oracle есть, как это называется и как это делается? Я предполагаю что делается запрос wait, который зависает до того момента, пока какая нибудь другая сессия не произвела модификацию на нужной нам таблице. Добавлено через 12 минут и 37 секунд нашел пакет dbms_alert, кажется вопрос решен. |
|||
|
||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Хм. Мне кажется или речь идёт про триггеры?
-------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
нет, точнее триггеры тут конечно нужны, но самим механизмом является не триггер а dbms_alert. Из триггера дается сигнал (dbms_alert.signal), из программы ожидается (dbms_alert.waittone). Кажется так, пока только теория, проверить не успел.
|
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
azesmcar, следует помнить что алерт - разделяемый ресурс, со всеми вытекающими - сигнялящие сессии выстраиваются в очередь на коммите.
-------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
||||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
блин не смог воспроизвести :(((((
неужели я гоню? Или с 10ки чтото изменили? -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
commit происходит сразу же после insert-а, одна сессия добавляет - другая читает, вставляется всегда одна строка. Вроде проблем быть не должно. спасибо
Да нет вроде
http://download.oracle.com/docs/cd/B19306_...258/d_alert.htm ты ведь это имел ввиду? Это сообщение отредактировал(а) azesmcar - 26.5.2010, 16:35 |
||||||
|
|||||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
по всему выходит я въе#ался ошибси. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
В общем проверил, прочитал..dbms_alert по всем параметрам то что нужно
Всем спасибо. |
|||
|
||||
| ToshaCh |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 555 Регистрация: 10.11.2005 Где: Москва, РФ Репутация: 12 Всего: 26 |
Погуглил тему. Возникает вопрос если получатель сигнала один, dbms_pipe не будет ли производительнее?
Это сообщение отредактировал(а) ToshaCh - 28.5.2010, 17:39 -------------------- Slackware 12.2 | Linux 2.6.27 | Fluxbox 1.1.1 | Wmii 3 | Opera 9.63 -- Oracle это не только способ отмывания денег, но и вполне себе преличная база данных. |
|||
|
||||
| Zloxa |
|
||||||||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
У них разное назначение, потому и сравнивать в общем случае так же корректно как distinct и group by. Т.е. в частном случае одно можно заменить другим, а в общем - нет. Если мы откатим транзакцию то алерт не поднимится, а крик в трубу будет услышан. Если мы несколько раз поднимим один алерт, мы считать можем только один, а крики в трубу мы услышим каждый. Т.е. если это будет row триггер, то прочитаем мы из трубы не менее раз чем было изменено строк. Добавлено @ 15:21
удалось таки воспроизвести: Сессия1:
Сессия2:
Сессия3:
Сессия3 висит на блокировке до коммита 2й Т.е. вешая алерт в триггере ты как бы делаешь возможность модификации таблицы лишь в режиме монопольного доступа В прошлый раз воспросизвести не смог потому что слушателя не регал. Хоть эта хрень работает и немного не так как раньше упоминал, таки я не совсем балабол окзаался Это сообщение отредактировал(а) Zloxa - 28.5.2010, 15:26 -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
||||||||
|
|||||||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
в контексте вышеописанной байды вопрос таки уместен -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
ну откровенно говоря на данный момент производительность устраивает, не вижу причин что-то менять, работает - и прекрасно. К тому же alert имеет одну интересную особенность, если отправить сигнал, в то время как его никто не ожидает и все слушатели покорно занимаются своим личным делом заткнув уши, то при следующем waitone слушатель получит сигнал, и я даже подозреваю, что можно увеличить pool каким-то образом, хотя это только подозрения, уличить его мне пока не удалось |
|||
|
||||
| Zloxa |
|
|||
|
Чо? ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3473 Регистрация: 12.9.2008 Репутация: 37 Всего: 161 |
А я не говорю что так делать нельзя, я говорю, что это надо иметь в виду. Я, в свое время, прежде чем заложиться на алерты, дотошно вынес мозг выставленным мне "экспертам по интеграции", сбив с них писюльку, что вдувать они мне данные будут только одной сессией в один момент времени. После чего вставил проверку, и, в случае попытки вдувать мне многопоточно, поднимал эксепшн, где в матерной форме проклинал тех внедренцев со ссылкой на ту самую писюлю. Мое ЧСВ было сильно потешено, когда через полгода, оптимизируя интерфейсы, "эксперты по интеграции" получили мои проклятия и оставив высокомерие, которое доселе пронизывало наши отношения, пришли ко мне с низким поклоном - договариваться о правилах дальнейшей совместной жизни. Алерты мне пришлось таки убрать, но за это из дизайна, выдвинутого мне, было вычеркнуто слово "немедленно" и заменено на "ежеминутно". Добавлено через 4 минуты и 22 секунды К чему я это говорю? елси бы я не сбил писюлю и не выставил проверку, но использовал алерты, мои чудные "эксперты по интеграции" в своих проблемах с производительностью обвинили бы меня, и моей конторе пришлось бы оплачивать их усилия по устранению своих ошибок проектирования. -------------------- Достоверно известно, что 89% людей доверяют статистике взятой с потолка |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
Я имел ввиду что я это учел и это меня устраивает Транзакций тут как таковых нет, в общем задача такая Есть довольно хреновая программа, использующая довольно хреновую архитектуру, работает она настолько плохо, что ее решили переписать, и сделать это было решено "умными дядькями" в характерной им форме. Переписывать помодульно, забыв о том, что сама архитектура является плодом больного воображения. В общем две разных программы общаются через базу данных, а именно некоторую таблицу. Нынешняя программа таймером (каждые две секунды) посылает запрос базе и читает оттуда |
|||
|
||||
![]()
|
| Правила форума "Oracle" | |
|
|
Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Oracle | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |