Presentation is loading. Please wait.

Presentation is loading. Please wait.

Опыт использования Object Change Notification Петрелевич Сергей 1.

Similar presentations


Presentation on theme: "Опыт использования Object Change Notification Петрелевич Сергей 1."— Presentation transcript:

1 Опыт использования Object Change Notification Петрелевич Сергей petrelevich@yandex.ru www.orahome.ru 1

2 Потребность Карточная системаАБС 2Петрелевич Сергей petrelevich@yandex.ru Function() Card (Table tCard_obj) Изменения Card должны передаваться в режиме OnLine

3 Что такое OCN? 3Петрелевич Сергей petrelevich@yandex.ru

4 Как создать? procedure RegisterHandlerCard is vNotif cq_notification$_reg_info; vRegId number; vCursor sys_refcursor; begin vNotif := new cq_notification$_reg_info ( callback => 'BANK_OCN.HANDLERCARD', qosflags => DBMS_CQ_NOTIFICATION.QOS_ROWIDS, timeout => 0, operations_filter => DBMS_CQ_NOTIFICATION.INSERTOP+DBMS_CQ_NOTIFICATION.UPDATEOP;, transaction_lag => 0 ); vRegId := dbms_cq_notification.new_reg_start(vNotif); open vCursor for select t.updateRevision from tCard_obj t where t.SomeValue = 32; close vCursor; dbms_cq_notification.reg_end; commit; end; 4Петрелевич Сергей petrelevich@yandex.ru

5 Как обрабатывать? procedure HandlerCard(ntfnds IN SYS.CHNF$_DESC) is vDataCard tCard_obj%rowtype; begin for q in 1..ntfnds.TABLE_DESC_ARRAY.count loop if NVL(ntfnds.TABLE_DESC_ARRAY(q).numrows,0)=0 then BatchProcess(vCardlistChange, vCardlistCreate); --Пакетные операции else for r in 1..ntfnds.TABLE_DESC_ARRAY(q).ROW_DESC_ARRAY.count loop select t.* into vDataCard from tCard_obj t where t.RowId=chartorowid(ntfnds.TABLE_DESC_ARRAY(q).row_desc_array(r).row_id); if ntfnds.TABLE_DESC_ARRAY(q).row_desc_array(r).opflags=dbms_change_notification.INSERTOP then vCardlistCreate(vDataCard.Pan):=vDataCard; end if; if ntfnds.TABLE_DESC_ARRAY(q).row_desc_array(r).opflags=dbms_change_notification.UPDATEOP then vCardlistChange(vDataCard.Pan):=vDataCard; end if; end loop; end if; end loop; end; 5Петрелевич Сергей petrelevich@yandex.ru

6 Какие проблемы? Переполнение списка RowId Число параллельных Job’ов (JOB_QUEUE_PROCESSES) Непрозрачность списка уведомлений Решение Дополнительная логика в обработчике см. BatchProcess в примере Использование буферной таблицы 6Петрелевич Сергей petrelevich@yandex.ru

7 Как управлять? Список зарегистрированных обработчиков DBA_CHANGE_NOTIFICATION_REGS Список зарегистрированных запросов DBA_CQ_NOTIFICATION_QUERIES (Best-Effort Mode) Количество параллельных уведомлений JOB_QUEUE_PROCESSES Ошибки выполнения ORACLE_SID_jnumber_PID.trc 7Петрелевич Сергей petrelevich@yandex.ru

8 Вопросы? 8Петрелевич Сергей petrelevich@yandex.ru


Download ppt "Опыт использования Object Change Notification Петрелевич Сергей 1."

Similar presentations


Ads by Google