• Новые возможности Oracle Database 11g для разработчиков
• Oracle Application Express - платформа для быстрой разработки приложений
• Расширенные возможности APEX 3.2
• Архитектура Oracle Fusion Middleware AS 10.3
• Oracle JDeveloper 11g + ADF – средство быстрой разработки приложений трёхуровневой архитектуры
• Обзор возможностей Oracle Database 11g для разработчиков .NET приложений
Забелин АндрейOracle СНГ[email protected]
Новый тип данных для целых чисел SIMPLE_INTEGER ,
является подтипом типа PLS_INTEGER
В отличие от PLS_INTEGER, для переменных типа SIMPLE_INTEGER
НЕ генерируется код проверки на переполнение (overflow checking) и код проверки на NULL
Повышение быстродействия в среднем 20-30% по сравнению с PLS_INTEGER
Области применения: операции с целочисленной арифметикой,
где заранее известен диапазон значений (напр: счетчики циклов)
Переменные типа SIMPLE_INTEGER имеют неявное ограничение NOT NULL
В PL/SQL 11g отслеживаются зависимости на уровне элементов объектов.
СУБД “знает” какие изменения приведут к изменению объекта,
а какие нет
При изменении только тела пакета, без изменений спецификации,
зависимые объекты остаются в состоянии VALID.
Преимущества:
Плавный “накат” патчей вашего приложения
Нет необходимости в ненужных перекомпиляциях
Ошибка “ORA-4068” остается; возникает по другой причине:
перекомпиляция тела пакета который использовался в другой сессии
• до 11gcreate or replace
TRIGGER "INSERT_DEMO_CUST"
BEFORE INSERT ON demo_customers
FOR EACH ROW
DECLARE
cust_id number;
BEGIN
SELECT demo_cust_seq.nextval
INTO cust_id
FROM dual;
:new.CUSTOMER_ID := cust_id;
END;
сложный механизм доступа через
обращение к таблице dual
• в 11Gcreate or replace
TRIGGER "INSERT_DEMO_CUST"
BEFORE INSERT ON demo_customers
FOR EACH ROW
BEGIN
:new.CUSTOMER_ID := demo_cust_seq.nextval;
END;
Повышение производительности !!! используется прямой и
более быстрый механизм доступа
Переключение контекста все равно происходит:
последовательность лежит в SGA
• увеличивает способность поиска и манипулирования символьными данными
• реализованы в виде:
SQL-функций :
REGEXP_INSTR,
REGEXP_SUBSTR,
REGEXP_REPLACE,
REGEXP_COUNT,
REGEXP_LIKE
SQL> SELECT REGEXP_REPLACE(
2 'zabelin andrey oracle',
3 '(.*) (.*) (.*)','\2.\1@\3.com')
4 AS email FROM dual;
-------------------------
SQL оператора REGEXP_LIKE
выражения WHERE
SQL> SELECT p.product_name
2 FROM demo_product_info p
3 WHERE
4 REGEXP_LIKE(p.product_name, '[[:digit:]]');
PRODUCT_NAME
--------------------------------------
3.2 GHz Desktop PC
MP3 Player
512 MB DIMM
54" Plasma Flat Screen
• Кэширование результатов запросов, подзапросов• Кэш совместно используется различными SQL операторами и сессиями пользователей
• Значительное ускорение для операций чтения
• Несколько уровней контроля• Оператор: hint /*+ RESULT_CACHE */
• Сессия: параметр RESULT_CACHE_MODE = force | manual | auto
• force - кэшировать все запросы
• manual - кэшировать только запросы с hints
• auto - решение о кэшировании принимает оптимизатор
• Полная согласованность результата• Кэш обновляется при изменении таблиц, из которых получен кэшируемый результат
• Кэширование отключено для запросов содержащих• Временные или dictionary-таблицы
• Недетерминированные PL/SQL-функции
• Обращение к последовательности (CURRVAL и NEXTVAL)
• Недетерминированные SQL-функции: current_date, sysdate, sys_guid т.д.
• Result cache для распределенных запросов:
• result_cache_remote_expiration (через сколько секунд проверять актуальность, 0 – значение по умолчанию - не кэшировать)
• DML/DDL на удаленной БД не приводит к обновлению кэша
create function getAmount(pAccountId in number,
pCurrency in varchar2) return
number
result_cache relies_on (accounts, accounts_amounts);
is
begin
… … …
return xRes;
end;
• При создании функции указывается:• Ключевое слово RESULT_CACHE
• Фраза RELIES_ON – перечень таблиц от которых зависит результат функции, может быть опущена - при этом задача поддержка актуальности кэша возлагается на программиста
• При изменении таблиц указанных в RELIES_ON кэш для этой функции автоматически очищается
• Параметры инициализации• RESULT_CACHE_MAX_SIZE – задает макс. размер кэша в SGA
• Пакет DBMS_RESULT_CACHE• INVALIDATE – очистка кэша для функции
• FLUSH – очистка всего кэша
• BYPASS – включение/выключение кэша на уровне экзмепляра
• STATUS – проверка статуса кэша
• MEMORY_REPORT – вывод отчета об использовании кэша
• Мониторинг – динамические представления• [G]V$RESULT_CACHE_STATISTICS
• [G]V$RESULT_CACHE_OBJECTS
• [G]V$RESULT_CACHE_DEPENDENCY
• [G]V$RESULT_CACHE_MEMORY
• Кэширует результаты запроса на всех 11g OCI-based клиентах, включая ODP.Net, JDBC OCI Driver, PHP, ODBC
• Улучшает производительность работы с таблицами, используемыми в основном для чтения (read-mostly)
• Более быстрое время отклика – исключается передача по сети
• Уменьшает нагрузку на процессоры сервера
• Согласован с сервером• Кэш проактивно обновляется, когда изменяется выборка
• Сихронизация кеша
• Flashback Query• Запросить все данные на определенное
время
Tx 1
Tx 2
Tx 3
� Flashback Transaction Query• Посмотреть все изменения, сделанные
транзакцией
� Flashback Version Query• Посмотреть все версии записи между
двумя точками во времени
• Посмотреть транзакции, которые меняли записи
select * from Salary AS OF ‘12:00 P.M.’ where …
select * from Salary VERSIONS BETWEEN TIMESTAMP (SYSTIMESTAMP - INTERVAL '60' MINUTE) AND SYSTIMESTAMP where …
select * from FLASHBACK_TRANSACTION_QUERY
• Автоматически сохраняет все изменения определенных таблиц в Flashback Data Archive• Данные в архиве не могут изменяться
• Старые данные меняются на новые согласно политики сроков хранения
• История собирается асинхроннофоновым процессом (fbda)• По умолчанию интервал сбора –5 мин.
• Интервал автоматическименяется исходя из текущейнагрузки системы
• Операторы INSERT негенерируют историческихданных
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
'local-access-users.xml', 'ACL: users to connect to localhost',
'APEX_030200', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
'local-access-users.xml','localhost');
••
•
•
• только худшие SQL)
••
••
•
• Новая опция Oracle Database EE
• Database Replay (DB Replay)
• SQL Performance Analyzer (SPA)
• Значение
• Сокращает стоимость тестирования
• Улучшает качество тестирования
• Выигрыш для бизнеса
• Быстрое внедрение технологий
• Меньше риск
• Захват информации о нагрузке• Записывает информацию о нагрузке СУБД, включая важную информацию об одновременности нагрузки
• Фильтрация захвата (сессии, пользователи и т.д.)
• Минимальные накладные расходы (<5% CPU)
• Database Replay - проигрывание• Синхронное и асинхронное воспроизведение
• Анализ и отчетность• Отчеты об ошибках
• Изменение данных
• Изменение производительности
•
•
•
•
•
•
••
•
•
•
• Обнаружение ухудшения производительности SQL прежде, чем это отразится на конечных пользователях
• RAT полезен при следующих изменениях
• Обновление БД
• Изменение статистики оптимизатора
• Новые индексы, материализованные представления, секционирование и т.д.
• Автоматически отслеживает изменение производительности сотен и тысяч запросов – невозможно сделать вручную
• Минимальные накладные расходы
Real-time
Queries
Real-time
Queries
• После окончания тестов необходима всего лишь синхронизация с промышленной БД, не требуется пересоздание standby заново
Real-time
Queries
Real-time
Queries
Штатный режим работы
• Две системы – отчетность и процессинг
• Системы на разных серверах
• Две системы – отчетность и процессинг
• Системы на разных серверах
Загрузка 100% Загрузка 50%
Завершение месяца (отчетность)
=>50% ресурсовсервера Процессинга проистаивает
Штатный режим работы
Несколько узлов кластера работают с одной БД
Пиковый режим работы (обработка заказов)
Завершение квартала (отчетность)
Ситуация сбоя узла
Миграция сервисов на резервный узел
• RAC объединяет для совместной работы стандартные недорогие сервера
• Отличное масштабирование & высокая готовность
• Нет простаивающих ресурсов
• Тысячи пользователей по всему миру
• Улучшенная производительность, масштабируемость, обработка аварийных ситуаций, управляемость
Возможность достижениялюбого уровня защиты данных
Значительное уменьшение сложности использования
Забелин АндрейOracle СНГ[email protected]
Забелин АндрейOracle СНГ[email protected]
Для промышленных баз данных и для тестирования начиная с версии APEX 3.1 появилась возможность устанавливать только runtime версию APEX.
Для этого используется скрипт apxrtins.sql. Это уменьшает шаги инсталяции и привилегии пользователя APEX_030200. Скрипты также предоставляют возможность удалять (apxdevrm.sql) или добавлять (apxdvins.sql) интерфейс разработчика на существующий экземпляр.
Эта новая возможность улучшает защиту приложения ввиду того что на runtime экземпляре разработчик не может изменять приложение непосредственно на промышленном экземпляре.
•Декларативная установка таймаутов отключения неактивных сессий и максимальной продолжительности работы сессии•Декларативное шифрование контекста сессии•Новый элемент для ввода паролей позволяет ввести пароль не сохраняя его в контексте сессии•Гибкая схема аутентификации и авторизации•Защита от фальсификации URL•Возможность требовать соединения через HTTPS для администраторов и разработчиков,•Возможность настройки строгой политики паролей для административных учётных записей
•
(&P10_AREA_CODE.) &P10_PREFIX.-&P10_LINE_NUMBER.
•DECLARE l_return_value VARCHAR2(300) DEFAULT NULL;
BEGIN
l_return_value := '('||:P10_AREA_CODE||')'||
:P10_PREFIX||'-'||:P10_LINE_NUMBER;
RETURN l_return_value;
END;
•SELECT '('||:P10_AREA_CODE||')'||:P10_PREFIX||'-'||:P10_LINE_NUMBER
FROM DUAL
•'('||:P10_AREA_CODE||')'||:P10_PREFIX||'-'||:P10_LINE_NUMBER
•SELECT 1 FROM customers
WHERE last_name = :P1_LAST_NAME
•BEGIN
IF :P1_COUNTRY = ‘RU' THEN RETURN FALSE;
ELSE RETURN TRUE;
END IF;
END;
илиNOT (:P1_COUNTRY=‘RU');
•Если необходима проверка присвоено ли какое либо значение Item
•Различны шаблоны сравнения значения Item с строкой(строками)
•^\([[:digit:]]{3}\) [[:digit:]]{3}-[[:digit:]]{4}$
номер телефона должен быть формата (999) 999-9999
Процессы выполняются
во время визуализации страницы
или при возникновения события на странице.
• On Load
• On Submit
• по условию (Expression)
• по нажатию кнопки (When Button Pressed)
• через URL (Request = Expression или APPLICATION_PROCESS = имя процесса)
•
apex_collection.create_or_truncate_collection
(p_collection_name => 'ORDER');
•
select c001, c003, sum(c004) c004
from apex_collections
where collection_name = 'ORDER'
group by c001, c003
•
for x in (select * from demo_product_info where product_id = :P12_PRODUCT_ID)
loop
apex_collection.add_member(p_collection_name => 'ORDER',
p_c001 => x.product_id,
p_c002 => x.product_name,
p_c003 => x.list_price,
p_c004 => 1);
end loop;
Функция валидации определяется в
заголовке страницы :
Вызов функции происходит по событию на элементе страницы :
Забелин АндрейOracle СНГ[email protected]
i
• Различные версии приложения могут использоваться одновременно• Новые клиенты подключаются к новой активной версии;
• Существующие сессии продолжают работать с предыдущей версией
• Политика автоматического изолирования старой версии приложения: постепенное или по таймауту
• Возможность отката на предыдущую версию приложения
• Новая версия приложения может быть установлена на сервер в режиме тестирования
• – запросы распределяются на первое в списке JDBC-соединение, в случае неудачи на следующее по списку
• – запросы распределяются равномерно между всеми валидными JDBC-соединениями в списке
WLS instance
WLS instance
WLS instance
Балансировка нагрузки
•iPlanet/SunOne•Apache•IIS•WLS with HttpCLusterServlet
•BigIP from F5•Alteon from Nortel•Cisco
WLS instance
WLS instance
WLS instance
BA B
C
B C
A
Информация о первичном и вторичном экземплярах, хранящих состояние сессии, может быть получена черезHTTP Session ID или Client’s browser cookie.
Синхронная, асинхронная in-memory репликация
между экземплярами кластера
• Данные распределены в памяти на всех серверах
• Данные автоматически и синхронно реплицируются на другие сервера (по крайней мере на один из серверов в кластере) для постоянной готовности
• На каждом сервере Single System Image - логическое представление всех данных на всех серверах
• Сервера производят мониторинг состояния друг друга
• В случае, если один из серверов вышел из строя, другие совместно диагностируют его состояние
• Сервера, имеющие репликацию данных, немедленно берут на себя обязанности сервера, вышедшего из строя
• Нет прекращения сервиса или потери данных
•
•
•
•
•
•
•
Забелин АндрейOracle СНГ[email protected]
• Templating
• Определение стандартного шаблона страниц
• Page Fragments
• Разработка областей для многократного использования
• Page Regions
• Конструирование страниц из фрагментов
•
•
•
•
•
Забелин АндрейOracle СНГ[email protected]
WindowsWindows
Windows
Linux
Unix
Oracle 11g,10g, 9i, or 8i
Other
• С чего начать:
Getting Started : DBA , Developershttp://otn.oracle.com/getting-started
• Пошаговые инструкции, примеры использования технологий Oracle:
Oracle By Example
http://otn.oracle.com/obe