![]() |
|
Модераторы: LSD |
![]()
|
|
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Всем привет.
Оракл увидел в прошлую пятницу, так что многого могу не знать. Сам пишу на .Net. Есть небольшое приложение. Таких приложений на разных машинах много, они по чуть-чуть (раз в 5-10 минут) изменяют эти данные. Каждое такое приложение должно иметь актуальные данные с актуальностью, допустим, 10 сек. Это введение, чтобы прочувствовать ситуацию Для простоты пусть это будет обычная форма с DataGridView (контрол, который отображает данные в виде таблицы) Так как данных в гриде не так уж и много (100 -200 элементов), то, в принципе, данные можно постоянно обновлять (раз в 10 сек, например). около 1000 строк забираются за 0,3 сек Но это совсем не красиво smile Полазил по оракловскому форуму, нашел похожую ситуацию http://forums.oracle.com/forums/thread.jsp...478򀂾 Там предложили, по сути, только одно решение: Повесить на таблицу триггер (либо запустить в базе приложение, которое будет отслеживать изменения), который будет уведомлять приложение об изменениях в таблице. Но я в этом совсем не особо секу. Можно здесь поподробнее? Жду ваших ответов, ivashkanet P.S. Эту же тему я создал в .Net разделе, но так как люди тут и там крутятся разные, то это,ИМХО, не сильно страшно. |
|||
|
||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
Вот глава из книги, но не для недельного стажа с оракл...
Источник: Oracle для профессионалов Автор: Том Кайт
При использовании этого пакета оракл, не нужно будет ставить интервалы обнавления, а грид на форме будут обновляться пофакту изменения данных в БД. Это сообщение отредактировал(а) DimW - 5.3.2007, 16:15 |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
DimW, спасибо большое, буду разбираться
|
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Понятно, нормально. С этим жить можно Хотя люди говорят что не сильно Но флаг с ним Я так понимаю это нужно писать в строку SQL (PL/SQL). Но: 1) у меня первая команда не идет "begin 2 dbms_alert. register (' MyAlert') ;3 end;4 /"
У меня OracleXE. Скорее всего этого нет в нем 2) Здесь описано как кидать и ловить сообщения через PL/SQL, а как ловить их из приложения? Или так и посылать эту команду из приложения как обычный SQL? Еще момент: эти приложения будут уведомлять свой личный Oracle, а потом эти базы будут реплицироваться (или что-то там делать). Будет ли этот сигнал передан на все другие машины или он передастся только на эту? Это только по требованиям независимости приложений и возможности работы в offLine |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 18 Всего: 538 |
Нигде.
Очень просто вызываешь из свойе программы функцию WAITONE или WAITANY и сессия будет заблокирована пока не истечет таймаут или не придет сообщение. В свете того, что DBMS_ALERT в Oracle XE отсутсвует, я бы рекомендовал попробовать заменить его на UTL_TCP (если он там есть конечно). -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Ясно. Не очень хорошо. Документация по XE говорит, что он все же есть:
Странно. Может его нужно как-нибудь активировать?
Нашел вот что (перерыл все пакеджи):
Т.е. есть и UTL_TCP и DBMS_CHANGE_NOTIFICATION, который, ИМХО, специально предназначен для этого. |
||||||
|
|||||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
классом для WAITONE и WAITANY является пакет dbms_alert. Вот же написано -
если в XE нет dbms_alert то WAITONE и WAITANY ты конечно же не найдешь... Это сообщение отредактировал(а) DimW - 6.3.2007, 09:22 |
|||
|
||||
| ivashkanet |
|
||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Да я вижу Но это в PL/SQL. А мне нужно в C#
|
||||
|
|||||
| DimW |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
а понял... ну от pl/sql тебе не отвертется, т.е. хранимку на нем пишешь, а как эту хранимку из C# вызвать, тебе лучше знать...
ща мож через пол часика что нить накидаю что бы было полное представление как это работает... Это сообщение отредактировал(а) DimW - 6.3.2007, 09:50 |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
||||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Оказалось, что у меня не было прав вызывать этот пакет.
Зашел под системным аккаунтом и все заработало Надо давать привилегии запуска пакетов моему юзеру. Вот только почему было такое дурное сообщение об ошибке Сказали бы сразу нет прав, а то.. НЕТ ПРАВ |
|||
|
||||
| DimW |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1330 Регистрация: 24.2.2005 Где: Орёл Репутация: 23 Всего: 44 |
ivashkanet, спасибо за +
дык написал уже, так что не проподать же добру... мож кому нить еще понадобится... в первую очередь нужно внимательно прочитать вот это, я по случайности опустил один из важных шагов "настройка": источник тот же
в качестве примера я взял такую схему взаимодействия: при insert в таблицу - test_alert_tbl, нужно получить сообщение с вставленным значением. приступаем к установке тестового примера. создаем таблицу test_alert_tbl:
затем создаем триггер для этой таблицы, он то и будет давать отчет о вставленной записи:
теперь создаем процедуру для получения события, о котором говорит нам триггер:
все, теперь можно тестировать. запускаем нашу процедуру - ждунчика события:
сессия переходит в "ждущий режим"... т.е. ждет когда произойдет событие под названием "insert_alert" теперь можно спокойно открыть новую сессию и вставить значение в поле name нашей таблицы. после вставки наша процедура прекратит работу и возвратит значение вставленной записи. Это сообщение отредактировал(а) DimW - 6.3.2007, 11:21 |
||||||||||
|
|||||||||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: нет Всего: 149 |
Всем еще раз спасибо.
Чисто для .Net существует замечательный класс OracleDependency Class Я еще с ним не сильно разбирался, но тесты он прошел на ура |
|||
|
||||
![]()
|
| Правила форума "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. |