- oracledownload.oracle.com/opndocs/emea/11gnewfeatureswebinar.pdf · oracle isv migration center...

107
<Insert Picture Here> Oracle ISV Migration Center Вадим Мельников Консультант по базам данных Oracle Database 11g - новые возможности для разработчиков

Upload: duongngoc

Post on 12-Apr-2018

229 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

<Insert Picture Here>

Oracle ISV Migration Center

Вадим МельниковКонсультант по базам данных

Oracle Database 11g - новые возможностидля разработчиков

Page 2: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

2

<Insert Picture Here>

План

• Введение• Новые возможности в PL/SQL

• Увеличение быстродействия• Новые синтаксические конструкции• Новые возможности в динамическом SQL• Новое в триггерах• Технология Result Cache• Новые инструменты для разработчиков• Заключение

• Partitioning• Смешанное секционирование• Виртуальные столбцы• Interval Partitioning• REF Partitioning• System Partitioning• Заключение

Page 3: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

3

<Insert Picture Here>

Введение

Page 4: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

4

Корпорация OracleНадежный партнер

• Крупнейший в мире производитель ПО длябизнеса

• Капитализация – $104,1 млрд. (31.01.2008)• Годовой оборот - $22,4 млрд. (2008 фин. год)• Персонал – 84 тыс. чел.• Затраты на разработку - $2,5 млрд./ год• Затраты на расширение портфеля продуктов >

$20 млрд. / 3 года• Пожизненная поддержка ПО• Реализация проектов: в срок и в бюджет

Базыданных

СвязующееПО

Средстваразработки

Бизнес-приложения

Услуги поконсалтингу

Операции в 145 странах мираЗаказчиков – 300 тыс.

Кол-во компаний из Top 100 - 51

Кол-во клиентов в мире,использующих бизнесприложения Oracle > 43 000

Page 5: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

5

Лидер на ключевых рынках

• База данных• База данных на Linux• ПО разработки• ПО промежуточного уровня• Управление взаимоотношениями с клиентом• Производство и продажа ТНП• Телеком• Подбор и развитие персонала• Финансовый сектор• Банки• Государственный сектор• Обучение• Управление эффективностью бизнеса• Хранилища данных

Page 6: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

6

Oracle Database 11gИсследования и разработка

• Свыше 1500 разработчиков и тестировщиков• 479 проектов по разработке• Свыше 235000 функциональных тестовежедневно запускаются в ЦОД (суммарно имеет~2000 CPU)

• Число тестов увеличено в 3 раза по сравнению сOracle Database 10g

• Свыше 15,000,000 часов тестирования• Большая группа тестов на безопасность

Page 7: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

7

Page 8: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

8

Новые возможности PL/SQL

Page 9: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

9

<Insert Picture Here>

Новые возможности PL/SQL

• Увеличение быстродействия• Новые синтаксические конструкции• Новые возможности в динамическом SQL• Новое в триггерах• Технология Result Cache• Новые инструменты для разработчиков• Заключение

Page 10: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

10

Отслеживание изменений объектовДо PL/SQL 11g

create table t(a number)/create view v as select a from t/alter table t add(Unheard_Of number)/select status from User_Objectswhere Object_Name = 'V'

/STATUS------------INVALID

• Представление V в недействительном состоянии,потому-что структура таблицы изменилась.Отслеживание зависимостей на уровне всего объекта!

Page 11: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

11

create package Pkg isprocedure p1;

end Pkg;/create procedure p is begin Pkg.p1(); end;/create or replace package Pkg isprocedure p1;procedure Unheard_Of;

end Pkg;/select status from User_Objectswhere Object_Name = 'P'

/STATUS------------INVALID

Отслеживание изменений объектовДо PL/SQL 11g

• Тоже самое для процедуры P

Page 12: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

12

Fine Grained Dependency TrackingВ PL/SQL 11g

• В 11.1 зависимости отслеживаются на уровнеэлементов объектов• СУБД “знает” какие изменения приведут к изменениюобъекта, а какие нет

• Преимущества:• Плавный “накат” патчей на приложение• Нет необходимости в ненужных перекомпиляциях

• Внимание: Ошибка “ORA-4068” остается;возникает по другой причине: перекомпиляциятела пакета который использовался в другойсессии

Page 13: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

13

PL/SQL Native CompilationДо PL/SQL 11g

• Начиная с 9.2, можно компилировать PL/SQL-процедуры в исполняемый код платформы (DLL/SO/SL)вместо компиляции в MC-код PL/SQL VM

• СУБД переводит исходный код PL/SQL в C-код, а затемс помощью C-компилятора получает выполняемуюбиблиотеку

• Нужно было устанавливать на сервер C-компилятор инастраивать СУБД

• На многих платформах C-компилятор нужнодополнительно лицензировать!

Page 14: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

14

Real Native CompilationВ PL/SQL 11g

• В 11.1, СУБД Oracle при компиляции PL/SQLнапрямую может генерировать выполняемый кодDLL программно-аппаратной платформы

• C-компилятор не нужен

• Возможность встроена в СУБД, не нужно никакойдополнительной настройки

• Только один параметр: включить/выключить,PLSQL_CODE_TYPE

• INTERPRETED

• NATIVE

Page 15: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

15

Преимущества Real Native CompilationВ PL/SQL 11g

• Увеличение быстродействия:• Компиляция в 2 раза быстрее, чем с переводом на C-исходный код

• ТестWhetstone показывает увеличениебыстродействия в 2.5 раза по сравнению c вариантомс использованием C-компилятора (нет ненужногоruntime-library и оптимизация)

• На тестах – выполнение в 20 раз быстрее, чем прииспользовании режима интерпретации PVM

Page 16: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

16

Новый тип данных SIMPLE_INTEGERВ 11g: новый тип для целых чисел

• Является подтипом типа PLS_INTEGER• Но в отличие от PLS_INTEGER, для переменныхтипа SIMPLE_INTEGER НЕ генерируется кодпроверки на переполнение (overflow checking), икод проверки на NULL

• Повышение быстродействия в среднем 20-30% посравнению с PLS_INTEGER

• Области применения: операции с целочисленнойарифметикой, где заранее известен диапазон(напр: счетчики циклов)

Page 17: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

17

• Переменные типа SIMPLE_INTEGER имеютнеявное ограничение NOT NULL !

Новый тип данных SIMPLE_INTEGERВ 11g: новый тип для целых чисел

declarexCount simple_integer;

beginnull;

end;/xCount simple_integer;

*ERROR at line 2:ORA-06550: line 2, column 10:PLS-00218: a variable declared NOT NULL must have an

initialization assignment

Page 18: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

18

Последовательности в PL/SQLДо PL/SQL 11g

create or replace trigger Trgbefore insert on My_Table for each row

declares number;

begin

-- Автоматическая генерация первичного ключаselect My_Seq.Nextval into s from dual;:New.Id := s;

end;

Page 19: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

19

create or replace trigger Trgbefore insert on My_Table for each row

begin:New.Id := My_Seq.Nextval;

end;

• Обращение к последовательности прямо в выражении -проще и короче код

• Повышение производительности (не нужнообрабатывать курсор), используется прямой и болеебыстрый механизм доступа – НЕ препроцессинг в selectfrom dual !

• Переключение контекста, как таковое, все равно нужно:последовательность лежит в SGA

Последовательности в PL/SQLВ PL/SQL 11g

Page 20: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

20

Inline-подстановка в PL/SQLPL/SQL 11g: Подстановка тела функции вместовызова

beginPRAGMA INLINE(my_func, 'YES'); -- включаем подстановку

for f in (select * from employees)loop

x:= my_func(f.Name, f.amount) + 17; -- не вызов, а тело-- функции!

end loop;

PRAGMA INLINE(my_func, 'NO'); -- выключаем подстановку…

end;

• Увеличение скорости выполнения: вместо передачипараметров, возврата управления и результатов

• Включение/выключение подстановки в коде

Page 21: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

21

Inline-подстановка в PL/SQLНовый уровень оптимизации (level 3)

alter session set plsql_optimize_level=3;

• Оптимизатор PL/SQL сам делает подстановку (inline) исходя из:• Размера процедуры/функции• Предполагаемой частоты вызова (вызов в цикле)• Числа и типов параметров

• Проведены тесты на системе E-Business Suite• Система состоит из больших PL/SQL-пакетов c небольшимипроцедурами

• Получено увеличение быстродействия на ~20%• В общем случае выигрыш зависит от структуры PL/SQL-кода

Page 22: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

22

Поиск числа вхождений подстрокиДо PL/SQL 11gp := '\(?\d{3}\)? ?\d{3}[-.]\d{4}';

Str :='bla bla (123)345-7890 bla bla(345)678-9012 bla bla (567)890-1234 bla bla';

Match_Found := Regexp_Like(Str, p);

• Как узнать число вхождений ?• Делать цикл: находить вхождение, а затем сдвигать позицию скоторой начинается поиск

• Очень неэффективно!

Page 23: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

23

Расширение в поддержке регулярныхвыражений в SQL и PL/SQLВ PL/SQL 11g

Num_Of_Matches := Regexp_Count(Str, p);

• Новая функция Regexp_Count – число вхождений подстроки по рег.выражению

• Функции Regexp_Instr и Regexp_Substr теперь имеют опциональныйпараметр Subexpr - дает возможность получить номер символа поподвыражению шаблона

Page 24: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

24

Потенциальная проблема вбезопасностиДо PL/SQL 11g

• СУБД Oracle Database имеет встроенные пакетыдля работы по протоколу TPC/IP:• UTL_TCP, UTL_SMTP, UTL_HTTP

• Если вы имеете права на выполнение на этипакеты, то вы можете работать с любым хостом ипо любому порту !

• Необходимо давать права на выполнениенапрямую пользователям, и ни в коем случае нечерез PUBLIC

Page 25: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

25

Гибкий контроль доступа для UTL_TCPи пакетов на его основеВ PL/SQL 11g

• Возможность создания списков доступа - AccessControl List (ACL) которые включают в себя роли ипользователей

• ACL содержит хост и диапазон портов• ACL управляются с помощью XDB

Page 26: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

26

<Insert Picture Here>

Новые возможности PL/SQL

• Увеличение быстродействия• Новые синтаксические конструкции• Новые возможности в динамическом SQL• Новое в триггерах• Технология Result Cache• Новые инструменты для разработчиков• Заключение

Page 27: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

27

Работа с циклами в PL/SQLДо 11g: Переход на следующий шаг цикла

beginfor f in (select * from employees)loop

if f.Salary < 1000 thengoto next_iteration;

end if;

...

<<next_iteration>>null;

end loop;end;

Page 28: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

28

Новый оператор “continue” в PL/SQLPL/SQL 11g: Переход на следующий шаг цикла

beginfor f in (select * from employees)loop

if f.Salary < 1000 thencontinue;

end if;

...

end loop;end;

Page 29: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

29

Новый оператор “continue” в PL/SQLPL/SQL 11g: Переход на следующий шаг внешнегоцикла

<<outer>>for i in 1..10 loop...

<<inner>>for j in 1..Data.Count() loop

if Data(j).Uninteresting thencontinue outer;

end if

...

end loop;end loop;

Page 30: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

30

Новый оператор “continue” в PL/SQLPL/SQL 11g: Переход на следующий шаг внешнегоцикла по условию

<<outer>>for i in 1..10 loop...

<<inner>>for j in 1..Data.Count() loop

continue outer when Data(j).Uninteresting;

...

end loop;end loop;

Page 31: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

31

Вызов функции в SQL - выраженияхДо 11g: возможна только позиционная нотация

SQL> select2 get_amount(v_pAccId => a.Id,3 v_pCurrency => 'USD')as Amount4 from5 accounts a6 /

get_amount(v_pAccId => a.Id,*

ERROR at line 2:ORA-00907: missing right parenthesis

• Это создавало проблемы для перегруженных (overload)функций

Page 32: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

32

Вызов функции в SQL - выраженияхВ 11g: возможна нотация по имени, а такжесмешанная

SQL>select2 get_amount(a.Id,3 v_pCurrency => 'USD')as Amount4 from5 accounts a6 /

Amount-------------

538537536535

4 rows selected.

Page 33: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

33

Возможное скрытие исключенийДо 11g: ошибка - потеря исключения

create procedure p(i in number) isbegin

insert into My_Table(n) values(i);exception

when others then null;end p;

• “when others then null” – исключение “проглатывается”• Это приводит к трудно обнаруживаемым ошибкам

Page 34: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

34

Новые сообщения от компилятораВ PL/SQL 11g: новые предупреждениякомпилятораalter procedure p compile

PLSQL_Warnings = 'enable:all'reuse settings

• Компилятор выдает предупреждение:PLW-06009: procedure "P" OTHERS handler

does not end in RAISE orRAISE_APPLICATION_ERROR

• Много других новых предупреждений, например отоптимизатора:PLW-06006: uncalled procedure "F" is removed.

Page 35: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

35

<Insert Picture Here>

Новые возможности PL/SQL

• Увеличение быстродействия• Новые синтаксические конструкции• Новые возможности в динамическом

SQL• Новое в триггерах• Технология Result Cache• Новые инструменты для разработчиков• Заключение

Page 36: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

36

Виды динамического SQL в PL/SQLДо PL/SQL 11g: виды динамического SQL в PL/SQL

• Пакет DBMS_SQL• Используется, если на этапе компиляции неизвестна структуракурсора, число и типы переменных привязки

• Позволяет выяснить структуру курсора в run-time• Сложный синтаксис !

• Native Dynamic SQL, NDS (операторы EXECUTEIMMEDIATE и OPEN FOR)• Число и типы переменных привязки должны быть известны ввремя компиляции

• Структура курсора должна быть известна !• Простой и короткий синтаксис !

Page 37: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

37

Выбор между видами dynamic-SQLДо 11g: Преимущества NDS по сравнению сDBMS_SQLprocedure insert_into_table(pTableName varchar2,

pDeptName varchar2) isstmt_str varchar2(200);cur_hdl integer;rows_proc pls_integer;

beginstmt_str := 'insert into '|| pTableName ||

' values (:dname);';cur_hdl := DBMS_SQL.OPEN_CURSOR;DBMS_SQL.PARSE(cur_hdl, stmt_str, dbms_sql.native);DBMS_SQL.BIND_VARIABLE(cur_hdl, ':dname', pDeptName);rows_proc := DBMS_SQL.EXECUTE(cur_hdl);DBMS_SQL.CLOSE_CURSOR(cur_hdl);

end;

EXECUTE IMMEDIATE stmt_str USING pDeptName;

Page 38: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

38

Переключение между видами dynamicSQLВ PL/SQL 11g: Динамическое переключение

DBMS_SQL

dbms_sql.to_refcursor...

Native DynamicSQL

dbms_sql.to_cursor_number

......

Page 39: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

39

Новое в динамическом SQLPL/SQL 11g: Переключение из DBMS_SQL в NDS

declarecur_mum number := DBMS_SQL.OPEN_CURSOR();cur_ref sys_refcursor;type emps_t is table of employees%rowtype;emps emps_t;

beginDBMS_SQL.PARSE(c => cur_num,

Language_Flag => DBMS_SQL.Native,Statement => ‘select * from Employees

where Department_ID = :d and ...');...dummy := DBMS_SQL.EXECUTE(cur_num);

-- Переключение в ref cursor и NDScur_ref := DBMS_SQL.TO_REFCURSOR(cur_num);

fetch cur_ref bulk collect into emps;close cur_ref;

Page 40: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

40

Новое в динамическом SQLPL/SQL 11g: Переключение из NDS в DBMS_SQL

declarecur_num number;cur_ref sys_refcursor;type emps_t is table of employees%rowtype;emps emps_t;

beginopen cur_ref for ‘select * from employees

where Department_ID = :d and ...‘;

-- Переключение из NDS в DBMS_SQLcur_num := DBMS_SQL.TO_CURSOR_NUMBER(cur_ref);

-- Получаем структуру курсораDBMS_SQL.DESCRIBE_COLUMNS2(cur_num, col_cnt, col_desc);...DBMS_SQL.CLOSE_CURSOR(cur_num);

end;

Page 41: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

41

Новое в динамическом SQLPL/SQL 11g: Замечания по переключению

• Переключение однонаправлено (нельзя возвратиться в исходныйвид):• DBMS_SQL -> NDS• NDS -> DBMS_SQL

• Курсор закрывается только в том виде dynamic-SQL, кудапроизошло переключение• Оператор CLOSE в NDS• Процедура CLOSE_CURSOR в пакете DBMS_SQL

• Кэширование курсоров в DBMS_SQL продолжает выполняться(“cost saving paradigm”)

Page 42: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

42

Новое в динамическом SQLPL/SQL 11g: Другие новшества в динамическом SQL

• DBMS_SQL.PARSE может принимать на вход строкитипа CLOB (> 32Kb)• Теперь нет необходимости в использовании VARCHAR2S

• EXECUTE IMMEDIATE поддерживает CLOB-строки

• Переменные привязки могут быть объектного типа, втом числе и коллекции• Раньше приходилось использовать для этого NDS

• Пакетное связывание (bulk binding) поддерживаетсядля коллекций объектных типов

Page 43: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

43

<Insert Picture Here>

Новые возможности PL/SQL

• Увеличение быстродействия• Новые синтаксические конструкции• Новые возможности в динамическом SQL• Новое в триггерах• Технология Result Cache• Новые инструменты для разработчиков• Заключение

Page 44: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

44

Создание триггера в отключенномсостоянииВ 11g: Триггер создан, но отключен

• Если триггер создан с ошибками компиляции, толюбая DML-операция над таблицей будет приводить кошибке: “ORA-04098: trigger 'TRG' is invalid and failedre-validation”

• Возможность создать триггер и включить его после –когда точно известно, что нет ошибок PL/SQL

create or replace trigger Trgbefore insert on My_Table for each rowdisable

begin:New.ID := My_Seq.Nextvak;

end;/

Page 45: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

45

Порядок срабатывания триггеровВ 11g: можно задавать порядок срабатывания

• Раньше порядок срабатывания не гарантировался !

create or replace trigger Trg_2before insert on My_Table for each rowfollows Trg_1

begin...

end;/

Page 46: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

46

Триггер – не модуль PL/SQLДо 11g

• Триггер не являлся модулем PL/SQL• С точки зрения PL/SQL VM - это анонимный блок• Из-за этого в теле триггеров не выполняетсякэширование SQL-вызовов

• Коннор МакДональд, “PL/SQL для профессионалов ”,стр. 238: “… избегайте выполнения SQL-операторовв триггере. Если это необходимо, поручите этодействие процедуре.”

Page 47: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

47

Триггер – модуль PL/SQLВ 11g

• Теперь триггер является модулем PL/SQL• Исходный код триггера, как и любого PL/SQL-модулявиден в USER_SOURCE

• Теперь выполняется кэширование SQL-вызовов в телетриггера

• “Fast DML triggers - DML triggers are up to 25% faster”

Page 48: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

48

Новый тип триггеровВ 11g: составной триггер (compound trigger)

Compoundtrigger

before statement

before each row

after statement

after each row

Page 49: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

49

The compound triggerВ 11g: новый тип триггеров

• Новый тип триггеров: Сompound trigger – даетвозможность обрабатывать все DML-операции надтаблицей в одном триггере

• Может включать в себя глобальные переменныеиспользуемые в всех обработчиках событий:• Можно включать явный код инициализации триггера –выполняется один раз на оператор – перед выполнениемобработчика “before statement”

• Можно определять секцию завершения (finalization)Выполняется после обработки DML-оператора: заобработчиком “after statement” (даже если ранее была ошибка!)

• Глобальные переменные триггера уничтожаются послезавершения работы DML-оператора

Page 50: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

50

create trigger My_Compound_Trgfor update of Salary on Employees

compound trigger

-- Эти переменные могут использоваться в всех обработчиках триггераThreshold constant pls_integer := 200;before statement isbegin

...end before statement;

-- обработчик операции “before each row"before each row isbegin

null;end before each row;

-- деструктор триггера – обработчик "after statement"after statement isbegin

null;end after statement;

end;

The compound triggerВ 11g: Пример составного триггера

Page 51: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

51

create trigger My_Compound_Trgfor update of Salary on Employees

compound trigger

Threshold constant pls_integer := 200;type Emps_t is table of Employee_Salaries%rowtype

index by pls_integer;Emps Emps_t;Idx pls_integer := 0;

procedure Flush_Array isbegin

forall j in 1..Emps.Count()insert into Employee_Salaries values Emps(j);

Emps.Delete();Idx := 0;

end Flush_Array;

...

end My_Compound_Trg;

The compound triggerВ 11g: Пример составного триггера

Page 52: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

52

create trigger My_Compound_Trgfor update of Salary on Employees

compound trigger

...

after each row isbegin

Idx := Idx + 1;Emps(Idx).Employee_Id := :New.Employee_Id;Emps(Idx).Salary := :New.Salary;Emps(Idx).Effective_Date := Sysdate();

if Idx >= Threshold thenFlush_Array();

end if;end after each row;

...

end My_Compound_Trg;

The compound triggerВ 11g: Пример - продолжение

Page 53: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

53

The compound triggerВ 11g: Пример - завершениеcreate trigger My_Compound_Trg

for update of Salary on Employeescompound trigger

...

after statement isbegin

Flush_Array();end after statement;

end My_Compound_Trg;

Page 54: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

54

<Insert Picture Here>

Новые возможности PL/SQL

• Увеличение быстродействия• Новые синтаксические конструкции• Новые возможности в динамическом SQL• Новое в триггерах• Технология Result Cache• Новые инструменты для разработчиков• Заключение

Page 55: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

55

SQL Query Result Cache

join

join

T1 GBY

join

T2 T3

GBYjoin

T4 join

T5 T6

join

join

T1 GBY

join

T2 T3

GBYjoin

T4 join

T5 T6

Q1: сохранение в кэше

• Возможно кэширование результатов запросов,подзапросов (query blocks)

• Кэш совместно используется различными SQLоператорами и сессиями пользователей

• Значительное ускорение для операций чтения (read-only / read-mostly data)

• Буферный кэш прикладного уровняjoin

join

T1 GBY

join

T2 T3

GBYQ2: Использует это

прозрачноcache

Page 56: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

56

SQL Query Result CacheКэширование запросов

• Несколько уровней управления• Оператор: hint result_cache, no_result_cache

• Сессия: параметр RESULT_CACHE_MODE = force | manual | auto• force - кэшировать все запросы• manual - кэшировать только запросы с hints• auto - решение о кэшировании принимает оптимизатор

• Полная согласованность результата• Кэш обновляется при изменении таблиц, из которых полученкэшируемый результат

Page 57: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

57

SQL Query Result CacheПример

select /*+ RESULT_CACHE */p.prod_category,sum(s.amount_sold) revenue

fromproducts p,sales s

wheres.prod_id = p.prod_id ands.time_idbetween to_date('01-JAN-2006','dd-MON-yyyy') ‏

to_date('31-DEC-2006','dd-MON-yyyy')‏ andgroup by

rollup (p.prod_category)‏

Page 58: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

58

------------------------------------------------------------------| Id | Operation | Name |------------------------------------------------------------------| 0 | SELECT STATEMENT | || 1 | RESULT CACHE | fz6cm4jbpcwh48wcyk60m7qypu || 2 | SORT GROUP BY ROLLUP | ||* 3 | HASH JOIN | || 4 | PARTITION RANGE ITERATOR| ||* 5 | TABLE ACCESS FULL | SALES || 6 | VIEW | index$_join$_001 ||* 7 | HASH JOIN | || 8 | INDEX FAST FULL SCAN | PRODUCTS_PK || 9 | INDEX FAST FULL SCAN | PRODUCTS_PROD_CAT_IX |------------------------------------------------------------------

SQL Query Result CacheПример – план запроса

Page 59: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

59

SQL Query Result CacheОграничения

• Кэширование отключено для запросов содержащих• Временные или dictionary-таблицы• Недетерминированные PL/SQL-функции• Обращение к последовательности (CURRVAL и NEXTVAL)• Недетерминированные SQL-функции: current_date, sysdate,

sys_guid т.д.

• Result cache для распределенных запросов:• result_cache_remote_expiration > 0

• 0 – не кэшировать (по умолчанию)• DML/DDL на удаленной БД не приводит к обновлению кэша

Page 60: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

60

PL/SQL Result CacheВ 11g: Кэширование результатов вычисленияPL/SQL-функций

• Подстановка значения из кэша вместо вычисления функции

• Если функция уже выполнялась с теми же самыми параметрами,то вместо выполнения функции PVM может брать значение изэтого кэша !

• Разделяется между сессиями

• Может применяться ТОЛЬКО для детерминированных функций, ифункций не имеющих побочных эффектов (определяетразработчик) !

Page 61: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

61

Вычисление

функции

Функция уже вызывалась c

такими аргументами?

Result Cache

Вызов

функции

Func1

PL/SQL VM

SGA

Да

Нет

PL/SQL Result CacheВ 11g: Принципы работы

Page 62: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

62

PL/SQL Result CacheВ 11g: Создание кэшируемой функции

create function getAmount(pAccountId in number,pCurrency in varchar2) return number

result_cache relies_on (accounts, accounts_amounts); isbegin

… … …return xRes;

end;

• При создании функции указывается:• Ключевое слово RESULT_CACHE• Фраза RELIES_ON – перечень таблиц от которых зависитрезультат функции

• При изменении таблиц указанных в RELIES_ON кэш дляэтой функции автоматически очищается

Page 63: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

63

PL/SQL Result CacheВ 11g: управление кэшем результатов

• Фраза RELIES_ON может быть опущена• При этом задача поддержка актуальности кэша возлагается напрограммиста• Разработчик определяет события по которым кэш очищается(например: триггер, API - пакет таблицы)

• Для этого служит пакет DBMS_RESULT_CACHE и его методINVALIDATE

begin… … …

if xHasChanged thenDBMS_RESULT_CACHE.INVALIDATE(USER,’getAmount’);

end if;… … …end;

Page 64: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

64

PL/SQL Result CacheВ 11g: API для управления кэшем результатов

• Встроенный пакет DBMS_RESULT_CACHE• INVALIDATE – очистка кэша для функции• FLUSH – очистка всего кэша• BYPASS – включение/выключение кэша на уровне экзмепляра• STATUS – проверка статуса кэша• MEMORY_REPORT – вывод отчета об использовании кэша

Page 65: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

65

SQL & PL/SQL Result CacheНастройка

• Result Cache располагается в разделяемом пуле• Разделяется всеми сессиями

• Параметры инициализации• RESULT_CACHE_MAX_SIZE – задает макс. размер кэша в SGA• RESULT_CACHE_MAX_RESULT – макс. % от кэша для одногообъекта

• RESULT_CACHE_REMOTE_EXPIRATION – кэширование объектовпо db-link (через сколько минут проверять актуальность)

• Мониторинг – динамические представления• V$RESULT_CACHE_STATISTICS• V$RESULT_CACHE_OBJECTS• V$RESULT_CACHE_DEPENDENCY• V$RESULT_CACHE_MEMORY

Page 66: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

66

OCI Client Result CacheКэширование на клиенте

• Кэширует результаты запроса на клиенте• Улучшает производительность работы с таблицами,используемыми в основном для чтения (read-mostly)

• Более быстрое время отклика – исключается передача по сети• Уменьшает нагрузку на процессоры сервера

• Согласован с сервером• Кэш проактивно обновляется, когда изменяется выборка• Сихронизация кеша

Application Server

Database

Связанноекэширование

Page 67: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

67

OCI Client Result Cache• Унифицированный интерфейс с Server result cache• Кэш процесса разделяется несколькими сессиями• Параметр CLIENT_RESULT_CACHE_LAG

• Через сколько миллисекунд после последнего обращения ксерверу делать проверку кэша на актуальность

• Параметр CLIENT_RESULT_CACHE_SIZE• Максимальный объем памяти выделяемый на клиенте подкэш

• Работает со всеми 11g OCI-based клиентами• Включая ODP.Net, JDBC OCI Driver, PHP, ODBC

Page 68: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

68

OCI Client Result CacheНастройки на клиенте

• Параметры в файле sqlnet.ora• OCI_RESULT_CACHE_MAX_SIZE (имеет приоритет перед

CLIENT_RESULT_CACHE_SIZE)• OCI_RESULT_CACHE_MAX_RSET_SIZE• OCI_RESULT_CACHE_MAX_RSET_ROWS

Page 69: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

69

OCI Client Result CacheПреимущества

• Освобождает разработчиков от созданиясобственного кэша результатов запросов,разделяемого между сессиями

• Распространяет кэширование на клиента• Использует более дешёвую клиентскую память• Меньше обращений к серверу• Прозрачно поддерживает синхронизацию ссервером

Page 70: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

70

<Insert Picture Here>

Новые возможности PL/SQL

• Увеличение быстродействия• Новые синтаксические конструкции• Новые возможности в динамическом SQL• Новое в триггерах• Технология Result Cache• Новые инструменты для разработчиков• Заключение

Page 71: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

71

Анализ и оптимизацияпроизводительности в PL/SQLВ 11g: новый профайлер

• Встроенный пакет DBMS_HPROF• На выходе формируется trc-файл (текстовый)• Вывод дополнительной информации: dynamic-sql, static-sql, init-секция и т.д.

• Показ иерархии вызовов• рlshprof – утилита для преобразования trc-файла в html-отчет• Не требуется перекомпиляция (DEBUG) и изменение кода

Page 72: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

72

Анализ и оптимизацияпроизводительности в PL/SQLВ 11g: пример работы профайлера

• Получить отчет• % plshprof -output report test.trc

VARIABLE runid NUMBER;BEGIN

:runid := DBMS_HRPROF.analyze('PLSHPROF_DIR','test.trc',trace => '"HR"."PKG"."MYPROC"');

END;

• Включить профилирование для процедуры pkg.myproc

Page 73: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

73

Анализ и оптимизацияпроизводительности в PL/SQLВ 11g: пример отчета профайлера

Page 74: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

74

Анализ исходного кода PL/SQLВ 11g: новый инструмент - PL/Scope

• Сбор информации об всех идентификаторах исходногокода• Аналог Cscope для языка C (http://cscope.sourceforge.net)• Параметр PLSCOPE_SETTINGS – для определения типасобираемых идентификаторов

• Представление USER_IDENTIFIERS – для просмотра• Предварительно нужна перекомпиляция• Для wrapped-кода сбор информации невозможен !• Интеграция с SQL Developer

Page 75: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

75

Анализ исходного кода PL/SQLВ 11g: PL/Scope - пример

SQL> alter session set plscope_settings='identifiers:all';

SQL> alter type TObject compile;

SQL> select name, type, usage from USER_IDENTIFIERS;

NAME TYPE USAGE----------- ------------------ -----------V_PSTATE FORMAL IN DECLARATIONSELF FORMAL IN OUT DECLARATIONSETSTATE PROCEDURE DECLARATIONSETSTATE PROCEDURE DEFINITIONGETSTATE FUNCTION DECLARATIONGETSTATE FUNCTION DEFINITIONGETNEWID FUNCTION DECLARATIONGETNEWID FUNCTION DEFINITIONGETID FUNCTION DECLARATIO

Page 76: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

76

<Insert Picture Here>

Новые возможности PL/SQL

• Увеличение быстродействия• Новые синтаксические конструкции• Новые возможности в динамическом SQL• Новое в триггерах• Технология Result Cache• Новые инструменты для разработчиков• Заключение

Page 77: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

77

ЗаключениеРезюме по новым возможностям в PL/SQL

• Улучшение производительности• Отслеживание зависимостей на уровне элементов объектов• Real PL/SQL native compilation• Inline-подстановка• SQL & PL/SQL Result Caches• Составные триггеры

• Для того чтобы и использовать эти возможноститребуются лишь небольшие усилия!

Page 78: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

78

• Новая функциональность:• Расширения в динамическом SQL• DBMS_SQL – улучшение в безопасности• Контроль доступа через пакеты UTL_TCP, и д.р.• Regexp_Count(), в SQL и PL/SQL• Создание отключенного триггера; порядок срабатываниятриггеров

• “when others then null” – новые предупреждения компилятора

ЗаключениеРезюме по новым возможностям в PL/SQL

Page 79: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

79

ЗаключениеРезюме по новым возможностям в PL/SQL

• Удобство использования• Последовательности в PL/SQL-выражениях• Оператор continue• Именованная и смешанная нотация вызовов PL/SQL в SQL

• Инструменты• PL/Scope• PL/SQL Hierarchical Profiler

Page 80: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

80

<Insert Picture Here>

Секционирование в OracleDatabase 11g

Page 81: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

81

Секционирование

• Смешанное секционирование• Виртуальные столбцы• Interval Partitioning• REF Partitioning• System Partitioning• Заключение

Page 82: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

82

Table SALESRANGE(order_date)-RANGE(ship_date)

Jan 2008

... ...

Feb 2008 Mar 2008 Jan 2009

... ...

... ...

...

...

...

...

Jan2008

Feb2008

Jan2008

Composite Partitioning - концепция

- order_date

Page 83: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

83

Composite Partitioning - концепция

Table SALESRANGE(order_date)-RANGE(ship_date)

Jan 2008

... ...

Feb 2008 Mar 2006 Jan 2009

... ...

... ...

...

...

...

...

Jan2008

Feb2008

May2008

Mar 2008

• Все заказысделанные вМарте 2008г. (order_date inMarch 2008)

Page 84: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

84

Composite Partitioning - концепция

Table SALESRANGE(order_date)-RANGE(ship_date)

Jan 2008

... ...

Feb 2008 Mar 2008 Jan 2009

... ...

... ...

...

...

...

...

Jan2008

Feb2008

May2006

• Все заказыотгруженные вМае 2008 г(ship_date in May2008)

May2008

Page 85: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

85

Composite Partitioning - концепция

Table SALESRANGE(order_date)-RANGE(ship_date)

Jan 2008

... ...

Feb 2008 Mar 2006 Jan 2009

... ...

... ...

...

...

...

...

Jan2008

Feb2008

May2006

Mar 2008

• Все заказы сorder_date inMarch 2008иship_date inMay 2008

May2008

Page 86: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

86

Composite PartitioningВ 11g – поддержка всех комбинаций

• Oracle Database 11g поддерживает всекомбинации смешанного секционирования

YesYesYesInterval

YesYesYesList

YesYesYesRange

HashListRange

Page 87: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

87

Секционирование

• Смешанное секционирование• Виртуальные столбцы• Interval Partitioning• REF Partitioning• System Partitioning• Заключение

Page 88: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

88

Виртуальные столбцы

• Дополнительные атрибуты схемы вычисляются на основесуществующих данных

• Избыточное хранение данных или создание дополнительных viewпомогает решить эту проблему

• Усложняет поддержку и замедляет работу

Бизнес проблема

Решение• Oracle Database 11g позволяет определять виртуальные колонки

• Полностью виртуальные, только метаданные !• Трактуются как реальные колонки, но DML в них запрещен

• Виртуальные колонки могут иметь статистику• Виртуальные колонки могут использоваться как ключ секционирования

• Лучше производительность и проще поддерживать

Page 89: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

89

Виртуальные столбцыПример

• Базовая таблица с всеми атрибутами ...

CREATE TABLE accounts(acc_no number(10) not null,acc_name varchar2(50) not null, ...

12500 Adams12507 Blake1266612875 Smith

King

Page 90: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

90

12500 Adams12507 12Blake12666 1212875 12Smith

King

CREATE TABLE accounts(acc_no number(10) not null,acc_name varchar2(50) not null, ...acc_branch number(2) generated always as(to_number(substr(to_char(acc_no),1,2)))‏

12

• Базовая таблица с всеми атрибутами...• ... добавлен виртуальный столбец

Виртуальные столбцыПример

Page 91: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

91

12500 Adams12507 12Blake12666 1212875 12Smith

King

CREATE TABLE accounts(acc_no number(10) not null,acc_name varchar2(50) not null, ...acc_branch number(2) generated always as

(to_number(substr(to_char(acc_no),1,2)))‏partition by list (acc_branch) ...

12

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

32320 Jones32407 32Clark32758 3232980 32Phillips

32

... Hurd

Виртуальные столбцыПример – секционирование по виртуальномустолбцу

Page 92: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

92

• В качестве выражения столбца может быть использованаPL/SQL-функция

• Функция должна быть детерминированной (явно!)• По виртуальному столбцу можно строить индекс !

Виртуальные столбцыЗамечания по использованию

CREATE TABLE accounts(acc_no number(10) not null,acc_name varchar2(50) not null, ...

acc_branch number(2) generated always as(acc_service.getBranch(acc_no)));

create or replace package acc_service is

function getBranch(v_pAccNo in number) return number deterministic;end;

Page 93: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

93

Секционирование

• Смешанное секционирование• Виртуальные столбцы• Interval Partitioning• REF Partitioning• System Partitioning• Заключение

Page 94: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

94

Interval Partitioning

• Interval Partitioning• Расширение Range Partitioning• Полная автоматизация для равномерных range partitions

• Вначале сегменты создаются только на уровне метаданных• Создается только стартовая Partition

• Сегменты создаются только тогда, когда для них появляютсяданные

• Не надо создавать новые сегменты• Также создаются и поддерживаются локальные индексы

Не нужно управлять секциями

Page 95: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

95

Interval Partitioning

Table SALES

Jan 2006

... ...

Feb 2006 Mar 2006 Jan 2007 Oct 2009 Nov 2009

...

INSERT INTO sales (order_date DATE, ...)VALUES ('04-MAR-2006',...);

Новый сегмент создается автоматически

• Очень легко..CREATE TABLE sales (order_date DATE, ...)

PARTITON BY RANGE (order_date)INTERVAL(NUMTOYMINTERVAL(1,'month')(PARTITION p_first VALUES LESS THAN ('01-JAN-2006');

Page 96: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

96

Interval PartitioningЗамечания по использованию

• В качестве ключа секционирования может выступать один столбец• Столбец должен быть типа NUMBER или DATE• Interval Partitioning не поддерживается для IOT• Возможно смешанное секционирование:

• Interval-range• Interval-hash• Interval-list

Page 97: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

97

Секционирование

• Смешанное секционирование• Виртуальные столбцы• Interval Partitioning• REF Partitioning• System Partitioning• Заключение

Page 98: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

98

REF Partitioning

• Связанные таблицы часто надо делить на секцииодинаковым образом (та же стратегия)• Пример: заказы (order) – строчки заказа (lineitem)

• Эту проблему можно решить за счет избыточного хранениятой же информации (дата заказа)• Дублирование данных• Усложнение сопровождения

Проблемы бизнеса

Решение• Oracle Database 11g поддерживает REF Partitioning

• Подчиненная таблица (Child) наследует стратегиюсекционирования родительской таблицы через связь PK-FK

• Интуитивная модель• Лучше производительность и легче сопровождение

Page 99: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

99

REF Partitioning

Таблица ORDERS

Jan 2006

... ...

Feb 2006

Таблица LINEITEMS

Jan 2006

... ...

Feb 2006

• RANGE(order_date)• Primary key order_id

• RANGE(order_date)• Foreign key order_id• RANGE(order_date)• Foreign key order_id

PARTITION BY REFERENCE• Ключ секционированиянаследуется через связь PK-FK

Page 100: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

100

Секционирование

• Смешанное секционирование• Виртуальные столбцы• Interval Partitioning• REF Partitioning• System Partitioning• Заключение

Page 101: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

101

System Partitioning

• Секционирование определяемое разработчиком• Алгоритм секционирования определяет разработчик

CREATE TABLE SystemPartitionedTable (c1 integer, c2 integer)

PARTITIONED BY SYSTEM(

PARTITION p1 TABLESPACE tbs_1,

PARTITION p2 TABLESPACE tbs_2,

PARTITION p3 TABLESPACE tbs_3,

PARTITION p4 TABLESPACE tbs_4

);

Page 102: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

102

System Partitioning

• Операция вставки в таблицу должна использоватьрасширенный синтаксис:

INSERT INTO SystemPartitionedTable PARTITION (p1) VALUES (4,5);

Page 103: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

103

Секционирование

• Смешанное секционирование• Виртуальные столбцы• Interval Partitioning• REF Partitioning• System Partitioning• Заключение

Page 104: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

104

Well-tunedSQL & Schema

Partitioning Advisor

• На основе работы SQLвыдает рекомендации посекционированию

• Советует выбор метода:• Range (equal-interval), range

key and interval• Hash, hash key

• Учитывает конфликты синдексами и MV

SQL Workload

PackagedApps

CustomApps

SQL Advisor

SQL PlanTuning

SQLStructureAnalysis

AccessAnalysis

SQLProfile

SQLAdvice

Indexes& MVs

PartitionAnalysis

PartitionAdvice

New!

Page 105: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

105

Oracle Partitioning:10 лет исследований и разработок

Fast drop table“Multi-dimensional”pruning

1M partitions per tableOracle10g R2

Local Indexmaintenance

Global hash indexesOracle10g

Fast partition splitComposite range-listpartitioning

Oracle9i R2

Global indexmaintenance

List partitioningOracle9i

Merge operationPartition-wise joins“Dynamic” pruning

Hash and compositerange-hash partitioning

Oracle8i

Basic maintenanceoperations: add,drop, exchange

“Static” partitionpruning

Range partitioningGlobal range indexes

Oracle8ManageabilityPerformanceCore functionality

Page 106: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

106

Oracle Partitioning:10 лет исследований и разработок

Interval PartitioningPartition AdvisorSystem Partitioning

More composite choicesREF PartitioningVirtual Column Partitioning

OracleDatabase 11g

Fast drop table“Multi-dimensional”pruning

1M partitions per tableOracle10g R2

Local Indexmaintenance

Global hash indexesOracle10g

Fast partition splitComposite range-listpartitioning

Oracle9i R2

Global indexmaintenance

List partitioningOracle9i

Merge operationPartition-wise joins“Dynamic” pruning

Hash and compositerange-hash partitioning

Oracle8i

Basic maintenanceoperations: add,drop, exchange

“Static” partitionpruning

Range partitioningGlobal range indexes

Oracle8ManageabilityPerformanceCore functionality

Page 107: - Oracledownload.oracle.com/opndocs/emea/11gNewFeaturesWebinar.pdf ·  Oracle ISV Migration Center ВадимМельников

107