13 июл. 2012 г.

Protect PL/SQL API by Data Vault

Опция Data Vault все время преподносится как средство для защиты БД от администратора. Однако, на самом деле, с ее помощью можно реализовывать дополнительные проверки, сделать которые стандартным функционалом невозможно.

Рассмотрим для примера такую ситуацию: PL/SQL-код приложения состоит из нескольких слоев: слой доступа к данным, слой бизнес-логики и слой обеспечивающий презентационный уровень. Одним словом, есть набор PL/SQL-пакетов и типов реализующих доступ к таблицам, есть PL/SQL-объекты которые содержат в себе бизнес-логику и есть код реализующий визуальный интерфейс приложения (например: пользовательский код в формах APEX).

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

В настоящий момент, стандартными средствами СУБД, невозможно реализовать декларативную проверку на возможность вызова PL/SQL-процедур только в определенном месте.

Для решения этой задачи нам на помощь приходит опция Data Vault. Мы можем создать правило на команду EXECUTE и далее в функции проверки этого правила, проанализировав стек вызовов PL/SQL, разрешить или запретить вызов соответствующей процедуры.

Давайте посмотрим, как все это работает.
В моем приложении работу с репозитарием объектов инкапсулирует объектный тип TObjectRepository. К этому объектному типу непосредственно могут обращаться только следующих три объектных типа:
  • TPersistent - абстрактный тип, его наследники обладают свойством сохранять и читать свое состояние из БД;
  • TDictionary - инкапсулирует работу с справочниками, в связи с особой ролью системных справочников, может напрямую обращаться к API поддержки репозитория;
  • TGroup - инкапсулирует функционал группировки объектов в группы, тоже напрямую может работать с фабрикой объектов.

Для начала создадим функцию осуществляющую проверку возможности вызова:

create or replace function pcl4.check_valid_call return pls_integer is
begin
  if pcl_service.getWhoCallMe in ('PCL4.TPERSISTENT','PCL4.TDICTIONARY','PCL4.TGROUP') then
    return 1;
  end if;

  return 0;
end;
/
show errors;

grant execute on check_valid_call to dvsys;
где функция getWhoCallMe анализируя стек вызовов (с помощью системной функции DBMS_UTILITY.FORMAT_CALL_STACK), возвращает имя PL/SQL-объекта из которого была вызвана текущая проверяемая процедура.
Также не забываем дать права на выполнение функции проверки пользователю DVSYS, поскольку выполнение проверки будет происходит из под него.
Конечно, было бы более правильнее, если бы условие проверки в функции check_valid_call не было бы жестко зашито в код, а читалось из отдельной таблицы. Но сути примера это не меняет.

Далее, подключившись под пользователем владельцем Data Vault (его имя мы указали при установке опции DataVault) определяем правило:
SQL> connect dvpcl/*****
Connected.
SQL>
SQL> declare
  2    v_xRule_set_name  varchar2(90 char)  := 'Проверка вызова PL/SQL-объекта в разрешённом месте';
  3    v_xRule_name      varchar2(90 char)  := 'CHECK_API_LAYER';
  4  begin
  5    --Создаем набор правил
  6    dvsys.dbms_macadm.create_rule_set(rule_set_name   => v_xRule_set_name
  7                                     ,description     => null
  8                                     ,enabled         => dvsys.dbms_macutl.g_yes
  9                                     ,eval_options    => dvsys.dbms_macutl.g_ruleset_eval_all
 10                                     ,audit_options   => dvsys.dbms_macutl.g_ruleset_audit_off
 11                                     ,fail_options    => dvsys.dbms_macutl.g_ruleset_fail_show
 12                                     ,fail_message    => 'Вызов в данном месте НЕ разрешен'
 13                                     ,fail_code       => -20002
 14                                     ,handler_options => dvsys.dbms_macutl.g_ruleset_handler_off
 15                                     ,handler         => null);
 16    -- Создаем правило - указываем код проверки:
 17
 18    dvsys.dbms_macadm.create_rule(rule_name => v_xRule_name
 19                                 ,rule_expr => 'PCL4.CHECK_VALID_CALL = 1');
 20
 21    -- Добавляем вновь созданное правило к нашему набору
 22    dvsys.dbms_macadm.add_rule_to_rule_set(rule_set_name => v_xRule_set_name
 23                                          ,rule_name     => v_xRule_name);
 24
 25    -- Указываем критерии проверки: выполнение (EXECUTE) объектного типа (TOBJECTREPOSITORY) содержащегося в определенной схеме (PCL4)
 26    dvsys.dbms_macadm.create_command_rule(command         => 'EXECUTE'
 27                                         ,rule_set_name   => v_xRule_set_name
 28                                         ,object_owner    => 'PCL4'
 29                                         ,object_name     => 'TOBJECTREPOSITORY'
 30                                         ,enabled         => dvsys.dbms_macutl.g_yes);
 31    commit;
 32  end;
 33  /

PL/SQL procedure successfully completed.

SQL>

Обратите внимание, что проверка будет производится только к вызовам объектного типа TObjectRepository, место вызова остальных PL/SQL-объектов никак не проверяется!
Таким образом, мы можем явно определить PL/SQL-объекты, вызов которых возможен только в определенном месте.

Теперь попробуем обратиться к объекту из произвольной процедуры:
SQL> conn pcl4/*****
Connected.
SQL> create or replace procedure test_dv1 is
  2    v_xObject TPersistent;
  3  begin
  4    v_xObject := TObjectRepository.getObjectById(12345) ;
  5  end;
  6  /

Procedure created.

SQL> show errors;
No errors.
SQL>
SQL> exec test_dv1;
BEGIN test_dv1; END;

*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "PCL4.TOBJECTREPOSITORY", line 248
ORA-06512: at "PCL4.TEST_DV1", line 4
ORA-06512: at line 1

SQL>
Здесь важно отметить, что проверка производится именно в момент вызова, а не компиляции вызывающего PL/SQL-блока.

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

18 июн. 2012 г.

Oracle stored procedure on Pascal!

Всем хорошо известно, что хранимые процедуры для Oracle Database можно разрабатывать только на двух языках программирования PL/SQL и Java.

Однако ничего не мешает использовать для разработки хранимых процедур любой язык программирования, компилятор которого на выходе может генерировать байт-код виртуальной машины Java. Далее полученный class-файл или jar-файл, можно загрузить в Oracle Database Java VM и вызывать внутри базы данных !

Рассмотрим для примера компилятор языка программирования Pascal Oxygene for Java компании RemObjects. Этот компилятор транслирует исходный код на Object Pascal в байт-код виртуальной машины Java.
Кстати говоря, эта компания имеет в своем арсенале также аналогичный компилятор Oxygene for .Net, который транслирует исходник на Pascal в код исполняющей системы .Net. Этот компилятор лицензирован компанией Embarcadero и входит в состав среды разработки Delphi под названием Delphi Prism.







Итак, предположим, что у нас имеется вот такой простейший класс на Object Pascal:
namespace testPascalSP;

interface

type
  TMyClass = class
  public
    class function getHello :  String;
  end;

implementation

uses
  java.sql.*;

  class function TMyClass.getHello : String;
  begin
    var conn := DriverManager.getConnection('jdbc:default:connection:');
    var stmt := conn.createStatement();  

    var rset := stmt.executeQuery('select ''Hello World!'' from dual');

    if rset.next() then
      Result := rset.getString (1);

    rset.close();
    stmt.close();
  end;

end.
Класс TMyClass имеет одну статическую функцию getHello, которая возвращает традиционное приветствие, "извлекая" его из таблицы DUAL.
Обратите внимание, что в программе на Pascal-е используются Jаva-библиотеки (JDBC-драйвер)!

Компилятор Oxygene for Java существует в двух видах: в виде графической среды разработки которая встраивается в среду MS Visual Studio и в виде утилиты командной строки.

Компилируем исходник на Pascal-е c помощью компилятора командной строки:
C:\>Oxygene.exe testPascalSP.oxygene
RemObjects Oxygene for .NET - Version 5.2.36.1029 (BETA)
Copyright RemObjects Software 2003-2012. All rights reserved.

Source file: C:\PascalSP>Program.pas
Reference: C:\Program Files (x86)\Java\jre6\lib\rt.jar

Compilation successful, generated file ".\bin\Release\testPascalSP.jar"
Пусть вас не смущает вывод названия RemObjects Oxygene for .NET. На самом деле для .Net и Java компилятор общий, и включает в себя back-end и для .Net, и Java. С помощью опций проекта в файле test1.oxygene целевая платформа может переключаться.
Далее полученный jar-файл загружаем в СУБД:
C:\>loadjava -user scott/tiger@orcl -resolve testpascalsp.jar
Осталось создать PL/SQL-оболочку для вызова статического метода Java-класса:
C:\>sqlplus scott/tiger@orcl

SQL*Plus: Release 11.2.0.3.0 Production on Mon Jun 18 20:05:54 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> create or replace function getHello return varchar2 is
  2     language java
  3       name 'testpascalsp.TMyClass.getHello() return java.lang.String';
  4  /

Function created.

SQL>
Теперь можно вызывать нашу хранимую процедуру на Pascal внутри СУБД!
SQL> exec dbms_output.put_line(getHello());
Hello World!

PL/SQL procedure successfully completed.
Какие преимущества дает использование другого языка программирования, в данном случае Object Pascal, для разработки хранимых процедур СУБД: Также back-end для JavaVM имеет другой известный компилятор языка Pascal- FreePascal.

10 мая 2012 г.

Template for Enterprise Manager Cloud Control 12c

Новые возможности Enterprise Manager Cloud Control 12c известны уже многим благодаря многочисленным материалам, опубликованным на сайте Oracle


Но для того, чтобы попробовать новые возможности, почему то не у всех получается развернуть Enterprise Manager Cloud Control 12c в своём окружении; у некоторых опускаются руки уже во время подготовки ОС и распаковки дистрибутива :-). 

12-го апреля на сайт https://edelivery.oracle.com/oraclevm был выложен шаблон виртуальной машины с предустановленным Enterprise Manager Cloud Control 12c.
Теперь, для того, чтобы познакомиться с продуктом, достаточно просто развернуть уже готовую виртуальную машину и всего лишь ответить на несколько вопросов при её запуске.

После скачивания Oracle VM Template for Enterprise Manager Cloud Control 12c Media Pack v1 for x86 (64 bit) обязательно прочитайте readme. В этом файле подробно описан процесс распаковки того что вы скачали: сначала нужно разархивировать три архива, а затем объединить полученное в один tar-файл и распаковать.

# unzip V31982-01.zip
# unzip V31983-01.zip
# unzip V31984-01.zip
# cat OVM_EM12*.tgz | tar -xzvf -

В этом же файле readme вы найдёте две инструкции по запуску виртуальной машины:
- Creating Guest Virtual Machine from Oracle VM Template using Oracle Enterprise Manager Cloud Control Console
- Creating Guest Virtual Machine from Oracle VM Template from Oracle VM server terminal

Очевидно Вам нужна вторая, т.к. консоли OEM у вас ещё нет (за исключением тех случаев, когда кто то из вас захочет развернуть в уже существующем Oracle Cloud подклауды :-)

Для разворачивания же на Oracle VM server можно использовать не только Oracle VM 3.0 , а также и OVM 2.2 .

Но тут может возникнуть новая сложность, не все ещё знакомы с OVM  или просто нет в наличии отдельной физической машины для установки OVM server.

Для таких случаев предлагаю воспользоваться другой технологией виртуализации -  Oracle VM VirtualBox. 


Сначала нужно распаковать архивы V3198*-01.zip как указано выше.
Если вы используете VirtualBox for Windows, то вместо "cat OVM_EM12*.tgz" используйте  команду copy:
copy /b OVM_EM12_1of3.tgz+OVM_EM12_2of3.tgz+OVM_EM12_3of3.tgz OVM_EM12.tgz

Полученный файл OVM_EM12.tgz распакуйте и вы получите директорию с тремя файлами:

07.03.2012  03:41    28 994 112 000 em12.img
07.03.2012  03:42     6 720 053 760 System.img
14.03.2012  10:38               305 vm.cfg
               3 File(s) 35 714 166 065 bytes

 

Теперь нужно преобразовать образы дисков виртуальной машины OEM12c к формату , понятному VirtualBox, с помощью утилиты VBoxManage:
D:\OVM_EM12>"C:\Program Files\Oracle\VirtualBox\VBoxManage" convertdd System.img System.vdi
Converting from raw image file="System.img" to file="System.vdi"...
Creating dynamic image with size 6720053760 bytes (6409MB)...

D:\OVM_EM12>"C:\Program Files\Oracle\VirtualBox\VBoxManage" convertdd em12.img em12.vdi
Converting from raw image file="em12.img" to file="em12.vdi"...
Creating dynamic image with size 28994112000 bytes (27651MB)...




Далее нужно просто создать в VirtualBox новую виртуальную машину, указав в качестве носителей полученные образы жёстких дисков:


После старта этой виртуальной машины вы должны будете ответить на несколько вопросов:
IP address, netmask address, hostname, default gateway IP address, DNS server IP address, password for the database account, password for the Agent secure registration, email address if you want Oracle to contact you with security updates.
После ответа на эти вопросы начнётся процесс автоматического конфигурирования всего технологического стека, необходимого для OEM 12c , по окончании которого вам достаточно зайти браузером по адресу https://<вашIP>:7779/em






1 мая 2012 г.

Columnar Compression on Axiom storage

Как вы наверное знаете, технология колоночного сжатия (Hybrid Columnar Compression) работает не только на Exadata, но, в том числе, и на дисковых массивах Pillar Axiom. Рассмотрим процесс настройки и подготовки СУБД для использования HCC на этих системах хранения. В качестве ОС на сервере СУБД был использован Oracle Linux for x86_64. Предполагаем, что на сервере были выполнены все настройки необходимые для доступа к разделам на системе хранения Axiom, то есть был установлен Oracle Linux 5U6, обновлено ядро до последнего UEK и настроен multupathing.

Исходная информация:
  • 1. Поддержка HCC на массивах Axiom есть только начиная с Oracle Database 11.2.0.3.1 и работает только на ASM.

  • 2. Дополнительно параметры совместимости дисковой группы ASM (compatibility и rdbms.compatibility) должны быть выставлены в 11.2.0.3.0

  • 3. Также на дисковой группе, на которой будут размещаться файлы табличных пространств с сжатыми таблицами, должен быть выставлен атрибут storage.type в значение "AXIOM".
Итак, приступим!

Поскольку нам необходимо получить доступ на массиве к объему дискового пространства 10Тб, приходится предварительно создать 5 LUN-ов по 2Тб. Как вы помните, ASM на системах хранения отличных от Exadata, имеет ограничение на размер диска в 2Tb.

Не забудьте создать раздел (primary partition) на каждом из созданных LUN-ов. После этого желательно перегрузить сервер, иначе из-за multipathing-а операционная система может не увидеть новые разделы.

Обычным образом устанавливаем Oracle Grid Infrastructure 11.2.0.3 и создаем дисковую группу с уровнем избыточности External (то есть зеркалирование отдаем на уровень массива) состоящую из 5 разделов. Затем стандартно устанавливаем Oracle Database 11.2.0.3.
Поскольку уже вышел PSU2 (Patch 13696251 - Oracle Grid Infrastructure 11.2.0.3 PSU2) устанавливаем именно его. Перед этим не забываем обновить утилиту OPatch (в обеих каталогах - GI_HOME и DB_HOME!).

Далее нужно создать БД или перенести уже существующую БД на ASM.

Наконец, приступаем к самой ответственной части: настройке БД и ASM.

Устанавливаем параметр compatible на СУБД в значение 11.2.0.3.0:
SQL> alter system set compatible='11.2.0.3.0' scope=spfile sid='*';
System altered.
Корректно останавливаем БД:
[oracle@myhost]$ srvctl stop database orcl

Нужно не забыть также выставить параметр совместимости для нашей вновь созданной дисковой группы ASM.

Переключаемся в окружение Grid Infrastructure:
[oracle@myhost]$ export ORACLE_HOME=/u01/app/11.2.0.3/grid
[oracle@myhost]$ export ORACLE_SID=+ASM

[oracle@myhost]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.3.0 Production on Tue May 1 18:04:06 2012

Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options


SQL> alter diskgroup data_hcc set attribute 'compatible.asm'='11.2.0.3.0';

Diskgroup altered.

SQL> alter diskgroup data_hcc set attribute 'compatible.rdbms'='11.2.0.3.0';

Diskgroup altered.
И, наконец, выставляем атрибут дисковой группы storage.type в значение "AXIOM".
SQL> alter diskgroup data_hcc set attribute 'storage.type'='AXIOM';

Diskgroup altered.
Именно в этот момент происходит проверка, что дисковая группа действительно создана на системе хранения Axiom. Если при выполнении этой команды Вы получаете вот такое сообщение об ошибке:
ORA-15287: could not set disk group attribute storage.type due to incompatible disks
ORA-15285: disk '/dev/mapper/XXXXXXXX' violates disk group attribute storage.type
это означает, что по какой-то причине ASM не может прочитать название массива на котором созданы LUN-ы, либо это действительно не массив Axiom :-) .

На этом все!
Можно создавать табличное пространство на вновь созданной дисковой группе и сжимать данные ...

21 апр. 2012 г.

Ускорение "1С:Предприятие for Oracle" за счет сжатия таблиц

Кроме выступления Вадима Гусева на мероприятии "Модернизация системы управления бизнесом с помощью ERP-решений 1С с помощью инновационной технологической платформы Oracle" Андрей Забелин демонстрировал возможности OLTP-сжатия для увеличения производительности одного из бухгалтерских отчётов приложения "1С:Предприятие 8.2".



Ролик можно посмотреть здесь.

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

Это происходит за счет уменьшения ввода-вывода (СУБД меньше читает и пишет на диск), а это самая ресурсоёмкая операция. И это происходит не на каком-то искусственном тесте, а в реальном приложении !



Программное окружение было аналогичным как в демонстрации Вадима.

Сервер приложений "1C:Предприятие" также работал под управлением ОС Oracle Linux x64 5U6.



Основная идея демонстрации – показать:

  • Возможности Enterprise Manager для быстрого обнаружения ресурсоёмкого SQL-запроса, который являлся причиной долгого выполнения одного из бухгалтерских отчётов приложения "1С:Предприятие 8.2";

  • Быстрота и удобство анализа плана SQL-запроса;

  • Удобство навигации от плана запроса к редактированию свойств таблицы;

  • Эффективность сжатия данных с помощью Advanced Compression, которое позволяет не только уменьшить объём данных на диске, но и значительно ускорить выполнение запроса за счёт уменьшения количества обрабатываемых блоков.



Поскольку Андрей (как и все мы впрочем) не является специалистом в бухгалтерском учёте, выбранный отчёт «Анализ субконто» и параметры этого отчёта могут показаться опытному бухгалтеру некорректными, но цель была одна - нагрузить БД таким образом, чтобы набор обрабатываемых данных был наибОльшим в тестовой БД.



К сожалению, в текущей версии "1С:Предприятие" не поддерживается настройка сжатия данных таблицы через интерфейс самой 1С, что приводит к возможной потери этой настройки при обновлении конфигурации 1С, но это уже совсем другая история ... Следите за следующими публикациями !



Приятного просмотра!

Cсылка: видео.

15 апр. 2012 г.

Updates for Oracle Linux now free!

Пришла хорошая новость по поводу поддержки Oracle Linux. Теперь скачивание обновлений для этой ОС стало бесплатным !
Раньше для этого нужно было приобретать подписку на ULN (Unbreakable Linux Network).
Для настройки обновлений воспользуйтесь инструкцией на сайте http://public-yum.oracle.com. Затем выполните команду yum update
Рис. 1 Установка обновлений на Oracle Linux


Но ведь RedHat берет за обновление деньги ... :-)

10 апр. 2012 г.

Присоединяйтесь к JavaOne & Oracle Develop 2012

To ensure delivery directly to your inbox, please add replies@oracle-mail.com to your address book today.

JavaOne and Oracle Develop 2012 Russia. 17-18 April. Russian Academy of Sciences, Moscow

Присоединяйтесь к JavaOne & Oracle Develop 2012 сегодня!

Программа JavaOne сессий уже доступна!

В этом году мы снова приглашаем Вас на JavaOne & Oracle Develop, которые опять расположатся в Российской Академии Наук. Oracle предлагает сообществу разработчиков 2 уникальных дня обучения и общения.

Не упустите возможность приобрести билет по цене 1200 рублей.

В этом году мы снова приглашаем Вас на JavaOne & Oracle Develop, которые опять расположатся в Российской Академии Наук. Oracle предлагает сообществу разработчиков 2 уникальных дня обучения и общения.


Конференция JavaOne состоит из четырех потоков Базовая платформа Java, Клиентские технологии, Java Enterprise Edition, Web-сервисы и Облачные Вычисления и Java Micro Edition, Мобильные и Встраиваемые Платформы, Java-карты. А также мастер-классов и Хак-зоны.


В треке Базовая платформа Java четыре доклада представляют инженеры по производительности компании Oracle - Алексей Шипилёв и Сергей Куксенко, которые поделятся накопленным опытом с участниками конференции. Сергей Куксенко об одном из своих докладов: Многоядерные машины стали частью сурового быта: десятком, а то и сотней логических процессоров уже мало кого удивишь. Однако мы до сих пор учимся писать быстрые и корректные программы для этих почти ручных монстриков. Этот доклад посвящён разбору типичных проблем с производительностью параллельных программ, работающих на машинах с разделяемой памятью; описанию их симптомов, а также обсуждению типичных подходов к диагностике и решению проблем


Дуглас Кларк - директор компании Oracle расскажет о настоящем и будущем персистентности в Java и готовности Java к переходу к облачным приложениям.


Направление клиентских приложений будет представлено инженерами Санкт-Петербургского центра разработок Oracle непосредственно участвующих в создании технологии JavaFX. Вы узнаете о новом языке FXML, о тонкостях создания быстрых приложений на JavaFX, увидите интеграцию JavaFX приложения с игровой приставкой, получите возможность принять участие в конкурсе и выиграть ценные призы.


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


Не пропустите доклады от экспертов признанных сообществом Java разработчиков. Впервые в Москве выступит Бёрт Эртман – обладатель звания Java Champion и являющийся идейным вдохновителем Java User Group в Нидерландах. Берт расскажет о том нужно ли, и если да, то как перейти от Spring к JavaEE 6. Антон Архипов – один из основателей devclub.eu поделится опытом продуктивной разработки JavaEE приложений.

Больше информации на JavaOne and Oracle Develop 2012.

Региcтрация на сайте

Дополнительная информация


адрес: oracle@javaone2012.ru,


телефон: 8 (499) 391-25-72

Hardware and Software, Engineered to Work Together
Oracle Corporation

Copyright © 2012, Oracle
and/or its affiliates.

All rights reserved.

Contact Us | Legal Notices and Terms of Use | Privacy Statement