Изучение технологии Oracle Database Change Notification

 
















Изучение технологии Oracle Database Change Notification


Введение


Все чаще в нашей жизни встречаются большие объемы информации, которую необходимо хранить и обрабатывать. На большинстве предприятий для этих целей используются системы управления базами данных (СУБД). Но чем больше информации, тем больше затраты машинных ресурсов. Необходимость сокращения этих затрат подвигла многие крупные компании на разработку технологий, направленных на решение данной проблемы. Одной из таких является технология Database Change Notification

Целью данной работы является изучение технологии Database Change Notification от компании Oracle, основной функцией которой является оповещение об изменениях в базах данных.

В задачи курсовой работы входит рассмотрение предметной области, ознакомление с наиболее популярным программным комплексом Oracle Database Enterprise Edition 11g от компании Oracle и технологии Change Notification. В результате данного исследования нами будет получена информация о быстродействий изучаемой технологии, а так же выявлена основная область применения.

Структура работы:

·Введение раскрывает актуальность, определяет степень научной разработки темы, объект, предмет, цель, задачи и методы исследования, раскрывает теоретическую и практическую значимость работы.

·Глава первая - здесь рассматриваются общие вопросы касающиеся конкретно области СУБД, способы хранения и обработки информации.

·Глава вторая - рассматривает наиболее популярный пакет программного обеспечения семейства Oracle Database компании Oracle. Более подробно изучается продукт Oracle Database Enterprise Edition - Система управления базами данных.

·Третья глава - в ней рассматривается практическая часть, а именно создание таблиц, слежение и обработка изменений при помощи технологии Database Change Notification/

·Заключение - подводятся итоги исследования, формируются окончательные выводы по рассматриваемой теме.


1. СУБД: что это такое?


Система управления базами данных (СУБД) - совокупность программных и лингвистических средств общего или специального назначения, обеспечивающих управление созданием и использованием баз данных.

Основные функции СУБД:

·Определение структуры создаваемой базы данных, ее инициализация и проведение начальной загрузки.

·Предоставление пользователям возможности манипулирования данными (выборка необходимых данных, выполнение вычислений, разработка интерфейса ввода / вывода, визуализация).

·Обеспечение логической и физической независимости данных.

·Защита логической целостности базы данных.

·Защита физической целостности.

·Управление полномочиями пользователей на доступ к базе данных.

·Синхронизация работы нескольких пользователей.

·Управление ресурсами среды хранения.

·Поддержка деятельности системного персонала.

Обычно современная СУБД содержит следующие компоненты:

·ядро, которое отвечает за управление данными во внешней и оперативной памяти и журнализацию,

·процессор языка базы данных, обеспечивающий оптимизацию запросов на извлечение и изменение данных и создание, как правило, машинно-независимого исполняемого внутреннего кода,

·подсистему поддержки времени исполнения, которая интерпретирует программы манипуляции данными, создающие пользовательский интерфейс с СУБД

·а также сервисные программы (внешние утилиты), обеспечивающие ряд дополнительных возможностей по обслуживанию информационной системы.

Методы изменения данных.

Информация, хранимая в БД очень часто требует обработки и изменения по каким либо алгоритмам. Именно поэтому в СУБД, а в частности в СУБД от компании ORACLE существуют мощный инструмент для реализации изменений. Это PL\SQL функции и процедуры.

Процедура - тип хранимой подпрограммы, содержащая описание определенного набора действий.

Функция - это тип процедуры, которая после своего выполнения возвращает какое-либо значение.

Trigger - это хранимая процедура особого типа, которую пользователь не вызывает непосредственно, а исполнение которой обусловлено действием по модификации данных в определенном столбце заданной таблицы реляционной базы данных. Триггеры применяются для обеспечения целостности данных и реализации сложной бизнес-логики. Триггер запускается сервером автоматически при попытке изменения данных в таблице, с которой он связан. Все производимые им модификации данных рассматриваются как выполняемые в транзакции, в которой выполнено действие, вызвавшее срабатывание триггера. Соответственно, в случае обнаружения ошибки или нарушения целостности данных может произойти откат этой транзакции.

Данные, измененные при помощи описанных инструментов не сразу обновляются, они кешируются, для снижения затрат на обращения к БД. Но при таком способе изменения данных может возникнуть ситуация, когда пользователь будет использовать некорректную информацию.

Для решения этой проблемы компания ORACLE разработала технологию Change Notification.

2. Описание технологии Change Notification


ORACLE - американская компания, производитель систем управления базами данных (СУБД). Семейство программных продуктов компании ORACLE получило широкое распространение в мире и, в частности, в России.

Компания ORACLE основана в 1977 году, сегодня в ней работает более 115 тыс. человек. Компания является одним из лидеров в индустрии СУБД. По некоторым оценкам, её доля на международном рынке СУБД в 2010 году превысила 45%. Программный продукт ORACLE Database хорошо зарекомендовал себя как наиболее производительный и качественный.

На сегодняшний день самым популярным продуктом компании ORACLE является ORACLE Database. Впервые впущенная на рынок в 1979 году, она быстро зарекомендовала себя. Постоянно улучшаясь, ORACLE Database обзавелась уникальными, присущими только ей технологиями. К примеру технология Real Application Cluster, появившаяся в 9-й версии СУБД Oracle, позволяет объединять сервера, обслуживающие СУБД в одну <большую базу данных>. Или технология Real Application Testing позволяет значительно снизить затраты на проведение плановых изменений в конфигурации существующего программного или аппаратного обеспечения.

Все новшества, вносимые в СУБД от ORACLE лишь делают ее значительно лучше, и выделяют на фоне других производителей. Этой же особенностью стала и технология Change Notification.

Впервые в продуктах компании ORACLE эта технология появилась в 10 версии ORACLE Database. Основным новшеством является то, что как только происходит изменение на стороне сервера, обработчик данного изменения сразу же отправляет оповещение клиентам, подписанным на изменения.

Технология реагирует на такие изменения как:

·DML (insert/update/delete)

·DDL (alter table add)

·Старт / Останов (startup /shutdown)

·Определение объекта слежения по зависимостям

Начиная с 11g версии, технология несколько изменилась, и теперь она отслеживает изменения результата выборки(select), а не объектов, от которых она зависит. Но на оператор select накладываются некоторые ограничения, а именно:

·Нельзя отслеживать изменения в системных таблицах

·Нельзя использовать агрегатные функции

·Поля только NUMBER и VARCHAR2

Для слежения за изменяющимися объектами с помощью данной технологии, необходимо сначала создать функцию обработчик пример создания данной функции приведен в приложении. Важно отметить, что с появлением технологии Change Notification появились и новые объекты, это структуры SYS.CHNF$_DESC и SYS.CHNF$_REG_INFO, а также системная таблица USER_CHANGE_NOTIFICATION_REGS. Структура SYS.CHNF$_DESC содержит полную информацию об изменениях происходящих в БД, а именно

·Имя и схема объекта, который был изменен

·Тип события, которое изменило данные

oINSERT

oUPDATE

oDELETE

oALTER TABLE

oDROP TABLE

·Глобальные события, такие как STARTUP и SHUTDOWN.

Отдельного внимания требуют DML операции, при слежении за которыми существуют некоторые нюансы: клиенту, подписанному на изменения, передаются не сами данные, а ROWID измененных строк, обработчик реагирует на изменения, произведенные с помощью DML-операций только после фиксации транзакций.

Кроме множества операции, за которыми можно производить слежение, Change Notification позволяет также отслеживать и такие типы запросов как:

Запросы к представлениям (views)

Соединения (join)

Запросы к табличным функциям

REF Cursors

Технология Change Notification является многопоточной, то есть все слежения за объектами и выполнение обработчика происходит в отдельном потоке (Рис. 1), что в теории ускоряет работу программы, и не мешает работе основного потока.


Рис. 1


Приведу пример работы данной технологии, на основе таблицы VAL_TEST:



1.Давайте предположим, что приложение кэширует результирующий набор запроса на таблицу VAL_TEST. Разработчик создает регистрацию для запроса на таблицу VAL_TEST, используя PL\SQL интерфейс для технологии Change Notification. Кроме того он создает хранимую PL\SQL процедуру для обработки уведомлений, и регистрирует ее в качестве обработчика на стороне сервера.

2.База данных заполняет регистрационную информацию в словаре данных.

.Пользователь изменяет один из зарегистрированных объектов с помощью DML оператора и фиксирует транзакцию. Например, пользователь обновляет строку в таблице VAL_TEST на сервере базы данных. Данные для VAL_TEST кэшированные ранее, теперь устарели.

.Oracle Database добавляет сообщение, которое описывает изменение, к внутренней очереди.

.Фоновый процесс JOBQ уведомляет о новом Change Notification сообщении.

6.Процесс JOBQ выполняет хранимую процедуру, заданную клиентским приложением. В этом примере JOBQ передает данные PL\SQL процедуре на стороне сервера. Реализация PL\SQL процедуры обработчика определяет, как нотификация будет обрабатываться.

.Внутри PL\SQL процедуры, на стороне сервера, разработчик может реализовывать логику для уведомления клиентского приложения среднего уровня (сервер приложений второго уровня**) об изменении в зарегистрированных объектах. Например, уведомляет приложение о ROWID измененной строки в VAL_TEST.

8.Клиентское приложение на среднем уровне запрашивает серверную базу данных для получения информации об измененной строке.

9.Клиентское приложение обновляет кэш новыми данными.

Словарь данных CHANGE NOTIFICATION - это структура SYS.CHNF$_DESC которая содержит следующие поля:

·REGISTRATION_ID - номер регистрации

·TRANSACTION_ID - номер транзакции которая изменила объект

·DBNAME - название базы данных

·EVENT_TYPE - тип изменения объекта

·NUMTABLES - количество таблиц, зарегистрированных для слежения

·TABLE_DESC_ARRAY - массив содержащий дополнительную информацию о таблицах, а именно:

oOPFLAGS - тип операции изменившей таблицу

oTABLE_NAME - наименование таблицы

oNUMROWS - номер строки в таблице

oROW_DESC_ARRAY - массив содержащий информации об операторе изменившем строку и ROWID измененной строки.

Трехуровневая архитектура - архитектурная модель программного комплекса, предполагающая наличие в нём трёх компонент: клиентского приложения (обычно называемого «тонким клиентом» или терминалом), сервера приложений, к которому подключено клиентское приложение, и сервера базы данных, с которым работает сервер приложений.

·Клиент - это интерфейсный (обычно графический) компонент, который представляет первый уровень, собственно приложение для конечного пользователя. Первый уровень не должен иметь прямых связей с базой данных (по требованиям безопасности), быть нагруженным основной бизнес-логикой (по требованиям масштабируемости) и хранить состояние приложения (по требованиям надежности). На первый уровень может быть вынесена и обычно выносится простейшая бизнес-логика: интерфейс авторизации, алгоритмы шифрования, проверка вводимых значений на допустимость и соответствие формату, несложные операции (сортировка, группировка, подсчет значений) с данными, уже загруженными на терминал.

·Сервер приложений располагается на втором уровне. На втором уровне сосредоточена большая часть бизнес-логики. Вне его остаются фрагменты, экспортируемые на терминалы (см. выше), а также погруженные в третий уровень хранимые процедуры и триггеры.

·Сервер базы данных обеспечивает хранение данных и выносится на третий уровень. Обычно это стандартная реляционная или объектно-ориентированная СУБД. Если третий уровень представляет собой базу данных вместе с хранимыми процедурами, триггерами и схемой, описывающей приложение в терминах реляционной модели, то второй уровень строится как программный интерфейс, связывающий клиентские компоненты с прикладной логикой базы данных.



3. Практическое применение Database Change Notification


Перед нами была поставлена задача изучения технологии Change Notification. Данное изучение предлагалось провести путем отслеживания изменений, происходящих в таблице VAL_TEST и записи результата этих изменений в таблицу MEASUREMENTS_1. Кроме этого для сравнения производительности при внесении записей в таблицу VAL_TEST будет отрабатывать триггер, записывающий время изменения и номер изменения в таблицу MEASUREMENTS.

Для начала опишем блок-схему алгоритма по которому будет вестись изучение технологии:



Как видно на блок-схеме изучаемая нами технология должна отрабатывать сразу после внесения записи в таблицу VAL_TEST. Это происходит следующим образом: мы вносим данные в таблицу VAL_TEST, затем фиксируем транзакцию, в противном случае изменения не будут регистрироваться и, соответственно, не будет отрабатывать процедура, после фиксации транзакции сервером генерируется оповещение о произошедших изменениях, оповещение представляет из себя объект типа SYS.CHNF$_DESC, о котором говорилось ранее, далее нотификация передается на вход процедуре-обработчику, которая с помощью внутренней логики отрабатывает все необходимые алгоритмы.

Для реализации нашего алгоритма, функцию обработчик необходимо зарегистрировать. При регистрации мы определяем, за каким объектами будет вестись слежение, и параметры слежения. Все это описывается при регистрации, в SQL-блоке, пример которого приведен в приложении, важно помнить, что нельзя употреблять агрегатные функции при регистрации.

В ходе изучения данной технологии выявились некоторые особенности, суть которых была непонятна. К примеру, если в цикле вставить сразу несколько записей, при этом генерируя ключ на основе максимального значения выборки из таблиц VAL_TEST, то мы в качестве ключа в таблице MEASUREMENTS_1 получим одинаковые значения, причем значения эти будут равны номеру последней внесенной записи в таблице VAL_TEST (Приложение Рис. 1). Также можно отметить еще одну особенность, если слежение установлено за таблицей, а вносимые изменения не удовлетворяют запросу регистрации, они все равно фиксируются, и после изменения запроса должным образом также вносятся в таблицу.

Далее, в ходе исследования, выявилась причина этих особенностей. Приведу схему причины этих особенностей и подробное описание:

.После изменения данных, генерируется оповещение, а сами измененные данные заносятся в cash-память

.Оповещение регистрируется.

.Далее ожидается окончание выполнения операций и фиксация транзакций.

.Процедура-обработчик выполняет необходимые действия.

.Данные из cash-памяти переносятся в БД.

Эта схема отражена на рисунке далее.



Создание обработчика CHANGE NOTIFICATION.

Создать Change Notification обработчик довольно просто. Для начала создадим процедуру, которая будет обрабатывать нотификации. В рамках моей курсовой работы данная процедура должна вносить номер и дату изменой записи из таблицы VAL_TEST в таблицу MEASUREMENTS_1. Приведу код данной процедуры:


CREATE OR REPLACE PROCEDURE Notification_procedure (ntfnds IN SYS.CHNF$_DESC) ISNUMBER;_type NUMBER;NUMBER;_type NUMBER;_ID number;:= ntfnds.registration_id;:= ntfnds.numtables;_type:= ntfnds.event_type;(event_type = DBMS_CHANGE_NOTIFICATION.EVENT_OBJCHANGE) THEN_type:= ntfnds.table_desc_array(1). Opflags;(operation_type = DBMS_CHANGE_NOTIFICATION.INSERTOP) thennvl (MAX(m.id_ms), 0) + 1 INTO val_ID from measurements_1 m;into Measurements_1

(ID_MS, DATE_RC)

(val_id, SYSTIMESTAMP);;if;IF;;


Поясню код этой процедуры: как только происходит изменение в таблице VAL_TEST, создается оповещение, и данные передаются процедуре. Если объект был изменен, то в переменную event_type помещается код изменения, в данном случае это код равняется 6 (подробные коды всех операций приведены в приложении). Далее мы проверяем тип операции, осуществившей изменение, код изменения находится в поле объекта ntfnds.table_desc_array(1). Opflags. Если произошла операция INSERT, то выполняем необходимую логику. Важно отметить, что на вход процедуры значение ntfnds передается автоматически, при измени в зарегистрированных объектах.

Далее данную процедуру регистрируем, и выбираем объекты для слежения. Приведу пример регистрации, в нашем случае слежение будет вестись за таблицей VAL_TEST:


DECLAREsys.chnf$_reg_info;number;_xId number;number;:= DBMS_CHANGE_NOTIFICATION.QOS_RELIABLE +_CHANGE_NOTIFICATION.QOS_ROWIDS;:= SYS.CHNF$_REG_INFO (Notification_procedure', qosflags, 0,0,0);:= DBMS_CHANGE_NOTIFICATION.NEW_REG_START (REGDS);

id_ms into v_xID from VAL_TEST where rownum=1;_CHANGE_NOTIFICATION.REG_END;;


Данный код означает следующее: регистрируется объект VAL_TEST, это происходит в SQL-блоке в котором мы выбираем таблицу или представление, для слежения, и строки в которых возможны изменения, так же необходимо создать объект типа SYS.CHNF$_REG_INFO и записать в него имя процедуры, которая будет вызываться при возникновении события оповещения, время регистрации, типы операции для слежения, и интервал между нотификациями.

Архитектура приложения

Кроме процедуры-обработчика также было создано еще несколько процедур, раскрывающих дополнительные функции технологии Change Notification. В качестве дополнительных функций, я имею в виду регистрацию обработчика, удаление регистрации, а так же подсчет количества регистрации для одного объекта. Все эти функции необходимы для упрощения работы. Подсчет количества регистраций ведется через системную таблицу user_change_notification_regs. Эта таблица содержит полную информацию, о том, за каким объектом регистрируется слежение, процедуру обработчик изменений в этой таблице, и REGID-уникальный номер каждой регистрации. Приведу ниже скрипты процедур с комментариями.

.Процедура, выводящая количество регистрации на один объект.

Необходимость создания данной процедуры возникла в ходе изучения, так как случались ситуации, когда на один объект приходилось несколько регистраций, и эти регистрации мешали нормальной работе приложения.


create or replace procedure count_of_regs (name_table in varchar2) is_reg number;count(regid)count_reguser_change_notification_regstable_name = name_table;_output.enable;_output.put_line (to_char (count_reg));

end;


На вход подается только название таблицы, причем стоит учитывать, что перед названием таблицы через точку обязательно должна быть указан схема БД. Логика этой процедуры построена на подсчете строк в запросе из таблицы user_change_notification_regs, это таблица содержащая данные о всех регистрациях в СУБД, так как она является системной, то изменения в ней нельзя отслеживать.

. Процедура, удаляющая все регистрации с объекта.

Эта процедура была создана для упрощения работы, она удаляет все регистрации, которые имеет данный объект. На вход также как и в предыдущей процедуре передается наименование объекта. Процедура выбирает из таблицы user_change_notification_regs все строки регистрации на данный объект, потом с помощью встроенной процедуры DEREGISTER из пакета DBMS_CHANGE_NOTIFICATION и по REGID коду происходит удаление регистраций.


create or replace procedure delete_regs (name_table in varchar2) is_id number;_rows number;number;count(regid)num_rowsuser_change_notification_regstable_name = name_table;i in 1. num_rows loopregidreg_iduser_change_notification_regstable_name = name_tablerownum = 1;_change_notification.DEREGISTER (regid => reg_id); loop;

end;

Процедура создания регистрации.

Процедура создания регистрации имеет некоторые особенности и ограничения. Данная процедура создает регистрацию на объект, и отслеживает изменения всех строк, начиная с первой. То есть мы только задаем имя объекта, название id по которому будет вестись слежение, тип операций слежения, и название процедуры обработчика. С помощью данной процедуры нельзя установить время существования регистрации и интервал между уведомлениями.


create or replace procedure registr_of_callback (table_name in varchar2,_type in varchar2,_name in varchar2,_name in varchar2) as_md number;_type number;

sql_text varchar2 (4000);(operation_type = 'insert') then_type:= 2;if;(operation_type = 'update') then_type:= 4;if;(operation_type = 'delete') then_type:= 8;if;(operation_type = 'all') then_type:= 0;if;immediate 'declare' || ' regds sys.chnf$_reg_info; ' ||

' regid number; ' || ' id_md number; ' ||

' qosflags number; ' || 'begin' ||

' qosflags:= dbms_change_notification.QOS_RELIABLE + dbms_change_notification.QOS_ROWIDS; ' ||

' regds:= sys.chnf$_reg_info (''' || callback_name ||

''', qosflags, 0,' || op_type || ', 0);' ||

' regid:= DBMS_CHANGE_NOTIFICATION.NEW_REG_START(REGDS); ' ||

'select ' || id_name || ' into id_md from ' ||_name || ' where rownum=1;' ||

'DBMS_CHANGE_NOTIFICATION.REG_END;' || 'end;';

end;


Триггер, записывающий дату изменения и номер строки.

Данный триггер отрабатывает сразу после того, как в таблицу VAL_TEST вносится запись. Он был создан для сравнения быстродействия между технологией Change Notification и триггерами. Триггер полностью дублирует функции процедуры-обработчика.


create or replace trigger vt_ininsert on val_test_s number;nvl (MAX(m.id_ms), 0) into id_s from val_test m;into measurements values (id_s, SYSTIMESTAMP);

end;

база notification обработчик database

Заключение


Существует множество различных технологий, разработанных для повышения показателей быстродействия СУБД. Одной из этих технологий является Change Notification. Но как показало мое исследование, в границах данной курсовой работы, сфера применения изучаемой технологии очень ограничена. Она не годится для обработки большого потока информации, которая очень часто меняется.

Как нам предлагает производитель данной технологии, и я полностью поддерживаю это предложение, наиболее продуктивным будет применение данной технологии, к информации, которая относительно редко меняется, например табличные значения. В производстве очень часто случается, что в табличные значения вносят изменения, и не все пользователи узнают об этом моментально, Change Notification решает эту проблему, она всегда предоставляет пользователям актуальные данные.


Список литературы


1.Описание технологии Change Notification #"justify">2.Презентация Игоря Мельникова технологии http://www.oraclebi.ru/files/presentations/imelnikov/ChangeNotification.pdf



Изучение технологии Oracle Database Change Notification Введение Все чаще в нашей жизн

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ